TPC-H (1999)
流通業者の内部データウェアハウスをモデル化した人気のあるベンチマークです。 データは3rd正規形の表現で保存されており、クエリ実行時に多くの結合を必要とします。 その古さと、データが均一かつ独立して分布しているという現実的ではない仮定にも関わらず、TPC-Hは今日まで最も人気のあるOLAPベンチマークです。
参考文献
- TPC-H
- 意思決定支援とWeb商取引のための新しいTPCベンチマーク (Poess et. al., 2000)
- TPC-H 調査: 影響力のあるベンチマークからの隠れたメッセージと教訓 (Boncz et. al.), 2013
- TPC-Hのボトルネックとその最適化の定量化 (Dresseler et. al.), 2020
データ生成とインポート
まず、TPC-Hリポジトリをチェックアウトして、データジェネレーターをコンパイルします:
次に、データを生成します。パラメータ-s
はスケールファクターを指定します。例えば、-s 100
では、600百万行が'table' 'lineitem'のために生成されます。
スケールファクター100の詳細なテーブルサイズ:
テーブル | 行数 | 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に従い、ClickHouseのネイティブデータ型(例:
Int32
,String
)を使用して、仕様で言及された抽象データ型(例:Identifier
,Variable text, size N
)を実装します。この結果は主に読みやすさの向上のみであり、dbgen
によって生成されるSQL-92データ型(例:INTEGER
,VARCHAR(40)
)もClickHouseで機能します。
データは次のようにインポートできます:
tpch-kitを使用して自分でテーブルを生成する代わりに、公開されたS3バケットからデータをインポートすることもできます。
最初に上記のCREATE
文を使用して空のテーブルを作成してください。
クエリ
join_use_nulls
を設定を有効にして、SQL標準に従った正しい結果を生成する必要があります。
クエリは./qgen -s <スケーリングファクター>
によって生成されます。スケール = 100
のクエリの例:
正確性
クエリの結果は、特に別途言及されていない限り、公式の結果と一致します。確認するには、スケールファクター=1 (dbgen
、上記参照)でTPC-Hデータベースを生成し、tpch-kitの期待される結果と比較してください。
Q1
Q2
2025年2月現在、相関サブクエリのため、クエリはそのままでは動作しません。対応する問題: https://github.com/ClickHouse/ClickHouse/issues/6697
この代替の定式化は機能し、参照結果を返すことが確認されています。
Q3
Q4
2025年2月現在、相関サブクエリのため、クエリはそのままでは動作しません。対応する問題: 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
2025年2月現在、相関サブクエリのため、クエリはそのままでは動作しません。対応する問題: https://github.com/ClickHouse/ClickHouse/issues/6697
この代替の定式化は機能し、参照結果を返すことが確認されています。
Q18
Q19
Q20
2025年2月現在、相関サブクエリのため、クエリはそのままでは動作しません。対応する問題: https://github.com/ClickHouse/ClickHouse/issues/6697
Q21
2025年2月現在、相関サブクエリのため、クエリはそのままでは動作しません。対応する問題: https://github.com/ClickHouse/ClickHouse/issues/6697
Q22
2025年2月現在、相関サブクエリのため、クエリはそのままでは動作しません。対応する問題: https://github.com/ClickHouse/ClickHouse/issues/6697