TPC-H (1999)
Популярный бенчмарк, который моделирует внутреннее хранилище данных оптового поставщика. Данные хранятся в представлении третьей нормальной формы, требующей множества соединений во время выполнения запросов. Несмотря на свой возраст и нереалистичное предположение о том, что данные равномерно и независимо распределены, TPC-H остается самым популярным бенчмарком OLAP по сей день.
Ссылки
- TPC-H
- Новые бенчмарки TPC для поддержки принятия решений и веб-коммерции (Poess и др., 2000)
- TPC-H проанализирован: скрытые сообщения и уроки, извлеченные из влиятельного бенчмарка (Boncz и др.), 2013
- К количественной оценке узких мест TPC-H и их оптимизациям (Dresseler и др.), 2020
Генерация и импорт данных
Сначала склонируйте репозиторий TPC-H и скомпилируйте генератор данных:
Затем сгенерируйте данные. Параметр -s
задает масштабный фактор. Например, с -s 100
генерируется 600 миллионов строк для таблицы 'lineitem'.
Подробные размеры таблиц с масштабным фактором 100:
Таблица | размер (в строках) | размер (сжатый в ClickHouse) |
---|---|---|
nation | 25 | 2 kB |
region | 5 | 1 kB |
part | 20.000.000 | 895 MB |
supplier | 1.000.000 | 75 MB |
partsupp | 80.000.000 | 4.37 GB |
customer | 15.000.000 | 1.19 GB |
orders | 150.000.000 | 6.15 GB |
lineitem | 600.00.00 | 26.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