こんにちは。GMOアドマーケティングのH.Tと申します。
今回はBigQueryの連携クエリを試してみたのでご紹介いたします。
連携クエリとは
BigQueryからCloud SpannerとCloud SQLデータにクエリを実行できる機能になります。(公式ドキュメント)
現状私の担当しているプロダクトでCloudSQLのデータをバッチ処理でBigQueryに同期し運用の分析に使用しています。
こちらの機能を使って同期処理を廃止できないかと思い試してみたのですが本当に簡単な設定だけでSQLが実行できました。
以下手順になります。
※こちらの機能を試すにはGCPアカウントを開設する必要があり、BigQueryは有料サービスとなります。
料金についての詳細はBigQueryの公式ドキュメントをご確認ください。
1. 外部データソースの追加設定
左ペインの「データを追加」ボタンをクリックします。 続いて「外部データソースへの接続」を選択します。外部データソースの情報を入力します。
・接続タイプは今回はCloudSQLになります。
・接続IDは公式ドキュメントの例に倣って「bq_sql_connection」としました。
・ロケーションはCloudSQLと同じ東京にしました。
・「わかりやすい名前」は「cloud sql big query」にしました。
・Cloud SQL接続名はCloud SQLのインスタンス一覧から参照できます。
・その他、接続するデータベース名やユーザ名などを入力します。
最後に「接続を作成」を押すと外部データソースが作成されます。 左ペインの「エクスプローラ」>プロジェクト名配下の「外部接続」に作成した接続が確認できます。
2. サービスアカウントへの権限付与
接続を作成すると「BigQuery Connection Service Agent」というサービスエージェントが作成されるようです。こちらのサービスアカウントに「CloudSQL クライアント(roles/cloudsql.client)」の権限を付与します。
まず先ほどの外部接続の情報からサービスアカウントIDを控えておきます。 続いてIAMのページに移動し確認したサービスアカウントIDに「CloudSQL クライアント」を付与します。
3. クエリを実行
準備完了しましたので早速クエリを実行してみます。 EXTERNAL_QUERY という関数を使ってCloud SQLのデータを引っ張ってきます。
第一引数に接続名、第二引数にCloud SQLのSQL文を書きます。
1 2 |
SELECT * FROM EXTERNAL_QUERY("projects/プロジェクト名/locations/asia-northeast1/connections/bq_sql_connection", "select * from information_schema.tables;"); |
まとめ
BigQueryから本当に簡単にCloud SQLのSQLが実行できました。料金に関しては
外部クエリから返されたバイト数に基づいて料金が請求されます。とあり、オンデマンドの料金がかかるみたいです。
Cloud SQLへの負荷やコストに注意して本番運用を検討できたらと思います。
以上となります。
ありがとうございました。
明日は@hoshimasaさんによる「Cookieが使えなくなる?今からでも遅くないPrivacySandbox」です。
引き続き、GMOアドマーケティング Advent Calendar 2022 をお楽しみください!
■学生インターン募集中!
https://note.gmo-ap.jp/n/nc42c8a60afaf
■エンジニア採用ページはこちら!
https://note.gmo-ap.jp/n/n02cbeb6edb0d
■GMOアドパートナーズ 公式noteはこちら!
https://note.gmo-ap.jp/