MySQL のデータを BigQuery にサクっとインポートしたメモ。
Big Query がサポートしている形式
Arvo/ORC/Parquet は MySQL からそれぞれのデータ形式に簡単に変換する方法が見つからなかった。 CSVはカンマや改行などの特殊記号がうまく扱えるか不安があったので、JSONを選択。
MySQL Shell で JSON 形式で export する
MySQL Shell を使うと、非常に簡単に、結果を JSON形式 で取り出すことが出来て便利でした。
--result-format=ndjson
を指定して、SELECT結果をJSON 形式で出力します。
念の為、記号や改行を入れたデータで試してみましたが、問題なくインポートできてました。
$ cat exp.sql SELECT * FROM d1.tbl1 $ mysqlsh --result-format=ndjson --sql user@localhost --save-passwords=never --file exp.sql | tee exp.json {"pk":1,"v1":"foo","j1":{"key1":"value1","array1":[1,2,3,4,5]}} {"pk":2,"v1":"this is include\nspecial \"' characters","j1":{"key1":"value1","array1":[1,2,3,4,5]}}
BQへインポート
JSONファイルをCloud Storage にコピーしインポートするだけ。
LOAD DATA OVERWRITE dataset1.tbl1 FROM FILES ( format = 'JSON', uris = ['gs://bucket/exp.json']);
Cloud SQL 連携クエリ
そもそも、MySQL が Cloud SQL であれば、Cloud SQL 連携クエリ | BigQuery | Google Cloud を使うのが良いのかもしれない。