1–33). Las consultas dentro de una misma familia (a, b, c, …) comparten el mismo grafo de joins, pero difieren en sus predicados de selección.
Referencias
- How Good Are Query Optimizers, Really? (Leis et al., VLDB 2015)
- Repositorio Join Order Benchmark
Creación de las tablas
init_cloud.sql en el repositorio de ClickHouse.
Cada tabla usa el motor MergeTree, ordenado por su columna de clave primaria id, reflejando el esquema original de PostgreSQL, donde cada tabla declara id integer NOT NULL PRIMARY KEY. Las columnas anulables de PostgreSQL se asignan a tipos Nullable(...).
Cree las tablas:
Carga de los datos
aka_name.csv, title.csv, …).
Estos CSV usan la semántica de COPY de PostgreSQL con ESCAPE '\': una barra invertida solo escapa el carácter de comillas dentro de un campo entrecomillado, mientras que fuera de las comillas la barra invertida es un carácter literal.
ClickHouse espera archivos CSV conformes con RFC 4180 (comillas duplicadas, sin escapes con barra invertida), por lo que primero hay que volver a codificar los archivos.
convert_csv.py realiza esa recodificación.
Lee el CSV original desde stdin y escribe un CSV estándar en stdout, duplicando las comillas incrustadas y conservando los campos vacíos sin comillas (que ClickHouse asigna a NULL en las columnas Nullable).
Para crear las tablas a partir de los CSV originales:
- Cree las tablas (consulte más arriba).
- Descargue el data set de IMDb como un archivo
imdb.tgz, siguiendo las instrucciones del repositorio Join Order Benchmark. - Convierta e importe los datos:
clickhouse client --database job --query "SELECT * FROM title ORDER BY id FORMAT Parquet" > title.parquet.
Tamaños detallados de las tablas:
| Tabla | tamaño (en filas) | tamaño (comprimido en ClickHouse) |
|---|---|---|
| aka_name | 901,343 | 31.86 MiB |
| aka_title | 361,472 | 14.32 MiB |
| cast_info | 36,244,344 | 296.25 MiB |
| char_name | 3,140,339 | 107.95 MiB |
| comp_cast_type | 4 | 132.00 B |
| company_name | 234,997 | 8.38 MiB |
| company_type | 4 | 162.00 B |
| complete_cast | 135,086 | 748.80 KiB |
| info_type | 113 | 1.25 KiB |
| keyword | 134,170 | 1.88 MiB |
| kind_type | 7 | 177.00 B |
| link_type | 18 | 284.00 B |
| movie_companies | 2,609,129 | 21.20 MiB |
| movie_info | 14,835,720 | 300.46 MiB |
| movie_info_idx | 1,380,035 | 8.01 MiB |
| movie_keyword | 4,523,930 | 21.06 MiB |
| movie_link | 29,997 | 178.21 KiB |
| name | 4,167,491 | 131.16 MiB |
| person_info | 2,963,664 | 154.12 MiB |
| role_type | 12 | 246.00 B |
| title | 2,528,312 | 78.04 MiB |
| Total | 74,190,187 | 1.15 GiB |
system.tables.total_bytes y se basan en las definiciones de tabla anteriores.)
Consultas
settings.json.
Consulta el README para ver los problemas conocidos y las notas sobre consultas concretas.
Las consultas hacen referencia a las tablas por su nombre, así que ejecútalas en la base de datos job (por ejemplo, con clickhouse client --database job).
Una consulta de ejemplo (1a):