1、下載工具
兩種渠道
a、官網(建議直接跳過~)
地址:http://www.tpc.org/tpc_documents_current_versions/current_specifications.asp
在資訊填寫正確的情況下,無法下載。看網友的解答,需要用谷歌瀏覽器才能下載。嘗試未果。
b、github上下載
地址: https://github.com/gregrahn/tpcds-kit.git
ps:官方的包生成sql的時候會報錯,上面這個大神已經修復。
2、編譯
操作環境:Ubuntu16
進入TPC-DS工具包所在目錄,由於下載的是原始碼,需要編譯後才能使用。
a、解壓
unzip tpcds-kit-master.zip
b、編譯
編譯之前請確認依賴環境ok
ubuntu:
1 sudo apt-get install gcc make flex bison byacc git
CentOS/RHEL:
1 sudo yum install gcc make flex bison byacc git
tpcds-kit-master/tools make -f Makefile.suite
編譯過程中報錯:
make: yacc: Command not found。報錯是因為yacc沒有安裝 。
安裝yacc
sudo apt-get install -y byacc
再次編譯
又報錯對‘yy_create_buffer’未定義的引用。對C/C++不熟悉,搜尋了一下也沒有相關的解答。百思不得其解之下,換了個思路。可能是第一次編譯報錯生成的錯誤檔案對第二次編譯產生的影響。
於是刪除解壓後的目錄,重新編譯成功。
如果生成dsdgen和dsqgen且無報錯,說明編譯成功
ll *gen
3、生成資料
第一次使用這個工具我是一臉懵比的。因為官方的文件特喵的根本看不懂。回想一下,你碰到不熟悉的linux命令是怎麼做的?man或者--help,對吧。這裡也可以用--help。
先不著急生成資料,看一下幫助資訊先。
./dsdgen --help
- DIR:資料存放目錄。
- SCALE:資料量,以GB為單位。
- TABLE:生成哪張表的資料,一共有24張表哦。
- PARALLEL:生成的資料一共分為多少份,一般生成TB級資料才會用到。
- CHILD:當前資料是第幾份,與PARALLEL配對使用。
- FORCE:強制寫入資料。
常用的引數就上面幾個。下面我們來生成1G包含所有表的資料。
./dsdgen -scale 1 -dir ../data/
等待dsdgen程式正常退出後,1G資料需要2~3min左右,進入data目錄檢視生成的資料。
cd ../data
假如只想生成其中某一張表的資料呢?這就需要用到-table引數了,以web_returns表為例。
./dsdgen -scale 1 -dir ../data -table web_returns
報錯了,資訊如下:
web_returns是子表,它是依賴於父表web_sales的。生成父表的時候也會同時生成子表,我們來驗證一下。
./dsdgen -scale 1 -dir ../data -table web_sales
說明一下,最終生成的資料量以少於scale值的。
dsdgen的用法暫時先總結到這裡。
4、生成SQL
查詢SQL使用dsqgen生成,主要用於測試資料倉儲的效能,一共99個。詳細用法可以用--help檢視幫助資訊。這裡不做介紹直接生成。
./dsqgen -DIRECTORY ../query_templates/ -TEMPLATE "query1.tpl" -DIALECT netezza -FILTER Y > ../sql/query1.sql
-
-DIRECTORY:SQL模板的路徑
-
-TEMPLATE:SQL模板的名稱
-
-DIALECT:include query dialect defintions found in <s>.tpl
-
-FILTER:重定向到標準輸出。
檢視生成的SQL:
一共有99,每一個都要這樣生成多費勁呀。來寫個for迴圈一把生成所有的SQL。
shell版:
1 #!/bin/sh 2 for i in `seq 1 99` 3 do 4 ./dsqgen -DIRECTORY ../query_templates/ -TEMPLATE "query${i}.tpl" -DIALECT netezza -FILTER Y > ../sql/query${i}.sql 5 done
Python3版:
1 #coding:utf-8 2 import os 3 print("generate query sql") 4 for i in range(1,100): 5 tpl = "query"+str(i)+".tpl" 6 qsql = "query" +str(i) +".sql" 7 #拼接命令 8 cmd = "./dsqgen -DIRECTORY ../query_templates/ "+"-TEMPLATE "+tpl+" -DIALECT netezza -FILTER Y > "+"../sql/"+qsql 9 #print(cmd) 10 #執行命令 11 os.system(cmd)
去sql目錄下檢視剛才生成的SQL:
這種情況下還是shell更快一點。
5、總結
- 通過TPC-DS,可以生成指定量級的資料。
- 碰到報錯不要慌,先google或bing,不要用某度,原因你懂的。
- TPC-DS基本用法已經總結完了,但是實際操作中還有很多問題,比如:
- 我想要生成10T資料怎麼搞?
- 怎麼判斷生成的資料是否正確呢?
- child和parallel怎麼使用?
- 資料和SQL生成完了怎麼測試?
- 。。。。。。
後面有時間再總結。