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 кБ |
region | 5 | 1 кБ |
part | 20.000.000 | 895 МБ |
supplier | 1.000.000 | 75 МБ |
partsupp | 80.000.000 | 4.37 ГБ |
customer | 15.000.000 | 1.19 ГБ |
orders | 150.000.000 | 6.15 ГБ |
lineitem | 600.00.00 | 26.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