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

1.下载:


考虑到官方的压缩包,在生成sql文件过程中会产生各种错误(比如:ERROR: Substitution'_END' is used before being initialized at line 63 in ../query_templates/query1.tpl),所以我们这里 改用这位仁兄修复过后的包https://github.com/gregrahn/tpcds-kit.git
hzhelifu@hadoop360:~$ git clone https://github.com/gregrahn/tpcds-kit.git
2.编译:
hzhelifu@hadoop360:~$ cd tpcds-kit/tools/
hzhelifu@hadoop360:~/tpcds-kit/tools$ make -f Makefile.suite 
hzhelifu@hadoop360:~/tpcds-kit/tools$ ls -lrt *gen
-rwxr-xr-x 1 hzhelifu neteaseusers 455576 Feb 20 14:03 dsdgen
-rwxr-xr-x 1 hzhelifu neteaseusers 291755 Feb 20 14:03 dsqgen
... ...
得到:dsdgen和dsqgen
3.生成数据:
hzhelifu@hadoop360:~/tpcds-kit/tools$ ./dsdgen -SCALE 1 -DISTRIBUTIONS tpcds.idx -TERMINATE N
DBGEN2 Population Generator (Version 1.0.0h (pre-release)) Copyright Transaction Processing Performance Council (TPC) 2001 - 2008 Warning: This scale factor is valid for QUALIFICATION ONLY hzhelifu@hadoop360:~/tpcds-kit/tools$ ls -lrth *.dat
-rw-r--r-- 1 hzhelifu neteaseusers 1.9K Feb 20 10:45 call_center.dat -rw-r--r-- 1 hzhelifu neteaseusers 1.6M Feb 20 10:45 catalog_page.dat -rw-r--r-- 1 hzhelifu neteaseusers 281M Feb 20 10:45 catalog_sales.dat -rw-r--r-- 1 hzhelifu neteaseusers 21M Feb 20 10:45 catalog_returns.dat -rw-r--r-- 1 hzhelifu neteaseusers 13M Feb 20 10:45 customer.dat -rw-r--r-- 1 hzhelifu neteaseusers 5.2M Feb 20 10:45 customer_address.dat -rw-r--r-- 1 hzhelifu neteaseusers 76M Feb 20 10:46 customer_demographics.dat -rw-r--r-- 1 hzhelifu neteaseusers 9.8M Feb 20 10:46 date_dim.dat -rw-r--r-- 1 hzhelifu neteaseusers 308 Feb 20 10:46 income_band.dat -rw-r--r-- 1 hzhelifu neteaseusers 142K Feb 20 10:46 household_demographics.dat -rw-r--r-- 1 hzhelifu neteaseusers 215M Feb 20 10:46 inventory.dat -rw-r--r-- 1 hzhelifu neteaseusers 4.9M Feb 20 10:46 item.dat -rw-r--r-- 1 hzhelifu neteaseusers 37K Feb 20 10:46 promotion.dat -rw-r--r-- 1 hzhelifu neteaseusers 3.1K Feb 20 10:46 store.dat -rw-r--r-- 1 hzhelifu neteaseusers 1.1K Feb 20 10:46 ship_mode.dat -rw-r--r-- 1 hzhelifu neteaseusers 1.3K Feb 20 10:46 reason.dat -rw-r--r-- 1 hzhelifu neteaseusers 368M Feb 20 10:47 store_sales.dat -rw-r--r-- 1 hzhelifu neteaseusers 31M Feb 20 10:47 store_returns.dat -rw-r--r-- 1 hzhelifu neteaseusers 5.6K Feb 20 10:47 web_page.dat -rw-r--r-- 1 hzhelifu neteaseusers 580 Feb 20 10:47 warehouse.dat -rw-r--r-- 1 hzhelifu neteaseusers 4.8M Feb 20 10:47 time_dim.dat -rw-r--r-- 1 hzhelifu neteaseusers 9.3M Feb 20 10:47 web_returns.dat -rw-r--r-- 1 hzhelifu neteaseusers 140M Feb 20 10:47 web_sales.dat -rw-r--r-- 1 hzhelifu neteaseusers 8.6K Feb 20 10:47 web_site.dat -rw-r--r-- 1 hzhelifu neteaseusers 74 Feb 20 10:47 dbgen_version.dat hzhelifu@hadoop360:~/tpcds-kit/tools$
总共会生成24张表的数据,其中7张表为事实表,17张表为维度表,每张表信息如下:


命令中:
  • “-SCALE”参数用于控制数据集的规模
  • “-DISTRIBUTIONS”参数用于指定生成的数据集的元数据信息
  • “-TERMINATE”参数用于控制每行记录的末尾是否需要分隔符。
