TPC-DS使用
前言
最近在调研Drill,需要导入大量的测试数据来评估下其查询性能是否满足需要,于是就看到了TPC-DS
,折腾了一番,毕竟没有详细的文档,总览一部分查询后,简单整理如下(仅限于导入到MySQL
):
安装
下载工具
必须输入邮箱,然后官方会将下载地址发到该邮箱
2、处理工具
1)解压,执行命令:
unzip 944eb36c-5624-45ea-bece-646814a75b63-tpc-ds-tool.zip
2)进入tools目录编译,执行命令:
make
初始化创建表
在tools
目录下,有3张表
- tpcds.sql 创建25张表
- tpcds_ri.sql 创建表与表之间的关系
- tpcds_source.sql 创建一些其他表
创造测试数据
tools
目录下有2个工具
dsdgen 生成数据
- -dir 生成数据存放目录
- -scale 生成数据大小
dsqgen 生成查询语句
- -output_dir 输出文件目录
- -input 输入文件
- -scale 生成数据大小
- -dialect 数据库类型
- -directory 查询语句模板文件
1、生成数据
1 | ./dsdgen -dir /data/tpc/v2.7.0/data/ -scale 1 (表示产生1G测试数据) |
2、生成的数据进行处理
生成的数据不能直接导入到MySQL
中,因为有些字段(日期和整型为空)需要进一步处理
在该目录下创建一个文件夹
mkdir handled
MySQL
在当前执行,(处理思路是将空值替换成NULL
)
1 | for i in `ls *.dat` |
将数据导入到MySQL
即可
1 | LOAD DATA INFILE '/var/lib/mysql-files/handled/call_center.dat' INTO TABLE call_center FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'; |
Postgres
在当前执行,(处理思路是去掉最后的|
)
1 | for i in `ls *.dat` |
将数据导入到Postgres
即可
1 | export PGPASSWORD=xxx&psql -U postgres -h 127.0.0.1 tpc -c "copy call_center from '/data/tpc/v2.7.0/data/call_center.dat.bak' with delimiter as '|' NULL '';" |
生成查询语句
修改query_template
下query1-99
模板,在行尾加define _END = ""
,否则执行生成命令会出错,执行如下脚本操作
1 | for i in `ls /data/tpc/v2.7.0/query_templates/query*`; |
切换到tools
目录下执行
./dsqgen -output_dir /data/tpc/sql -input ../query_templates/templates.lst -scale 1 -dialect netezza -directory ../query_templates
生成查询语句(放到了/data/tpc/sql
下,可以自己指定输出目录)