mita2 database life

主にMySQLに関するメモです

MySQL のデータを BigQuery にサクっとインポートした

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 を使うのが良いのかもしれない。