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