1–33). As consultas dentro de uma família (a, b, c, …) compartilham o mesmo grafo de JOIN, mas diferem nos predicados de seleção.
Referências
- How Good Are Query Optimizers, Really? (Leis et al., VLDB 2015)
- Repositório Join Order Benchmark
Criando as tabelas
init_cloud.sql no repositório do ClickHouse.
Cada tabela usa o motor MergeTree, ordenado pela coluna da chave primária id, seguindo o schema original do PostgreSQL, em que toda tabela declara id integer NOT NULL PRIMARY KEY. Colunas anuláveis do PostgreSQL são mapeadas para tipos Nullable(...).
Crie as tabelas:
Carregando os dados
aka_name.csv, title.csv, …).
Esses arquivos CSV usam a semântica de COPY do PostgreSQL com ESCAPE '\': uma barra invertida escapa o caractere de aspas apenas dentro de um campo entre aspas, enquanto, fora das aspas, a barra invertida é um caractere literal.
O ClickHouse espera CSV no formato RFC 4180 (aspas duplicadas, sem escape com barra invertida), portanto os arquivos precisam ser recodificados primeiro.
convert_csv.py faz essa recodificação.
Ele lê o CSV original em stdin e grava o CSV padrão em stdout, duplicando aspas internas e preservando campos vazios sem aspas (que o ClickHouse mapeia para NULL em colunas Nullable).
Para criar as tabelas a partir dos arquivos CSV originais:
- Crie as tabelas (veja acima).
- Baixe o conjunto de dados do IMDb como um arquivo
imdb.tgz, seguindo as instruções no repositório Join Order Benchmark. - Converta e importe os dados:
clickhouse client --database job --query "SELECT * FROM title ORDER BY id FORMAT Parquet" > title.parquet.
Tamanhos detalhados das tabelas:
(Os tamanhos comprimidos no ClickHouse são obtidos de
system.tables.total_bytes e se baseiam nas definições das tabelas acima.)
Consultas
settings.json.
Consulte o README para ver problemas conhecidos e observações sobre consultas específicas.
As consultas fazem referência às tabelas pelo nome, portanto execute-as no banco de dados job (por exemplo, com clickhouse client --database job).
Uma consulta de exemplo (1a):