由事务处理委员会提供的基准测试集。
简介
用来模拟决策支持类的应用。
下载代码
从 tpc.org 官网下载信息时,需要填写相关的用户信息,可随便填写,不会校验,但是需要通过邮箱接收下载链接,同时需要 Google reCAPTCHA 校验,不过国内可能无法访问导致下载失败,此时可以通过浏览器的 Header Editor
设置。
从浏览器的插件库中安装,打开配置页面,选择 EXPORT OR IMPORT
导入,其中 URL 填写 https://azurezeng.github.io/static/HE-GoogleRedirect.json
链接,也可以从 本地 下载。
生成数据
将 dbgen/makefile.suite
复制为 Makefile
然后修改如下内容。
CC = gcc
DATABASE= MYSQL
MACHINE = LINUX
WORKLOAD = TPCH
然后修改 tpcd.h
头文件,增加如下内容。
#ifdef MYSQL
#define GEN_QUERY_PLAN ""
#define START_TRAN "START TRANSACTION"
#define END_TRAN "COMMIT"
#define SET_OUTPUT ""
#define SET_ROWCOUNT "limit %d;\n"
#define SET_DBASE "use %s;\n"
#endif
然后通过 make
编译即可,然后就可以直接使用命令行生成数据了。
命令行参数
常用的命令行参数有:
-f
覆盖存在文件。-s <n>
数据规模,其中SF=1
对应1GB
是 Scale Factor 简写,可以是浮点数,例如0.01
生成10M
数据。-T <c>
只生成指定的数据集,可以通过-h
查看帮助文档。
其中 partsupp
、orders
、lineitem
的数据量比较大,可以分批并发生成,通过 -C
指定分多少批,以及 -S
指定是第几批。例如,可以通过如下脚本并发生成。
echo "Begin to generate data for table: lineitem"
for i in $(seq 1 "${PARALLEL}"); do
{
"${TPCH_DBGEN_DIR}/dbgen" -f -s "${SCALE_FACTOR}" -T L -C "${PARALLEL}" -S "${i}"
} &
done
生成的数据有两个绑定关系,分别是 Order+LineItem 以及 Part+Supplier 两个,会同时生成对应数据。
另外,通过 -U
可以生成更新,只对应了 orders
、lineitem
两个表,还有一个是 delete
暂不清楚作用,通过 -h
参数可以看到一个简单的生成示例。
数据导入
不同系统的建表语句或者导入方式略有区别,这里简单整理。
查询的 SQL 可以参考源码中的 dbgen/queries
目录,可以通过 qgen
命令生成,Query 是一个已经生成查询语句。
表结构
对应的 Schema 如下。
这是典型的雪花模型,总计 8 张表,其中 Nation 和 Region 数据量固定,其余的表数据量根比例因子相关。
Scale Factor, SF 比例因子,可以指定为 1、100、1000 等,基本对应了总的数据量,分别为 1GB、100GB、1TB 等,上述的表结构中同时包含表的实际行数根据 SF 的变化。
这 8 张表的说明如下:
part
零件信息lineitem
在售商品信息
整个库中保存了 [1992, 1998]
总计 7 年的数据,有些 SQL 会计算平均每年的信息,例如 Q17 中。
SQL
Q2 最小价格供货商
在指定的供货区 (Region) 内,对于满足指定条件 (某类、大小) 的货物,哪个供货商能以最低的价格供应。
特点:带有排序、聚集操作、子查询并存的多表查询操作,结果只返回前 100 行。
Q17 小订单收入查询
对于某个指定品牌和包装类型的零件,
对于某个指定品牌和包装类型的零件,会有多个供货商,甚至相同供货商不同时间的价格、供货量也有所区别,
获取比平均供货量的百分之二十还低的小批量订单。
对于m
源码解析
生成数据会以 NATION
作为边界,以下会同时乘以 Scale Factor
系数,以上则只包含对应记录数。这里的 nation 和 region 信息通过 dist.dss 文件读取,其 weight 就是对应的 key 了。
tdef
定义的了表生成信息,例如默认行数、打印函数、种子函数等。