メインコンテンツまでスキップ
メインコンテンツまでスキップ

TPC-H (1999)

A popular benchmark which models the internal data warehouse of a wholesale supplier.
データは3rd正規形の表現で保存され、多くのジョインがクエリ実行時に必要です。
その古さとデータが均一かつ独立して分布しているという非現実的な前提にもかかわらず、TPC-Hは現在まで最も人気のあるOLAPベンチマークです。

References

Data Generation and Import

まず、TPC-Hリポジトリをチェックアウトし、データジェネレーターをコンパイルします。

次に、データを生成します。パラメータ -s はスケールファクターを指定します。例えば、-s 100 を指定すると、'lineitem' テーブルに対して6億行が生成されます。

スケールファクター100の詳細なテーブルサイズ:

Tablesize (in rows)size (compressed in 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に従い、クリックハウスのネイティブデータ型(例: 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