编译 TPC-DS ( dsdgen / dsqgen ) 生成测试数据和查询语句

文章目录

  • 1. 下载
  • 2. 编译
  • 3. 生成测试数据
  • 4. 检查
  • 5. 建表
  • 6. 生成查询语句

1. 下载

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

2. 编译

首先,安装gcc编译器(大概率你的本地环境已经安装过了):

sudo yum -y install gcc gcc-c++

然后进入dsdgen / dsqgen的源码目录并执行编译命令:

cd ~/DSGen-software-code-3.2.0rc1/tools
make

3. 生成测试数据

编译成功后,在tools目录下会生成dsdgendsqgen两个可执行文件,不要切换目录,直接在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文件的路径。

4. 检查

上述命令会生成TPC-DS全部25张表的数据文件(7张事实表 + 18张维表),文件虽然以.dat结尾,但实际都是文本文件,可使用vim直接查看。文件其实是delimited file格式,默认使用的分隔符是|。如果需要使用其他分隔符,可以在执行dsdgen时使用-DELIMITER参数来设置。

5. 建表

TPC-DS的工具包已经提供了现成的建表SQL,存放在tools目录下,可使用如下命令查询一下:

ls | grep .*sql
# 输出如下:
tpcds_ri.sql
tpcds_source.sql
tpcds.sql

不过,建表语句只有一份,是否兼容不同类型的数据库没有测试过,但是Hive/Spark SQL肯定是不支持的

6. 生成查询语句

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

你可能感兴趣的:(大数据专题,tpc-ds,benchmark,dsdgen,dsqgen)