【大数据之数据仓库】TPCH工具使用指南

1.下载:


2.编译:
上传服务器(linux)
hzhelifu@hadoop360:~$ unzip 5cfb201d-bb4a-4805-87d7-a1f337e937c4-tpc-h-tool.zip           解压
hzhelifu@hadoop360:~$ cd tpch_2_17_0/dbgen/                                               进入dbgen
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ cp makefile.suite Makefile                        复制Makefile
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ vi Makefile                                       编辑Makefile
修改103至111行之间的内容如下:
103 CC      = gcc
104 # Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
105 #                                  SQLSERVER, SYBASE, ORACLE, VECTORWISE
106 # Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS, 
107 #                                  SGI, SUN, U2200, VMS, LINUX, WIN32 
108 # Current values for WORKLOAD are:  TPCH
109 DATABASE= ORACLE
110 MACHINE = LINUX
111 WORKLOAD = TPCH
执行make
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ make
... ...
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ls -lrt
-rwxr-xr-x 1 hzhelifu neteaseusers 106747 Feb 17 15:25 dbgen
-rwxr-xr-x 1 hzhelifu neteaseusers  98833 Feb 17 15:25 qgen
... ...
得到:dbgen和qgen
3.生成数据:
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ./dbgen -vf -s 1 -b dists.dss
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ls -lrt *.tbl
-rw-r--r-- 1 hzhelifu neteaseusers   1409184 Feb 17 15:32 supplier.tbl
-rw-r--r-- 1 hzhelifu neteaseusers       389 Feb 17 15:32 region.tbl
-rw-r--r-- 1 hzhelifu neteaseusers  24135125 Feb 17 15:32 part.tbl
-rw-r--r-- 1 hzhelifu neteaseusers 118984616 Feb 17 15:32 partsupp.tbl
-rw-r--r-- 1 hzhelifu neteaseusers 171952161 Feb 17 15:32 orders.tbl
-rw-r--r-- 1 hzhelifu neteaseusers      2224 Feb 17 15:32 nation.tbl
-rw-r--r-- 1 hzhelifu neteaseusers 759863287 Feb 17 15:32 lineitem.tbl       数据量大,称之为大表
-rw-r--r-- 1 hzhelifu neteaseusers  24346144 Feb 17 15:32 customer.tbl
总共会生成8张表的数据,

表名称

说明

PART

表示零件的信息

SUPPLIER

表示供货商的信息

PARTSUPP

表示供货商的零件信息

CUSTOMER

表示消费者的信息

ORDERS

表示订单的信息

LINEITEM

表示在线商品的信息

NATION

表示国家的信息

REGION

表示地区信息

命令中:
  • “-vf”参数用于控制提示信息和强制覆盖已有数据;
  • “-s”参数用于控制数据集规模;
  • “-b”参数用于指定生成的数据集的元数据信息;
如果要生成的数据集非常大,比如1T,那么就需要考虑使用“-C”和“-S”参数,把大表(比如lineitem/orders/partsupp)拆分成很多数据块(chunk):
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ./dbgen -vf -s 1 -b dists.dss -T L -C 5 -S 1&
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ./dbgen -vf -s 1 -b dists.dss -T L -C 5 -S 2&
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ./dbgen -vf -s 1 -b dists.dss -T L -C 5 -S 3&
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ./dbgen -vf -s 1 -b dists.dss -T L -C 5 -S 4&
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ./dbgen -vf -s 1 -b dists.dss -T L -C 5 -S 5&
因为dbgen是个单线程程序,1次只能跑满1个核,所以 通过并发的方式可以提高数据生成的效率,注意上面命令最后的“&”符号(丢后台执行);另外,命令中“-C”表示分成几份,“-S”表示第几份;(这里注意一个事项:打开 任意 一个刚生成的tbl文件,你会发现每行记录的末尾都有分隔符,有些地方可能不需要这个分隔符哦)
4.生成sql:
上面数据生成好以后,需要生成对应的sql语句:
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ mkdir q
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ for id in `seq 1 22`; do     DSS_QUERY=./queries ./qgen -s 1 $id -b ./dists.dss > q/$id.sql; done
... ...
hzhelifu@hadoop360:~/tpch_2_17_0/dbgen$ ls -lrt q
total 88
-rw-r--r-- 1 hzhelifu neteaseusers  598 Feb 17 15:57 1.sql
-rw-r--r-- 1 hzhelifu neteaseusers  769 Feb 17 15:57 2.sql
-rw-r--r-- 1 hzhelifu neteaseusers  478 Feb 17 15:57 3.sql
-rw-r--r-- 1 hzhelifu neteaseusers  421 Feb 17 15:57 4.sql
-rw-r--r-- 1 hzhelifu neteaseusers  558 Feb 17 15:57 5.sql
-rw-r--r-- 1 hzhelifu neteaseusers  311 Feb 17 15:57 6.sql
-rw-r--r-- 1 hzhelifu neteaseusers  897 Feb 17 15:57 7.sql
-rw-r--r-- 1 hzhelifu neteaseusers  862 Feb 17 15:57 8.sql
-rw-r--r-- 1 hzhelifu neteaseusers  670 Feb 17 15:57 9.sql
-rw-r--r-- 1 hzhelifu neteaseusers  592 Feb 17 15:57 10.sql
-rw-r--r-- 1 hzhelifu neteaseusers  586 Feb 17 15:57 11.sql
-rw-r--r-- 1 hzhelifu neteaseusers  659 Feb 17 15:57 12.sql
-rw-r--r-- 1 hzhelifu neteaseusers  413 Feb 17 15:57 13.sql
-rw-r--r-- 1 hzhelifu neteaseusers  395 Feb 17 15:57 14.sql
-rw-r--r-- 1 hzhelifu neteaseusers  594 Feb 17 15:57 15.sql
-rw-r--r-- 1 hzhelifu neteaseusers  549 Feb 17 15:57 16.sql
-rw-r--r-- 1 hzhelifu neteaseusers  346 Feb 17 15:57 17.sql
-rw-r--r-- 1 hzhelifu neteaseusers  516 Feb 17 15:57 18.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1041 Feb 17 15:57 19.sql
-rw-r--r-- 1 hzhelifu neteaseusers  669 Feb 17 15:57 20.sql
-rw-r--r-- 1 hzhelifu neteaseusers  727 Feb 17 15:57 21.sql
-rw-r--r-- 1 hzhelifu neteaseusers  726 Feb 17 15:57 22.sql
命令中:
  • “DSS_QUERY=./queries”是sql模板;
  • “-s”数据集规摸;
这里需要最后一次注意:不同的数据库(sql计算引擎)支持的sql不一样,所以可能需要稍作调整:删除好几个sql最后的limit部分,是否需要把DATE类型转换成TIMESTAMP类型,是否需要把 interval '1' year改成 interval '1 year'等等,具体环境具体分析吧。
本文来自网易实践者社区,经作者 何李夫 授权发布。