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_orderpriority | order_count |
|---|---|
| 1-URGENT | 10594 |
| 2-HIGH | 10476 |
| 3-MEDIUM | 10410 |
| 4-NOT SPECIFIED | 10556 |
| 5-LOW | 10487 |
列出查询
要列出全部 22 条查询,请执行:
FROM tpch_queries();
该函数返回包含 query_nr 与 query 列的表。
列出预期结果
要生成 scale factor 为 0.01、0.1、1 时所有查询的预期结果,请执行:
FROM tpch_answers();
该函数返回包含 query_nr、scale_factor、answer 列的表。
仅生成 Schema
将 scale factor 设为 0,即可在不生成数据的情况下仅生成 TPC-H schema:
CALL dbgen(sf = 0);
数据生成器参数
数据生成函数 dbgen 支持以下参数:
| 名称 | 类型 | 说明 |
|---|---|---|
catalog | VARCHAR | 目标 catalog |
children | UINTEGER | 分区数量 |
overwrite | BOOLEAN | (未使用) |
sf | DOUBLE | Scale factor |
step | UINTEGER | 定义要生成的分区,范围从 0 到 children - 1。当定义了 children 参数时,必须定义该参数 |
suffix | VARCHAR | 给表名追加 suffix |
数据生成器资源占用
在较大 scale factor 下生成 TPC-H 数据集会耗费较长时间。 此外,若采用单步生成,会占用大量内存。 下表给出了在 128 线程下生成包含 TPC-H 数据集的 Goose 数据库文件所需资源的估算值。
| Scale factor | Database size | Generation time | Single-step generation's memory usage |
|---|---|---|---|
| 100 | 26 GB | 17 minutes | 71 GB |
| 300 | 78 GB | 51 minutes | 211 GB |
| 1,000 | 265 GB | 2 h 53 minutes | 647 GB |
| 3,000 | 796 GB | 8 h 30 minutes | 1799 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 框架实现。