TPC-H (1999)
A popular benchmark which models the internal data warehouse of a wholesale supplier.
データは3rd正規形の表現で保存され、多くのジョインがクエリ実行時に必要です。
その古さとデータが均一かつ独立して分布しているという非現実的な前提にもかかわらず、TPC-Hは現在まで最も人気のあるOLAPベンチマークです。
References
- TPC-H
- New TPC Benchmarks for Decision Support and Web Commerce (Poess et. al., 2000)
- TPC-H Analyzed: Hidden Messages and Lessons Learned from an Influential Benchmark (Boncz et. al.), 2013
- Quantifying TPC-H Choke Points and Their Optimizations (Dresseler et. al.), 2020
Data Generation and Import
まず、TPC-Hリポジトリをチェックアウトし、データジェネレーターをコンパイルします。
次に、データを生成します。パラメータ -s
はスケールファクターを指定します。例えば、-s 100
を指定すると、'lineitem' テーブルに対して6億行が生成されます。
スケールファクター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.00.00 | 26.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に従い、クリックハウスのネイティブデータ型(例:
Int32
,String
)を使用して、仕様に記載されている抽象データ型(例:Identifier
,Variable text, size N
)を実装しています。これにより可読性が向上します。dbgen
によって生成されるSQL-92データ型(例:INTEGER
,VARCHAR(40)
)もClickHouseで使用することができます。
データは以下のようにインポートできます:
tpch-kitを使用してテーブルを自分で生成する代わりに、公開されたS3バケットからデータをインポートすることもできます。
最初に上記の CREATE
ステートメントを使用して空のテーブルを作成することを確認してください。
Queries
正しい結果を生成するために join_use_nulls
を有効にする必要があります。
クエリは ./qgen -s <scaling_factor>
によって生成されます。スケールファクター s = 100
の例のクエリ:
Correctness
クエリの結果は、特に記載がない限り、公式の結果と一致します。確認するためには、スケールファクター = 1 (dbgen
、上記参照) でTPC-Hデータベースを生成し、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月現在、このクエリはDecimalの加算のバグのため、すぐに動作しません。対応する問題: 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