TPC-DS工具使用
以tpc-ds_v2.13.0生成GPDB测试为例。
一、下载
原版
原版tool请至 TPC官网 下载。境内因为google无法访问问题,可能无法下载,方法见:TPC-DS工具下载方法。
修订版
本文提供针对 GPDB SQL语法的修订版下载:tpc-ds_oem
二、编译
- snippet.bash
unzip tpc-ds_v2.13.0.zip cd v2.13.0rc1/tools make -f Makefile.suite
三、生成数据
以下命令生成1s数据,数据文件保持在 ../1s 目录:
- snippet.bash
./dsdgen -SCALE 1 -TERMINATE N -DIR ../1s
- TERMINATE:表示每行数据是否以分割符结尾。
四、生成查询SQL
原生版本
截至到最新的v2.13.0的原生版dsqgen报以下错误:
- snippet.bash
ERROR: Substitution'_END' is used before being initialized at line 63 in ../query_templates/query1.tpl
需要手动的去修改query_templates目录下相应的模板,以query1.sql为例,需要增加_END定义:
或者,直接修改tempalte_query/netezza.tpl,增加 define _END=""; 定义。
生成查询,可以使用以下脚本:
- snippet.bash
#!/bin/sh for i in `seq 1 99` do ./dsqgen -SCALE 1 -DIRECTORY ../query_templates/ -TEMPLATE "query${i}.tpl" -DIALECT netezza -FILTER Y -VERBOSE Y > ../query_1s/${i}.sql done
GPDB版本
因为原生工具生成的查询SQL,GPDB不支持,所以需要修改模板,使用tpc-ds_oem版本,直接使用query_templates_gpdb作为模板即可。
五、问题
文件编码
生成的数据文件基本上都是ASCII编码,但是其中的customer.dat文件不是ASCII编码,在加载时可能会报错。例如,GPDB加载报以下错误:
- snippet.bash
ERROR: invalid byte sequence for encoding "UTF8": 0xd4 0x54 (seg2 slice1 10.10.0.5:6406 pid=538409) CONTEXT: External table customer_ext, line 28 of file gpfdist://localhost:9888/1s/customer.dat
查看customer.dat文件编码:
- snippet.bash
[ff@test-2 1s]$ file customer.dat customer.dat: ISO-8859 text
转换编码方法:
- snippet.bash
[ff@test-2 1s]$ iconv -f ISO-8859-1 -t UTF-8 customer.dat > customer.dat.new [ff@test-2 1s]$ file customer.dat.new customer.dat.new: UTF-8 Unicode text
六、参考
打赏作者以资鼓励: