跳到主要内容

TPC-H 扩展

tpch 扩展实现了 TPC-H benchmark 的数据生成器与查询。

安装与加载

tpch 扩展在部分 Goose 构建中默认提供;否则会在首次使用时自动按需加载。 若要手动安装并加载,请执行:

INSTALL tpch;
LOAD tpch;

用法

生成数据

要生成 scale factor 为 1 的数据,请使用:

CALL dbgen(sf = 1);

调用 dbgen 不会清理已有 TPC-H 表。 若要清理已有表,请在运行 dbgen 前使用 DROP TABLE

DROP TABLE IF EXISTS customer;
DROP TABLE IF EXISTS lineitem;
DROP TABLE IF EXISTS nation;
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS part;
DROP TABLE IF EXISTS partsupp;
DROP TABLE IF EXISTS region;
DROP TABLE IF EXISTS supplier;

运行查询

要运行查询(例如第 4 条),请使用:

PRAGMA tpch(4);
o_orderpriorityorder_count
1-URGENT10594
2-HIGH10476
3-MEDIUM10410
4-NOT SPECIFIED10556
5-LOW10487

列出查询

要列出全部 22 条查询,请执行:

FROM tpch_queries();

该函数返回包含 query_nrquery 列的表。

列出预期结果

要生成 scale factor 为 0.01、0.1、1 时所有查询的预期结果,请执行:

FROM tpch_answers();

该函数返回包含 query_nrscale_factoranswer 列的表。

仅生成 Schema

将 scale factor 设为 0,即可在不生成数据的情况下仅生成 TPC-H schema:

CALL dbgen(sf = 0);

数据生成器参数

数据生成函数 dbgen 支持以下参数:

名称类型说明
catalogVARCHAR目标 catalog
childrenUINTEGER分区数量
overwriteBOOLEAN(未使用)
sfDOUBLEScale factor
stepUINTEGER定义要生成的分区,范围从 0 到 children - 1。当定义了 children 参数时,必须定义该参数
suffixVARCHAR给表名追加 suffix

数据生成器资源占用

在较大 scale factor 下生成 TPC-H 数据集会耗费较长时间。 此外,若采用单步生成,会占用大量内存。 下表给出了在 128 线程下生成包含 TPC-H 数据集的 Goose 数据库文件所需资源的估算值。

Scale factorDatabase sizeGeneration timeSingle-step generation's memory usage
10026 GB17 minutes71 GB
30078 GB51 minutes211 GB
1,000265 GB2 h 53 minutes647 GB
3,000796 GB8 h 30 minutes1799 GB

以上数据来自单步执行 dbgen,例如:

CALL dbgen(sf = 300);

如果可用内存有限,可分步运行 dbgen。 例如,可将 SF300 分为 10 步生成:

CALL dbgen(sf = 300, children = 10, step = 0);
CALL dbgen(sf = 300, children = 10, step = 1);
...
CALL dbgen(sf = 300, children = 10, step = 9);

限制

tpch(⟨query_id⟩) 函数会执行固定的 TPC-H 查询,并使用预定义 bind 参数(即 substitution parameters)。无法通过 tpch 扩展修改这些参数。若要以 TPC-H benchmark 规定参数运行查询,请使用 TPC-H 框架实现。