1–33). Запросы внутри одного семейства (a, b, c, …) имеют один и тот же граф JOIN, но различаются предикатами отбора.
Ссылки
- Насколько хороши оптимизаторы запросов на самом деле? (Leis et al., VLDB 2015)
- Репозиторий Join Order Benchmark
Создание таблиц
init_cloud.sql в репозитории ClickHouse.
В каждой таблице используется движок MergeTree с сортировкой по столбцу первичного ключа id, что соответствует исходной схеме PostgreSQL, где в каждой таблице объявлен id integer NOT NULL PRIMARY KEY. Столбцы PostgreSQL, допускающие NULL, сопоставляются с типами Nullable(...).
Создайте таблицы:
Загрузка данных
aka_name.csv, title.csv, …).
В этих CSV используется семантика PostgreSQL COPY с ESCAPE '\': символ обратной косой черты экранирует кавычку только внутри поля в кавычках, а вне кавычек обратная косая черта считается обычным символом.
ClickHouse ожидает CSV в формате RFC 4180 (удвоенные кавычки, без экранирования обратной косой чертой), поэтому файлы сначала нужно перекодировать.
convert_csv.py выполняет это преобразование.
Он читает исходный CSV из stdin и записывает стандартный CSV в stdout, удваивая вложенные кавычки и сохраняя пустые поля без кавычек (которые ClickHouse сопоставляет с NULL для столбцов Nullable).
Чтобы создать таблицы из исходных CSV:
- Создайте таблицы (см. выше).
- Скачайте набор данных IMDb в виде файла
imdb.tgz, следуя инструкциям из репозитория Join Order Benchmark. - Преобразуйте и импортируйте данные:
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):