跳到主要内容
跳到主要内容

TPC-H (1999)

一个流行的基准测试,它模拟了批发供应商的内部数据仓库。数据以第三范式表示,查询运行时需要大量连接。尽管它已经存在很久,并且假设数据是均匀和独立分布的,这种假设并不现实,但到目前为止,TPC-H 仍然是最流行的 OLAP 基准测试。

参考文献

数据生成与导入

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

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

规模因子为 100 时,详细的表大小:

表名行数在 ClickHouse 中的压缩大小
nation252 kB
region51 kB
part20.000.000895 MB
supplier1.000.00075 MB
partsupp80.000.0004.37 GB
customer15.000.0001.19 GB
orders150.000.0006.15 GB
lineitem600.00.0026.69 GB

(ClickHouse 中的压缩大小是从 system.tables.total_bytes 获取的,基于以下表定义。)

现在在 ClickHouse 中创建表。

我们尽可能遵循 TPC-H 规范的规则:

  • 主键仅为规范第 1.4.2.2 部分中提到的列创建。
  • 替换参数已在规范第 2.1.x.4 部分中用查询验证的值替换。
  • 根据第 1.4.2.1 部分,表定义不使用可选的 NOT NULL 约束,即使 dbgen 默认生成它们。 ClickHouse 中 SELECT 查询的性能不受 NOT NULL 约束的存在或缺失的影响。
  • 根据第 1.3.1 部分,我们使用 ClickHouse 的原生数据类型(例如 Int32String)来实现规范中提到的抽象数据类型(例如 IdentifierVariable text, size N)。这唯一的效果是可读性更好,由 dbgen 生成的 SQL-92 数据类型(例如 INTEGERVARCHAR(40))在 ClickHouse 中也能工作。

数据可以如下导入:

备注

您可以选择从公共 S3 存储桶中导入数据,而不是使用 tpch-kit 并自己生成表。确保首先使用上述 CREATE 语句创建空表。

Queries

备注

Setting join_use_nulls should be enabled to produce correct results according to SQL standard.

The queries are generated by ./qgen -s <scaling_factor>. Example queries for s = 100:

Correctness

The result of the queries agrees with the official results unless mentioned otherwise. To verify, generate a TPC-H database with scale factor = 1 (dbgen, see above) and compare with the expected results in tpch-kit.

Q1

Q2

备注

在 v25.5 之前,由于相关子查询,该查询无法开箱即用。相关问题: https://github.com/ClickHouse/ClickHouse/issues/6697

这个替代公式有效,并已验证返回参考结果。

Q3

Q4

备注

在 v25.5 之前,由于相关子查询,该查询无法开箱即用。相关问题: https://github.com/ClickHouse/ClickHouse/issues/6697

这个替代公式有效,并已验证返回参考结果。

Q5

Q6

备注

截至 2025 年 2 月,该查询由于小数加法的错误而无法开箱即用。相关问题: https://github.com/ClickHouse/ClickHouse/issues/70136

这个替代公式有效,并已验证返回参考结果。

Q7

Q8

Q9

Q10

Q11

Q12

Q13

Q14

Q15

Q16

Q17

备注

在 v25.5 之前,由于相关子查询,该查询无法开箱即用。相关问题: https://github.com/ClickHouse/ClickHouse/issues/6697

这个替代公式有效,并已验证返回参考结果。

Q18

Q19

Q20

备注

在 v25.5 之前,由于相关子查询,该查询无法开箱即用。相关问题: https://github.com/ClickHouse/ClickHouse/issues/6697

Q21

备注

在 v25.5 之前,由于相关子查询,该查询无法开箱即用。相关问题: https://github.com/ClickHouse/ClickHouse/issues/6697

Q22

备注

在 v25.5 之前,由于相关子查询,该查询无法开箱即用。相关问题: https://github.com/ClickHouse/ClickHouse/issues/6697