1–33) 。同一家族中的查询 (a、b、c、…) 具有相同的 JOIN 图,但选择谓词不同。
参考资料
- How Good Are Query Optimizers, Really? (Leis 等,VLDB 2015)
- Join Order Benchmark 代码仓库
创建表
init_cloud.sql 中查看。
每张表都使用 MergeTree 引擎,并按主键列 id 排序,这与原始 PostgreSQL schema 保持一致,即每张表都声明了 id integer NOT NULL PRIMARY KEY。PostgreSQL 中可为空的列会映射为 Nullable(...) 类型。
创建这些表:
加载数据
aka_name.csv、title.csv 等) 的形式分发。
这些 CSV 使用带有 ESCAPE '\' 的 PostgreSQL COPY 语义:反斜杠仅在带引号的字段内用于转义引号字符;在引号外,反斜杠则是字面字符。
ClickHouse 需要 RFC 4180 格式的 CSV (引号成对重复,不使用反斜杠转义) ,因此必须先对这些文件重新编码。
convert_csv.py 用于执行该重新编码。
它从 stdin 读取原始 CSV,并将标准 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 database 运行它们 (例如,使用 clickhouse client --database job) 。
示例查询 (1a) :