Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

TPC-H (1999)

A popular benchmark which models the internal data warehouse of a wholesale supplier. The data is stored into a 3rd normal form representation, requiring lots of joins at query runtime. Despite its age and its unrealistic assumption that the data is uniformly and independently distributed, TPC-H remains the most popular OLAP benchmark to date.

References

Data Generation and Import

First, checkout the TPC-H repository and compile the data generator:

git clone https://github.com/gregrahn/tpch-kit.git
cd tpch-kit/dbgen
make

Then, generate the data. Parameter -s specifies the scale factor. For example, with -s 100, 600 million rows are generated for table ‘lineitem’.

./dbgen -s 100

To speed things up, you can use “chunked” generation (in multiple processes):

for i in $(seq 1 8); do
    ./dbgen -s 100 -C 8 -S $i &
done
wait

Detailed table sizes with scale factor 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

(Compressed sizes in ClickHouse are taken from system.tables.total_bytes and based on below table definitions.)

Now create tables in ClickHouse. The table definitions are available in init.sql in the ClickHouse repository.

The data can be imported as follows:

clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO nation FORMAT CSV" < nation.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO region FORMAT CSV" < region.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO part FORMAT CSV" < part.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO supplier FORMAT CSV" < supplier.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO partsupp FORMAT CSV" < partsupp.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO customer FORMAT CSV" < customer.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO orders FORMAT CSV" < orders.tbl
clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO lineitem FORMAT CSV" < lineitem.tbl

Queries

The 22 TPC-H queries can be found here in the ClickHouse repository.

To get SQL standard compatible behavior and expected results, apply the settings from settings.json. See the README for known issues and notes on specific queries.

Correctness

The result of the queries agrees with the official results unless mentioned otherwise. To verify, generate a TPC-H database with scale factor = 1 (dbgen, see above) and compare with the expected results in tpch-kit.

Performance benchmark

ClickHouse tracks TPC-H query performance across every released version. You can explore run times for all 22 TPC-H queries (scale factor 40) on the ClickHouse versions benchmark page to see how performance has evolved over time.

Navigation