8个关系表:customer.tbl、lineitem.tbl、nation.tbl、orders.tbl、partsupp.tbl、part.tbl、region.tbl、supplier.tbl,其中,nation.tbl和region.tbl表数据量不变,其它表数据量与比例因子(SF)有关。
数据库关系图:
[yz@MiWiFi-R4A-srv ~]$ cd 2.18.0_rc2/ [yz@MiWiFi-R4A-srv 2.18.0_rc2]$ cd dbgen/
[yz@MiWiFi-R4A-srv dbgen]$ cp makefile.suite Makefile [yz@MiWiFi-R4A-srv dbgen]$ vim Makefile CC=gcc DATABASE=MYSQL MACHINE =LINUX WORKLOAD =TPCH
定义MySQL方言:
[yz@MiWiFi-R4A-srv dbgen]$ vim tpcd.h # 添加以下定义: #ifdef MYSQL #define GEN_QUERY_PLAN "" #define START_TRAN "" #define END_TRAN "" #define SET_OUTPUT "" #define SET_ROWCOUNT "limit %d;\n" #define SET_DBASE "" #endif
编译:
[yz@MiWiFi-R4A-srv dbgen]$ make
dbgen -h命令可查看命令帮助。
-s 10表示产生10个Scale Factor数据,1SF=1GB数据。以生成1s数据为例:
[yz@MiWiFi-R4A-srv dbgen]$ ./dbgen -s 1 -f TPC-H Population Generator (Version 2.18.0) Copyright Transaction Processing Performance Council 1994 - 2010
生成数据如下:
[yz@MiWiFi-R4A-srv dbgen]$ ll *.tbl -rw-rw-r--. 1 yz yz 24346144 5月 19 20:56 customer.tbl -rw-rw-r--. 1 yz yz 759863287 5月 19 20:56 lineitem.tbl -rw-rw-r--. 1 yz yz 2224 5月 19 20:56 nation.tbl -rw-rw-r--. 1 yz yz 171952161 5月 19 20:56 orders.tbl -rw-rw-r--. 1 yz yz 118984616 5月 19 20:56 partsupp.tbl -rw-rw-r--. 1 yz yz 24135125 5月 19 20:56 part.tbl -rw-rw-r--. 1 yz yz 389 5月 19 20:56 region.tbl -rw-rw-r--. 1 yz yz 1409184 5月 19 20:56 supplier.tbl
默认情况下,dbgen生成的数据表以“|”分割列,行尾也有“|”分隔符,但是有些数据库的加载程序不支持以分隔符结尾,所以需要在生成数据后去除行尾的分隔符。
如果希望生成的数据行尾不带分隔符,需要对TPC-H tool代码做个小修订,编辑dbgen/config.h配置文件:
#define EOL_HANDLING
重新编译。
[yz@MiWiFi-R4A-srv dbgen]$ DSS_QUERY=queries ./qgen -s 1 | sed -e 's/\r//' > tpch_query.sql
修改查询错误:
(1) "day (3)" => "day" (2) "limit -1" => "limit 1" (3) 去除"limit"前一行多余的分号(vim:%s/;\nlimit/^Mlimit) vim输入^M: Ctrl-v, Ctrl-m (4) query 13: "count(o_orderkey)" => "count(o_orderkey) as c_count" ") as c_orders (c_custkey, c_count)" => ") as c_orders" (5) query 15: s_suppkey; DROP VIEW revenue0 LIMIT 1; => s_suppkey LIMIT 1; DROP VIEW revenue0; (6) INTERVAL: INTERVAL 'i' DAY => INTERVAL i DAY INTERVAL 'j' MONTH => INTERVAL j MONTH INTERVAL 'k' YEAR => INTERVAL k YEAR (7) 删除头部注释行,用例内部不留空行,用例之间以2空行分隔
create view revenue0查询与其后面的select作为一个用例,且中间不留空行。
将tpch_querys.sql拆分为22个文件:q1.sql, q2.sql, …, q22.sql
[yz@MiWiFi-R4A-srv dbgen]$ awk -v RS="\n\n" 'BEGIN {n=1}{print $0 > "q"n++".sql"}' tpch_query.sql [yz@MiWiFi-R4A-srv dbgen]$ ls *.sql q10.sql q13.sql q16.sql q19.sql q21.sql q24.sql q3.sql q6.sql q9.sql q11.sql q14.sql q17.sql q1.sql q22.sql q25.sql q4.sql q7.sql q12.sql q15.sql q18.sql q20.sql q23.sql q2.sql q5.sql q8.sql