tpch
扩展实现了 TPC-H 基准测试 的数据生成器和查询。
安装和加载
默认情况下,tpch
扩展在某些 DuckDB 构建中已包含,否则在首次使用时将透明地 自动加载。
如果您想手动安装并加载它,请运行:
INSTALL tpch;
LOAD tpch;
用法
生成数据
要生成比例因子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_orderpriority | 订单数量 |
---|---|
1-紧急 | 10594 |
2-高 | 10476 |
3-中等 | 10410 |
4-未指定 | 10556 |
5-低 | 10487 |
列出查询
要列出所有22个查询,请运行:
FROM tpch_queries();
此函数返回一个包含列 query_nr
和 query
的表。
列出预期答案
为了在所有查询的比例因子0.01、0.1和1上产生预期的结果,请运行:
FROM tpch_answers();
此函数返回一个包含列 query_nr
、scale_factor
和 answer
的表。
生成模式
可以通过将比例因子设置为0来生成没有任何数据的TPC-H模式:
CALL dbgen(sf = 0);
数据生成器参数
数据生成函数 dbgen
具有以下参数:
Name | Type | Description |
---|---|---|
catalog |
VARCHAR |
目标目录 |
children |
UINTEGER |
分区数量 |
overwrite |
BOOLEAN |
(未使用) |
sf |
DOUBLE |
比例因子 |
step |
UINTEGER |
定义要生成的分区,索引从0到children - 1。当定义了children 参数时必须定义 |
suffix |
VARCHAR |
将suffix 附加到表名 |
预生成数据集
预生成的用于TPC-H的DuckDB数据库可供下载:
tpch-sf1.db
(250 MB)tpch-sf3.db
(754 MB)tpch-sf10.db
(2.5 GB)tpch-sf30.db
(7.6 GB)tpch-sf100.db
(26 GB)tpch-sf300.db
(78 GB)tpch-sf1000.db
(265 GB)tpch-sf3000.db
(796 GB)
数据生成器的资源使用情况
生成大规模因子的TPC-H数据集需要相当长的时间。 此外,当生成过程在单一步骤中完成时,它需要大量的内存。 下表给出了使用128个线程生成包含TPC-H数据集的DuckDB数据库文件所需的资源估计。
缩放因子 | 数据库大小 | 数据生成时间 | 生成器的内存使用情况 |
---|---|---|---|
100 | 26 GB | 17 分钟 | 71 GB |
300 | 78 GB | 51 分钟 | 211 GB |
1000 | 265 GB | 2小时53分钟 | 647 GB |
3000 | 796 GB | 8小时30分钟 | 1799 GB |
上面显示的数字是通过一步运行dbgen
函数实现的,例如:
CALL dbgen(sf = 300);
如果您可用的内存有限,可以分步骤运行dbgen
函数。
例如,您可以分10步生成SF300:
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 查询。无法使用 tpch
扩展更改查询参数。要使用 TPC-H 基准规定的参数运行查询,请使用 TPC-H 框架实现。