HammerDBをCLIで使うなど(10):テストデータをテキストファイルに出力する
DBによっては、データファイルの一括ロードが速いよね
OracleのSQL*Loaderとか、MYSQLのLOAD DATAコマンドとか、PostgreSQLのCOPYコマンドとか。
HammerDBのドキュメントの中でも、そういったツールを使うことを推奨しています。
そういったツールに読み込ませるデータを吐き出すためのコマンドが、今回のテーマです。
流れ
TPC-C/TPC-Hのbuildschemaまでの流れと似たようなものです。
- スケールファクタの指定
- 仮想ユーザー(出力並列度)の指定
- 出力先ディレクトリの指定
- 設定確認
- 出力実行
設定項目は少なくて、「dgset」コマンドで見られる内容がすべてです。
デフォルトではOracleのTPC-C用の設定になっています。
hammerdb>dgset dgset - Usage: dgset [vu|scale_fact|warehouse|directory]
scale_factはTPC-H用、warehouseはTPC-C用のデータサイズを決めるパラメータです。
以下、Oracle用TPC-H用のデータを作る手順を例に進めていきますが、DB選択での指定以外、MySQLもPostgreSQLも同じです。
ていうか、テキストファイルのデータにファイルにOracle用もMySQL用もPostgreSQL用もないでしょ。。。
え?Redis?(HammerDBの仕様上、TPC-Cのみサポートだけど)Redis用として指定しても何も変わりませんでしたよ。CSV
スケールファクタの指定
スケールファクタを10にしてみます。
hammerdb>dgset scale_fact 10
エラーが出なければOKです。
TPC-Cのときは、「dgset warehouse 値」にしてください。
仮想ユーザー(出力並列度)の指定
ここは、2並列にしてみます。
並列度を上げると、処理が並列になるだけでなく、それぞれのテーブルに対応したファイルがvu数に分割されます。
取り込み処理の実行回数にも影響しますので、1テーブル1ファイルで作りたい場合、vuは1を使用してください。
「ディレクトリ配下まるごと」、とか「パターンマッチングで取り込み対象を指定できる」とか、さらには並列取り込みが可能なファイルローダを使う想定では、並列度を上げると便利でしょう。
hammerdb>dgset vu 2 Set virtual users to 2 for data generation
このコマンドは、ちゃんと応答がある。。。
なお、TPC-Cのデータを生成する際に、vu数はwarehouse で指定した値より小さくする必要があります。
(dgset vu実行時に、warehouse より大きい値を指定するとエラーになります。)
出力先ディレクトリの指定
デフォルトは/tmpです。
割と大きなサイズのファイルを作ることになるので、専用にマウントした大きなストレージに履きたい場合など、変更しておきましょう。
なお、ディレクトリを勝手に作ってくれるような優しさはないので、すでに存在していてアクセス可能なものを指定してください。
hammerdb>dgset directory "/mnt/eph/tpch_sf10"
このコマンドは、応答がない。。。
設定確認
変更してきた内容を確認します。
hammerdb>print datagen Data Generation set to build a TPC-H schema for Oracle with 10 scale factor with 2 virtual users in /mnt/eph/tpch_sf10
出力実行
「datagenrun」でスタートさせます。
出力内容、長いので、省略します。
hammerdb>datagenrun Ready to generate the data for a 10 Scale Factor Oracle TPC-H schema in directory /mnt/eph/tpch_sf10 ? Enter yes or no: replied yes Vuser 1 created - WAIT IDLE Vuser 2 created - WAIT IDLE Vuser 3 created - WAIT IDLE RUNNING - TPC-H generation Vuser 1:RUNNING ... Vuser 1:Workers: 0 Active 2 Done Vuser 1:Scale Factor 10 SCHEMA GENERATED in 48 MINUTES Vuser 1:FINISHED SUCCESS ALL VIRTUAL USERS COMPLETE TPC-H Driver Script
なお、約50分かかりました。
設定を変えたりして連続実行する場合、一旦vudestroyしてください。
出力結果確認
指定した場所に、ファイルが生成されていることを確認します。
vu=2 にしたので、各テーブルに対応するファイルは2つずつに分割して生成されています
とはいえ、小さいテーブル「nation(25行)」「region(5行)」は1ファイルですね。
$ cd /mnt/eph/ $ ls -lh total 11G -rw-rw-r-- 1 ec2-user ec2-user 115M Sep 5 07:36 customer_1.tbl -rw-rw-r-- 1 ec2-user ec2-user 116M Sep 5 07:36 customer_2.tbl -rw-rw-r-- 1 ec2-user ec2-user 3.8G Sep 5 08:24 lineitem_1.tbl -rw-rw-r-- 1 ec2-user ec2-user 3.8G Sep 5 08:24 lineitem_2.tbl -rw-rw-r-- 1 ec2-user ec2-user 2.1K Sep 5 07:35 nation_1.tbl -rw-rw-r-- 1 ec2-user ec2-user 844M Sep 5 08:24 orders_1.tbl -rw-rw-r-- 1 ec2-user ec2-user 846M Sep 5 08:24 orders_2.tbl -rw-rw-r-- 1 ec2-user ec2-user 116M Sep 5 07:44 part_1.tbl -rw-rw-r-- 1 ec2-user ec2-user 118M Sep 5 07:44 part_2.tbl -rw-rw-r-- 1 ec2-user ec2-user 575M Sep 5 07:44 partsupp_1.tbl -rw-rw-r-- 1 ec2-user ec2-user 579M Sep 5 07:44 partsupp_2.tbl -rw-rw-r-- 1 ec2-user ec2-user 464 Sep 5 07:35 region_1.tbl -rw-rw-r-- 1 ec2-user ec2-user 6.7M Sep 5 07:35 supplier_1.tbl -rw-rw-r-- 1 ec2-user ec2-user 6.7M Sep 5 07:35 supplier_2.tbl
ファイルの中身は、「"|"区切りテキスト」です。
PSV:Pipe Separated Valuesファイルって呼ぶのか?それとも、VSV:Virtical bar Separated Valuesファイルって呼ぶのか?
中身はこんなかんじです。
$ cat region_1.tbl 0|AFRICA|quickly even instructions breach; regular packages wake. slyly ironic requests cajole among th 1|AMERICA|quickly regular requests wake quickly. even sil 2|ASIA|regular requests are furiously. 3|EUROPE|regular regular excuses haggle against the blithely ironic instructions. sly 4|MIDDLE EAST|carefully final accounts nag fluffily against the express packages. quickly unusual accounts try to nag unusual s
文字列に意味はないと思うw
データロード
ここでは細かく書きませんが、ご丁寧にHammerDBのドキュメントに各DBへのローディングについての手順が書いてありますので、そちらへのリンクで。
4. Run the bulk data load
え?Redis?CSVとかからRedisにインポートする標準機能ってないよね。。。
ってことで、HammerDB公式のところでも華麗にスルーされてます。