はじめに
性能試験を行いたいとき,100GBを超えるようなデータをS3のようなストレージだったり,MysqlのようなRDBなどの上に用意したいことがあると思います.しかし,単純にやろうとすると以下のような問題に直面します.
- ローカルで100GBのデータなんか作れない!!
- 作れても転送に時間かかりすぎ!!
- 101, 102GBみたいに刻んで作る必要があったりすると,もう無理!!
ということで今回はGCS,MySQL,Bigquery上に色んな大きいサイズのデータを作成することを行なったので,備忘録として書いてみようと思います.
方法
基本的に小さいデータを作って転送してから,それをコピーしまくる方針で行う
GCS
主に以下の手順で行います.
- 1GBぐらいのサイズのデータをローカルで作る
- gsutilを使ってGCS上にアップロードする.
- gsutilコマンドを使って,必要なデ. ータサイズ分コピーを繰り返す.
aws S3などの場合でも,awsコマンドで同じようなことができると思われる.
MySql
- 1GBぐらいのサイズのCSVデータ(test_1GB.csv)をローカルで作る
- MySql上にtest_1GBという名前で,先ほどのCSVを入れるためのテーブルを作る
- mysqlimportを使って,先ほど作ったCSVをテーブルに入れる(mysqlimportコマンドで転送する対象のテーブル名はcsvのファイル名と同じでなくてはならないよう?)
- 以下のようなクエリを必要なデータサイズ分叩く
DROP TABLE IF EXISTS testdata_NGB; CREATE TABLE testdata_NGB; # 以下を繰り返し INSERT INTO testdata_NGB SELECT * FROM test_1GB;
Bigquery
- 1GBぐらいのサイズのCSVデータ(test_1GB.csv)をローカルで作る
- 作ったCSVを入れるようのbigquery schemaをjsonで定義する
- bq loadコマンドでCSVをもとにテーブルを作成する(スキーマのauto detectも可能)
bq --location=$LOCATION load \ --replace \ --source_format=CSV \ --skip_leading_rows=1 \ $PROJECT_ID:$DATASET."test_1GB" \ ../test_1GB.csv \ ./schema.json
- bq cpコマンドを必要なデータサイズ分繰り返す
bq --location=$LOCATION cp \ --append_table \ $PROJECT_ID:$DATASET."test_1GB" \ $PROJECT_ID:$DATASET."test_${DATA_SIZE}GB"