TPC-H 是一个决策支持基准测试。 它由一套面向业务的即席查询与并发数据修改组成。 其数据集与查询具有广泛的行业相关性。 这个基准测试模拟了一个决策支持系统,该系统会对大规模的数据执行高复杂度的查询以回答关键商务问题。

本文会记录将 TPC-H 数据集导入 openGauss 的过程。

构建 TPC-H 数据生成工具

官网链接为 https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp。 在其中点击形如 Download TPC-H_Tools_v3.0.1.zip 的超链接,然后填写邮箱等信息,就可以收到包含下载地址的邮件。

下载好之后解压:

unzip D12D3B85-DBE4-45B4-96D2-7DAAF4292C10-TPC-H-Tool.zip

会解压出一个 TPC-H V3.0.1 目录,把目录内的 dbgen/makefile.suite 文件拷贝为 Makefile

cd 'TPC-H V3.0.1/dbgen'
cp makefile.suite Makefile

于是修改这个 Makefile,对一些变量进行赋值:

CC      = gcc
DATABASE= ORACLE
MACHINE = LINUX
WORKLOAD = TPCH

直接构建:

make

构建完成后会得到 dbgenqgen,分别用于生成数据集与查询语句。

生成数据集

使用 dbgen 生成数据:

./dbgen -s 1

其中 -s 参数用于指定缩放系数,会影响生成数据的规模。 这个缩放系数与生成出数据的 GB 数大致相等,比如 -s 10 大约会生成 10GB 的数据。 生成完成后,我们会得到八个 .tbl 文件:

$ ls *.tbl
customer.tbl  lineitem.tbl  nation.tbl  orders.tbl  partsupp.tbl  part.tbl  region.tbl  supplier.tbl

创建表

先建一个库:

CREATE DATABASE tpch;

然后在 dbgen 目录里面有一个 dss.dll 文件,里面是创建表的语句,可以直接丢给 openGauss 执行:

gsql -d tpch -f dss.dll

于是就可以在 tpch 这个库里面创建出八张表。

导入数据

这些 .tbl 文件中,每行数据都会以 | 结尾,无法被 openGauss 导入。 因此需要把行末的 | 去掉,顺带把后缀名改为 .csv

for file in *.tbl; do
  sed 's/|$//' $file > ${file/tbl/csv}
done

于是用 \copy 元命令导入就可以了:

\copy customer FROM 'customer.csv' WITH csv DELIMITER '|'
\copy lineitem FROM 'lineitem.csv' WITH csv DELIMITER '|'
\copy nation FROM 'nation.csv' WITH csv DELIMITER '|'
\copy orders FROM 'orders.csv' WITH csv DELIMITER '|'
\copy partsupp FROM 'partsupp.csv' WITH csv DELIMITER '|'
\copy part FROM 'part.csv' WITH csv DELIMITER '|'
\copy region FROM 'region.csv' WITH csv DELIMITER '|'
\copy supplier FROM 'supplier.csv' WITH csv DELIMITER '|'