TPC-H (1999)
Популярный бенчмарк, моделирующий внутреннее хранилище данных оптового поставщика. Данные хранятся в виде схемы в третьей нормальной форме, что требует большого количества соединений (JOIN) при выполнении запросов. Несмотря на возраст и нереалистичное предположение о равномерном и независимом распределении данных, 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 для таблицы 'lineitem' будет сгенерировано 600 миллионов строк.
Чтобы ускорить процесс, можно использовать "генерацию по фрагментам" (в нескольких процессах):
Подробные размеры таблиц при коэффициенте масштабирования 100:
| Table | size (in rows) | size (compressed in 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.000.000 | 26.69 GB |
(Сжатые размеры в ClickHouse получены из system.tables.total_bytes и соответствуют приведённым ниже определениям таблиц.)
Теперь создадим таблицы в ClickHouse. Определения таблиц доступны в init.sql в репозитории ClickHouse.
Данные можно импортировать следующим образом:
Вместо того чтобы использовать tpch-kit и генерировать таблицы самостоятельно, вы можете импортировать данные из публичного S3 бакета. Сначала обязательно
создайте пустые таблицы с помощью init.sql.
Запросы
22 запросов TPC-H можно найти здесь в репозитории ClickHouse.
Чтобы получить поведение, совместимое со стандартом SQL, и ожидаемые результаты, примените настройки из settings.json.
См. README для известных проблем и примечаний по отдельным запросам.
Корректность
Результаты запросов совпадают с официальными результатами, если не указано иное. Чтобы проверить корректность, сгенерируйте базу данных TPC-H с коэффициентом масштабирования = 1 (dbgen, см. выше) и сравните её с ожидаемыми результатами в tpch-kit.