Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

TPC-H (1999)

TPC-H 是一项广泛使用的基准测试,用于模拟批发供应商的内部数据仓库。数据采用第三范式存储,因此在查询时需要进行大量 JOIN。尽管它历史悠久,且假设数据均匀且相互独立分布并不现实,TPC-H 至今仍是最流行的 OLAP 基准测试。

参考资料

数据生成与导入

首先,检出 TPC-H 代码仓库并编译数据生成器:

git clone https://github.com/gregrahn/tpch-kit.git
cd tpch-kit/dbgen
make

然后,生成数据。参数 -s 用于指定缩放因子。例如,使用 -s 100 时,将为表 'lineitem' 生成 6 亿行。

./dbgen -s 100

为了加快速度,你可以使用"分块"生成 (通过多个进程) :

for i in $(seq 1 8); do
    ./dbgen -s 100 -C 8 -S $i &
done
wait

缩放因子为 100 时各表的详细大小:

Table size (in rows) size (compressed in ClickHouse)
nation 25 2 kB
region 5 1 kB
part 20.000.000 895 MB
supplier 1.000.000 75 MB
partsupp 80.000.000 4.37 GB
customer 15.000.000 1.19 GB
orders 150.000.000 6.15 GB
lineitem 600.000.000 26.69 GB

(ClickHouse 中的压缩大小取自 system.tables.total_bytes,并基于下方的表定义。)

现在在 ClickHouse 中创建这些表。表定义可在 ClickHouse 软件源中的 init.sql 中找到。

可以按如下方式导入数据:

clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO nation FORMAT CSV" < nation.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO region FORMAT CSV" < region.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO part FORMAT CSV" < part.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO supplier FORMAT CSV" < supplier.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO partsupp FORMAT CSV" < partsupp.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO customer FORMAT CSV" < customer.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO orders FORMAT CSV" < orders.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO lineitem FORMAT CSV" < lineitem.tbl

查询

这 22 个 TPC-H 查询可在 ClickHouse 软件源的此处找到。

要获得与 SQL 标准兼容的行为和预期结果,请应用 settings.json 中的设置。有关已知问题以及特定查询的说明,请参阅 README

正确性

除非另有说明,这些查询的结果与官方结果一致。要进行验证,请生成一个缩放因子 = 1 的 TPC-H 数据库 (dbgen,见上文) ,并与 tpch-kit 中的预期结果进行比较。

性能基准测试

ClickHouse 会跟踪每个已发布版本的 TPC-H 查询性能。您可以在 ClickHouse 版本基准测试 页面查看全部 22 个 TPC-H 查询 (缩放因子为 40) 的运行时间,了解性能随时间的演进。

Navigation