TPC-H (1999)
Популярный бенчмарк, который моделирует внутреннее хранилище данных оптового поставщика. Данные хранятся в представлении в 3-й нормальной форме, требующем множества соединений во время выполнения запросов. Несмотря на свой возраст и нереалистичное предположение о том, что данные равномерно и независимо распределены, TPC-H остается самым популярным OLAP бенчмарком на сегодняшний день.
Ссылки
- TPC-H
- New TPC Benchmarks for Decision Support and Web Commerce (Poess et. al., 2000)
- TPC-H Analyzed: Hidden Messages and Lessons Learned from an Influential Benchmark (Boncz et. al.), 2013
- Quantifying TPC-H Choke Points and Their Optimizations (Dresseler et. al.), 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
). Единственным эффектом этого является лучшая читаемость, 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