TPC所有Benchmark工具包的下载地址是:https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp , TPC-DS当前最新版本是3.2.0
,下载前需要填写真实的邮箱地址,因为下载连接是通过邮件发送的。将下载好的安装包上传到Linux服务器,并解压安装包:
unzip ~/TPC-DS_Tools_v3.2.0.zip.zip
首先,安装gcc编译器(大概率你的本地环境已经安装过了):
sudo yum -y install gcc gcc-c++
然后进入dsdgen / dsqgen的源码目录并执行编译命令:
cd ~/DSGen-software-code-3.2.0rc1/tools
make
编译成功后,在tools目录下会生成dsdgen
和dsqgen
两个可执行文件,不要切换目录,直接在tools目录下执行:
./dsdgen -SCALE 1GB -DIR <your-output-dir>
即可在你指定的
下生成1GB的测试数据(大概需1-3分钟左右)。在生成大规模数据集时,我们可以采用并行方式提升数据生成速度:
./dsdgen -SCALE 1GB -DIR <your-output-dir> -PARALLEL 10 -CHILD 10
注意:dsdgen
总是在当前目录下读取一个tpcds.idx
文件,如果不在tools目录下执行dsdgen
,会报错:
Error: open of distributions failed: tpcds.idx: No such file or directory
如果必须在别处执行dsdgen,可通过参数:-DISTRIBUTIONS /paht/to/tools/tpcds.idx
指定tpcds.idx
文件的路径。
上述命令会生成TPC-DS全部25张表的数据文件(7张事实表 + 18张维表),文件虽然以.dat
结尾,但实际都是文本文件,可使用vim直接查看。文件其实是delimited file格式,默认使用的分隔符是|
。如果需要使用其他分隔符,可以在执行dsdgen
时使用-DELIMITER
参数来设置。
TPC-DS的工具包已经提供了现成的建表SQL,存放在tools目录下,可使用如下命令查询一下:
ls | grep .*sql
# 输出如下:
tpcds_ri.sql
tpcds_source.sql
tpcds.sql
不过,建表语句只有一份,是否兼容不同类型的数据库没有测试过,但是Hive/Spark SQL肯定是不支持的
TPC-DS有99条查询语句,DSGen-software-code-3.2.0rc1/query_templates 下存放的是查询的模板文件,需要通过dsqgen指定相应的dialect后方能生成目标数据库/数据仓库的SQL。以下是一个示例:
./dsqgen \
-DIRECTORY ../query_templates \
-INPUT ../query_templates/templates.lst \
-VERBOSE Y \
-QUALIFY Y \
-SCALE 10000 \
-DIALECT netezza \
-OUTPUT_DIR ~/tpcds-quries
执行时可能会报错:
ERROR: Substitution'_END' is used before being initialized at line 63 in ../query_templates/query1.tpl
解决方法是:需要修改query_templates目录下所有的Query模板文件,在文件中添加define __END = "";
,手动操作太繁琐,可以使用如下脚本一次性改好(注意所处的目录必须是query_templates):
cd ~/DSGen-software-code-3.2.0rc1/query_templates
for i in `ls query*tpl`
do
echo $i;
echo "define _END = \"\";" >> $i
done