Перейти к основному содержимому
Перейти к основному содержимому

TPC-H (1999)

Популярный бенчмарк, который моделирует внутренний хранилище данных оптового поставщика. Данные хранятся в представлении третьей нормальной формы, что требует выполнения большого количества соединений во время выполнения запросов. Несмотря на свой возраст и нереалистичное предположение о том, что данные равномерно и независимо распределены, TPC-H остается самым популярным OLAP бенчмарком на сегодняшний день.

Ссылки

Генерация и импорт данных

Сначала клонируйте репозиторий TPC-H и скомпилируйте генератор данных:

Затем создайте данные. Параметр -s задает коэффициент масштаба. Например, с -s 100 создаются 600 миллионов строк для таблицы 'lineitem'.

Подробные размеры таблиц с коэффициентом масштаба 100:

Таблицаразмер (в строках)размер (сжатый в ClickHouse)
nation252 кБ
region51 кБ
part20.000.000895 МБ
supplier1.000.00075 МБ
partsupp80.000.0004.37 ГБ
customer15.000.0001.19 ГБ
orders150.000.0006.15 ГБ
lineitem600.00.0026.69 ГБ

(Сжатые размеры в ClickHouse взяты из system.tables.total_bytes и основаны на определениях ниже.)

Теперь создайте таблицы в ClickHouse.

Мы придерживаемся правил спецификации TPC-H:

  • Первичные ключи создаются только для колонок, упомянутых в разделе 1.4.2.2 спецификации.
  • Параметры замены были заменены значениями для проверки запросов в разделах 2.1.x.4 спецификации.
  • В соответствии с разделом 1.4.2.1, определения таблиц не используют необязательные ограничения NOT NULL, даже если dbgen генерирует их по умолчанию. Производительность запросов SELECT в ClickHouse не зависит от наличия или отсутствия ограничений NOT NULL.
  • В соответствии с разделом 1.3.1, мы используем нативные типы данных ClickHouse (например, Int32, String) для реализации абстрактных типов данных, упомянутых в спецификации (например, Identifier, Variable text, size N). Единственным следствием этого является лучшая читаемость; сгенерированные dbgen типы данных SQL-92 (например, INTEGER, VARCHAR(40)) также будут работать в ClickHouse.

Данные можно импортировать следующим образом:

примечание

Вместо использования tpch-kit и генерации таблиц самостоятельно, вы также можете импортировать данные из публичного S3-аксесcа. Убедитесь, что вы сначала создали пустые таблицы, используя вышеуказанные операторы CREATE.

Запросы

примечание

Установка join_use_nulls должна быть включена, чтобы обеспечить правильные результаты в соответствии со стандартом SQL.

Запросы генерируются с помощью ./qgen -s <scaling_factor>. Примеры запросов для s = 100:

Корректность

Результаты запросов совпадают с официальными результатами, если не указано иное. Для проверки создайте базу данных TPC-H с коэффициентом масштаба = 1 (dbgen, см. выше) и сравните с ожидаемыми результатами в tpch-kit.

Q1

Q2

примечание

На февраль 2025 года, запрос не работает из коробки из-за коррелированных подзапросов. Соответствующая проблема: https://github.com/ClickHouse/ClickHouse/issues/6697

Эта альтернативная формулировка работает и была проверена на соответствие результирующим данным.

Q3

Q4

примечание

На февраль 2025 года, запрос не работает из коробки из-за коррелированных подзапросов. Соответствующая проблема: https://github.com/ClickHouse/ClickHouse/issues/6697

Эта альтернативная формулировка работает и была проверена на соответствие результирующим данным.

Q5

Q6

примечание

На февраль 2025 года, запрос не работает из коробки из-за ошибки с добавлением Decimal. Соответствующая проблема: https://github.com/ClickHouse/ClickHouse/issues/70136

Эта альтернативная формулировка работает и была проверена на соответствие результирующим данным.

Q7

Q8

Q9

Q10

Q11

Q12

Q13

Q14

Q15

Q16

Q17

примечание

На февраль 2025 года, запрос не работает из коробки из-за коррелированных подзапросов. Соответствующая проблема: https://github.com/ClickHouse/ClickHouse/issues/6697

Эта альтернативная формулировка работает и была проверена на соответствие результирующим данным.

Q18

Q19

Q20

примечание

На февраль 2025 года, запрос не работает из коробки из-за коррелированных подзапросов. Соответствующая проблема: https://github.com/ClickHouse/ClickHouse/issues/6697

Q21

примечание

На февраль 2025 года, запрос не работает из коробки из-за коррелированных подзапросов. Соответствующая проблема: https://github.com/ClickHouse/ClickHouse/issues/6697

Q22

примечание

На февраль 2025 года, запрос не работает из коробки из-за коррелированных подзапросов. Соответствующая проблема: https://github.com/ClickHouse/ClickHouse/issues/6697