1–33) に分類されています。同じファミリー内のクエリ (a、b、c、…) は同じ JOIN グラフを共有しますが、選択述語が異なります。
参考資料
- How Good Are Query Optimizers, Really? (Leis ほか、VLDB 2015)
- Join Order Benchmark リポジトリ
テーブルの作成
init_cloud.sql で確認できます。
各テーブルは、主キーのカラム id でソートされた MergeTree エンジンを使用しており、すべてのテーブルで id integer NOT NULL PRIMARY KEY を宣言している元の PostgreSQL スキーマを反映しています。NULL 許容の PostgreSQL カラムは、Nullable(...) 型に対応します。
テーブルを作成します:
データの読み込み
aka_name.csv、title.csv、…) として配布されています。
これらの CSV は、ESCAPE '\' を伴う PostgreSQL の COPY セマンティクスを使用しています。つまり、バックスラッシュは引用符で囲まれたフィールド内でのみ引用符文字をエスケープし、引用符の外では文字どおりの文字として扱われます。
ClickHouse は RFC 4180 準拠の CSV (二重引用符を使用し、バックスラッシュによるエスケープはなし) を想定しているため、まずファイルを再エンコードする必要があります。
convert_csv.py は、この再エンコードを行います。
これは元の CSV を stdin から読み込み、標準的な CSV を stdout に書き出します。その際、埋め込まれた引用符は二重化され、引用符で囲まれていない空フィールドはそのまま保持されます (ClickHouse では、これらは Nullable カラムでは NULL にマッピングされます) 。
元の CSV からテーブルを構築するには:
- テーブルを作成します (上記を参照) 。
- Join Order Benchmark リポジトリの手順に従って、IMDb データセットを
imdb.tgzファイルとしてダウンロードします。 - データを変換してインポートします:
clickhouse client --database job --query "SELECT * FROM title ORDER BY id FORMAT Parquet" > title.parquet.
各テーブルの詳細なサイズ:
(ClickHouse での圧縮サイズは
system.tables.total_bytes から取得したもので、上記のテーブル定義に基づいています。)
クエリ
settings.json にあります。
既知の問題や特定のクエリに関する注意事項については、README を参照してください。
これらのクエリはテーブル名を直接参照するため、job データベースに対して実行してください (たとえば、clickhouse client --database job を使用します) 。
クエリの例 (1a) :