⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
TPC-H Extension

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_nrquery 的表。

列出预期答案

为了在所有查询的比例因子0.01、0.1和1上产生预期的结果,请运行:

FROM tpch_answers();

此函数返回一个包含列 query_nrscale_factoranswer 的表。

生成模式

可以通过将比例因子设置为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数据库可供下载:

数据生成器的资源使用情况

生成大规模因子的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 框架实现。