最速でBigQuery の Cloud SQL federated queryを試してみる(Cloud SQLをBQに簡単にバックアップできるよ)

chidakiyo
google-cloud-jp
Published in
5 min readAug 9, 2019

この記事のベースになる内容は こちら のドキュメントになります。

今日(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を使うのが便利そうです

--

--