TPC-H (1999)
Популярный бенчмарк, который моделирует внутреннее хранилище данных оптового поставщика. Данные хранятся в представлении третьей нормальной формы, что требует множества соединений во время выполнения запросов. Несмотря на свой возраст и нереалистичное предположение о равномерном и независимом распределении данных, 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.000.000 | 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
.
Queries
Setting join_use_nulls
should be enabled to produce correct results according to SQL standard.
Some TPC-H queries query use correlated subqueries which are available since v25.8. Please use at least this ClickHouse version to run the queries.
In ClickHouse versions 25.5, 25.6, 25.7, it is necessary to set additionally:
Запросы генерируются с помощью ./qgen -s <scaling_factor>
. Примеры запросов для s = 100
приведены ниже:
Корректность
Результаты запросов согласуются с официальными результатами, если не указано иное. Для проверки создайте базу данных TPC-H с фактором масштабирования = 1 (dbgen
, см. выше) и сравните с ожидаемыми результатами в tpch-kit.
Q1
Q2
Q3
Q4
Q5
Q6
С февраля 2025 года запрос не работает из коробки из-за бага с добавлением Decimal. Соответствующая проблема: https://github.com/ClickHouse/ClickHouse/issues/70136
Эта альтернативная формулировка работает и была проверена на соответствие эталонным результатам.
Q7
Q8
Q9
Q10
Q11
Q12
Q13
Q14
Q15
Q16
Q17
Q18
Q19
Q20
Q21
Q22