dsdgen是个单线程程序,一般在测试过程中,会通过指定表名(“-TABLE”参数)以多个进程并发(每个进程对应1张表)的方式来加快生成数据:
hzhelifu@hadoop360:~/tpcds-kit/tools$ ./dsdgen -SCALE 1 -DISTRIBUTIONS tpcds.idx -TERMINATE N -TABLE time_dim
因为事实表普遍比较大,所以考虑使用dsdgen通过分块的方式加速生成数据:
hzhelifu@hadoop360:~/tpcds-kit/tools$ ./dsdgen -SCALE 1 -DISTRIBUTIONS tpcds.idx -TERMINATE N -TABLE catalog_sales -PARALLEL 10 -CHILD 1
命令中:“-PARALLEL 10”参数表示整个表分成10块,“-CHILD 1”参数表示生成第1块;同时启动10个dsdgen进程,每个进程CHILD编号递增,加速效果就出来了。
这里,再给大家一个建议:如果数据集比较大,可以考虑把事实表分散到多台服务器上的多个进程来生成,比如20台服务器,每台服务器启动32个进程,这样效果就更明显了:)
4.生成sql:
hzhelifu@hadoop360:~/tpcds-kit/tools$ mkdir sql
hzhelifu@hadoop360:~/tpcds-kit/tools$ for id in `seq 1 99`; do ./dsqgen -DIRECTORY ../query_templates -TEMPLATE "query$id.tpl" -DIALECT netezza -FILTER Y > ./sql/"query$id.sql"; done
... ...
hzhelifu@hadoop360:~/tpcds-kit/tools$ ls -lrt sql
total 412
-rw-r--r-- 1 hzhelifu neteaseusers  707 Feb 20 14:15 query1.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2215 Feb 20 14:15 query2.sql
-rw-r--r-- 1 hzhelifu neteaseusers  565 Feb 20 14:15 query3.sql
-rw-r--r-- 1 hzhelifu neteaseusers 4050 Feb 20 14:15 query4.sql
-rw-r--r-- 1 hzhelifu neteaseusers 4010 Feb 20 14:15 query5.sql
-rw-r--r-- 1 hzhelifu neteaseusers  758 Feb 20 14:15 query6.sql
-rw-r--r-- 1 hzhelifu neteaseusers  713 Feb 20 14:15 query7.sql
-rw-r--r-- 1 hzhelifu neteaseusers 6215 Feb 20 14:15 query8.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2245 Feb 20 14:15 query9.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1853 Feb 20 14:15 query10.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2679 Feb 20 14:15 query11.sql
-rw-r--r-- 1 hzhelifu neteaseusers  830 Feb 20 14:15 query12.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1558 Feb 20 14:15 query13.sql
-rw-r--r-- 1 hzhelifu neteaseusers 6792 Feb 20 14:15 query14.sql
-rw-r--r-- 1 hzhelifu neteaseusers  642 Feb 20 14:15 query15.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1069 Feb 20 14:15 query16.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1751 Feb 20 14:15 query17.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1338 Feb 20 14:15 query18.sql
-rw-r--r-- 1 hzhelifu neteaseusers  763 Feb 20 14:15 query19.sql
-rw-r--r-- 1 hzhelifu neteaseusers  845 Feb 20 14:15 query20.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1134 Feb 20 14:15 query21.sql
-rw-r--r-- 1 hzhelifu neteaseusers  721 Feb 20 14:15 query22.sql
-rw-r--r-- 1 hzhelifu neteaseusers 3900 Feb 20 14:15 query23.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2212 Feb 20 14:15 query24.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1102 Feb 20 14:15 query25.sql
-rw-r--r-- 1 hzhelifu neteaseusers  722 Feb 20 14:15 query26.sql
-rw-r--r-- 1 hzhelifu neteaseusers  785 Feb 20 14:15 query27.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2265 Feb 20 14:15 query28.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1324 Feb 20 14:15 query29.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1302 Feb 20 14:15 query30.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1797 Feb 20 14:15 query31.sql
-rw-r--r-- 1 hzhelifu neteaseusers  783 Feb 20 14:15 query32.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1964 Feb 20 14:15 query33.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1462 Feb 20 14:15 query34.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1683 Feb 20 14:15 query35.sql
-rw-r--r-- 1 hzhelifu neteaseusers  896 Feb 20 14:15 query36.sql
-rw-r--r-- 1 hzhelifu neteaseusers  607 Feb 20 14:15 query37.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1004 Feb 20 14:15 query38.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2218 Feb 20 14:15 query39.sql
-rw-r--r-- 1 hzhelifu neteaseusers  979 Feb 20 14:15 query40.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2013 Feb 20 14:15 query41.sql
-rw-r--r-- 1 hzhelifu neteaseusers  579 Feb 20 14:15 query42.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1096 Feb 20 14:15 query43.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1720 Feb 20 14:15 query44.sql
-rw-r--r-- 1 hzhelifu neteaseusers  791 Feb 20 14:15 query45.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1372 Feb 20 14:15 query46.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1843 Feb 20 14:15 query47.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1309 Feb 20 14:15 query48.sql
-rw-r--r-- 1 hzhelifu neteaseusers 3724 Feb 20 14:15 query49.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1668 Feb 20 14:15 query50.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1747 Feb 20 14:15 query51.sql
-rw-r--r-- 1 hzhelifu neteaseusers  551 Feb 20 14:15 query52.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1165 Feb 20 14:15 query53.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1805 Feb 20 14:15 query54.sql
-rw-r--r-- 1 hzhelifu neteaseusers  423 Feb 20 14:15 query55.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1915 Feb 20 14:15 query56.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1655 Feb 20 14:15 query57.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2424 Feb 20 14:15 query58.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2117 Feb 20 14:15 query59.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1939 Feb 20 14:15 query60.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1361 Feb 20 14:15 query61.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1260 Feb 20 14:15 query62.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1369 Feb 20 14:15 query63.sql
-rw-r--r-- 1 hzhelifu neteaseusers 3553 Feb 20 14:15 query64.sql
-rw-r--r-- 1 hzhelifu neteaseusers  951 Feb 20 14:15 query65.sql
-rw-r--r-- 1 hzhelifu neteaseusers 7745 Feb 20 14:15 query66.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1270 Feb 20 14:15 query67.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1524 Feb 20 14:15 query68.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1497 Feb 20 14:15 query69.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1241 Feb 20 14:15 query70.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1650 Feb 20 14:15 query71.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1320 Feb 20 14:15 query72.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1263 Feb 20 14:15 query73.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2118 Feb 20 14:15 query74.sql
-rw-r--r-- 1 hzhelifu neteaseusers 3176 Feb 20 14:15 query75.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1220 Feb 20 14:15 query76.sql
-rw-r--r-- 1 hzhelifu neteaseusers 3151 Feb 20 14:15 query77.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2252 Feb 20 14:15 query78.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1012 Feb 20 14:15 query79.sql
-rw-r--r-- 1 hzhelifu neteaseusers 3001 Feb 20 14:15 query80.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1378 Feb 20 14:15 query81.sql
-rw-r--r-- 1 hzhelifu neteaseusers  603 Feb 20 14:15 query82.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1869 Feb 20 14:15 query83.sql
-rw-r--r-- 1 hzhelifu neteaseusers  686 Feb 20 14:15 query84.sql
-rw-r--r-- 1 hzhelifu neteaseusers 2141 Feb 20 14:15 query85.sql
-rw-r--r-- 1 hzhelifu neteaseusers  746 Feb 20 14:15 query86.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1017 Feb 20 14:15 query87.sql
-rw-r--r-- 1 hzhelifu neteaseusers 5247 Feb 20 14:15 query88.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1083 Feb 20 14:15 query89.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1076 Feb 20 14:15 query90.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1184 Feb 20 14:15 query91.sql
-rw-r--r-- 1 hzhelifu neteaseusers  814 Feb 20 14:15 query92.sql
-rw-r--r-- 1 hzhelifu neteaseusers  898 Feb 20 14:15 query93.sql
-rw-r--r-- 1 hzhelifu neteaseusers  935 Feb 20 14:15 query94.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1130 Feb 20 14:15 query95.sql
-rw-r--r-- 1 hzhelifu neteaseusers  504 Feb 20 14:15 query96.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1055 Feb 20 14:15 query97.sql
-rw-r--r-- 1 hzhelifu neteaseusers  821 Feb 20 14:15 query98.sql
-rw-r--r-- 1 hzhelifu neteaseusers 1271 Feb 20 14:15 query99.sql
命令中:
  • “-DIRECTORY”参数表示模板目录;
  • “-TEMPLATE”参数表示sql模板;
  • “-DIALECT”参数表示“sql的方言”,比如sqlserver、oracle、netezza、ansi等;
  • “-FILTER”参数表示把结果输出到stdout,通过重定向输出到指定的目录的文件中;
这里产生的sql文件(语句),在测试过程中可能需要对语法做适当的调整,以适应对应的测试数据库,这里就不再展开介绍了。
相关阅读:
【大数据之数据仓库】安装部署phpPgAdmin
本文来自网易实践者社区,经作者 何李夫 授权发布。