最速でBigQuery の Cloud SQL federated queryを試してみる(Cloud SQLをBQに簡単にバックアップできるよ)
この記事のベースになる内容は こちら のドキュメントになります。
今日(2019/08/09)現在betaですが、BQからCloud SQLに直接クエリが実行できるfederated queryがBetaになりました。
なので早速触ってみようと思います。
個人的にはつい最近、Cloud SQLのデータをBQに流し込むツールを作成したところだったので、いろいろな意味で涙が止まらない新機能になっています。
クエリできるのはCloud SQLのMySQL(第2世代)とPostgreSQLの両方に対して利用できます。
BQからCloud SQL(MySQL)に接続するための初回設定を行う
Connectionを作成する
BQ画面の左部分の +ADD DATA
のプルダウンの中から Create connection
を選択します。
Connection API がまだ有効になっていない場合には API を有効化するモーダルが表示されるので、 ENABLE API
ボタンを押して有効化しましょう。
(APIを有効化するモーダルを実行した際には、有効化後、再度 Create connection を実行します)
フォームに値を入力し、Connectionを作成します。
Cloud SQL instance ID
は Cloud SQL の Instance connection name
を入力します。
各項目を埋め、 Create connection
ボタンを押し、connectionを作成します。
作成が完了すると、左のリソース一覧に External connections
が表示されます。
作成したConnectionを経由し、BQのQuery editorからCloud SQLにクエリを実行してみる
単純なクエリを試して見るため、以下のようなクエリを書いてみます。
SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query);
connection_id は先程作成した connection の id を利用しますが、フォーマットは以下のようになります。
projects/{project_id=*}/locations/{location_id=*}/connections/{connection_id=*}
project_id, location_id, connection_id の箇所を適切な値に置き換えます。
external_database_query に関しては CloudSQL 上で実行できる適切なクエリを記述します。
具体的には以下のようにしてみました。
SELECT * FROM EXTERNAL_QUERY("projects/hoge-my-project/locations/asia-northeast1/connections/test-connection", "select * from hoge_table");
実行した結果が以下のようになります。
(全体的にモザイクですみませんw)
Appendix : Cloud SQL から BQへのバックアップが一瞬でできる
BQ上からCloud SQL上に直接クエリを実行できるので、BQ上にバックアップ(コピー)をしなくてもいいという人もいるでしょうし、
BQ上にあるコピーを使ってクエリをしたいという人もいると思うので、Cloud SQLからBQ上にデータを一瞬でコピーできる方法があります。
BQを以前から使っていた方にとっては、「あぁ、そりゃそうだよね」となりますが、
DestinationTableの設定を利用します。
Destination の設定をする
Query editor の More
のボタンを押し、 Query settings
を実行します。
Destination の設定で適当なデータセットとテーブルを設定します。
その他の項目は必要に応じて調整しましょう(説明手抜き)
saveを押したらクエリを実行するだけです。
以下のように新しいテーブルにデータが流れ込みます。
ちょっと力尽きてしまったんですが、定期的にバックアップ(コピー)するってことなら
Schedule queryを使うのが便利そうです