なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

HammerDBをCLIで使うなど(10):テストデータをテキストファイルに出力する

DBによっては、データファイルの一括ロードが速いよね

OracleSQL*Loaderとか、MYSQLのLOAD DATAコマンドとか、PostgreSQLのCOPYコマンドとか。
HammerDBのドキュメントの中でも、そういったツールを使うことを推奨しています。

そういったツールに読み込ませるデータを吐き出すためのコマンドが、今回のテーマです。

流れ

TPC-C/TPC-Hのbuildschemaまでの流れと似たようなものです。

  1. スケールファクタの指定
  2. 仮想ユーザー(出力並列度)の指定
  3. 出力先ディレクトリの指定
  4. 設定確認
  5. 出力実行


設定項目は少なくて、「dgset」コマンドで見られる内容がすべてです。
デフォルトではOracleTPC-C用の設定になっています。

hammerdb>dgset
dgset - Usage: dgset [vu|scale_fact|warehouse|directory]

scale_factはTPC-H用、warehouseはTPC-C用のデータサイズを決めるパラメータです。


以下、OracleTPC-H用のデータを作る手順を例に進めていきますが、DB選択での指定以外、MySQLPostgreSQLも同じです。
ていうか、テキストファイルのデータにファイルにOracle用もMySQL用もPostgreSQL用もないでしょ。。。
え?Redis?(HammerDBの仕様上、TPC-Cのみサポートだけど)Redis用として指定しても何も変わりませんでしたよ。CSV


対象DBMSベンチマークの選択

ここは、通常のベンチマーク実施のときと同じです。

hammerdb>dbset bm TPC-H
Benchmark set to TPC-H for Oracle

スケールファクタの指定

スケールファクタを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公式のところでも華麗にスルーされてます。


まとめ

  • datagenでTPC-C/TPC-Hで任意のスケールファクタのデータをテキストファイルとして生成することが可能。
  • ファイル生成処理は並列処理が可能だが、並列化した分、できあがるファイルも増える。
  • 各DBへのファイルローディングの方法はHammerDBの公式サイトに具体的なコマンドが書いてある。

パワフルなマシンで並列度上げてゴリっと回してもよし、並列処理せずに、夜中にほそぼそと生成させてもよし。