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

TPC-H (1999)

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

Ссылки

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

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

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

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

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

(Сжатые размеры в 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). Единственным эффектом этого является лучшая читабельность; типы данных SQL-92, сгенерированные dbgen (например, INTEGER, VARCHAR(40)), также будут работать в ClickHouse.

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

примечание

Вместо использования tpch-kit и самостоятельной генерации таблиц вы также можете импортировать данные из публичного S3-бакета. Убедитесь, что сначала создали пустые таблицы, используя вышеуказанные 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