⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
TPC-H 扩展

`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 order_count
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` 列的表。

生成 Schema

通过将比例因子设置为 0,可以生成不含任何数据的 TPC-H Schema。

CALL dbgen(sf = 0);

数据生成器参数

数据生成器函数 `dbgen` 具有以下参数:

名称 类型 描述
catalog VARCHAR 目标 catalog
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
1,000 265 GB 2 小时 53 分钟 647 GB
3,000 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 框架实现。