Datastream for BigQuery を使ってみた

# Datastream for BigQuery を使ってみた
## はじめに
この記事は、2022/10/20 に開催した、[セゾン情報システムズ　クラウドLT大会 vol.1](https://saison-coloris.connpass.com/event/260703/) で発表した内容をもとに作成しています。
当日の発表資料も公開しています。

https://speakerdeck.com/yu_sa18/datastream-for-bigquery-woshi-tutemita

## Datastream for BigQuery とは
Datastream とは、DB のデータを CloudStorage へストリーミングするサービスです。
2022/9 に BigQuery がストリーム先にプレビューとして追加されました。

https://cloud.google.com/blog/ja/products/data-analytics/introducing-seamless-database-replication-to-bigquery

BigQuery のクエリ対象となるのは BigQuery のストレージデータ、もしくは特定のサービス（CloudStorage, Googleドライブ, Bigtable）のみで、Cloud SQL 含むリレーショナルDBは対象外です。
Datastream for BigQuery の登場により、DBのデータを BigQuery ストレージに簡単にストリームすることができ、分析データとして使うことができます。

### ストリームできるDBについて
投稿時点で3種類のDBに対応しています。

 - Oracle
 - MySQL
 - PostgreSQL（プレビュー）

オンプレや Google Cloud の DB サービス（Cloud SQL, AlloyDB）だけでなく、AWS の DB サービス（Amazon RDS, Amazon Aurora）にも対応しています。

## 構築手順
今回は Cloud SQL for PostgreSQL のデータを BigQuery へストリーミングしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/d79aeed1-34d7-e4df-a528-99c74d63f01d.png)


### 接続先プロファイルの作成
ソース、宛先それぞれに接続先プロファイルを作成します。

#### ソースの接続先プロファイル作成
PosggreSQL の接続先プロファイルを作成します。
気を付ける点は2点あります。
 - リージョンの選定
 - 接続方法の選定

##### リージョンの選定
後ほど作成する宛先の接続先プロファイル・ストリームと同じリージョンを指定する必要があります。
ドキュメントによると、Datastream からソース・宛先への接続に制限はありませんが、リージョンで障害が発生した際の可用性に影響するとのことです。

##### 接続方法の選定
DB への接続方法は3種類用意されています。

 - IP 許可リスト
 - フォワード SSH トンネル
 - プライベート接続（VPC ピアリング）

今回は　IP 許可リストを使用しましたが、この方法だと Datastream のパブリック IP アドレスから受信接続できるよう、DB 側の構成を変更する必要があるため、本番環境では使いづらそうです。
それぞれメリット・デメリットがあるため、接続したい DB 環境のセキュリティ要件の確認は必須になります。
メリット・デメリットの詳細はドキュメントに記載があります。

https://cloud.google.com/datastream/docs/network-connectivity-options?hl=ja

#### 宛先の接続先プロファイル作成
続いて BigQuery の接続先プロファイルを作成します。
こちらはリージョン指定に気を付ければOKです。

### ストリームの作成
ストリームを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/3dbd2464-d724-009a-2d4a-05fa1dae884a.png)

ソースタイプと宛先を指定すると、ページ下部に前提条件が表示されます。
例えば Cloud SQL for PostgreSQL の場合は、

 - データベースの論理レプリケーションを有効にする
 - パブリケーションとレプリケーションスロットを作成する
 - DataStream ユーザーを作成する

同じDBでもDBサービスによって微妙に設定内容が異なります。
設定に必要な操作はガイドに記載があるので別途調査は必要ありませんが、再起動を必要とする場合があるため、事前にどんな操作が必要か確認しておくとよさそうです。

ソースの構成ページでは、ストリームする PostgreSQL のテーブルを指定します。
カラム単位でストリームするデータを選定できるので、使いたいデータだけ BigQuery に取り込むことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/8bd997a4-e575-dc93-2ac8-48bee80496a5.png)

宛先の構成ページでは、出力時のデータセットの設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/207b7cfa-be87-5bf6-57ea-f5a580857e3b.png)

以上でストリームの設定は完了です。

### ストリームの開始
ストリーム作成直後は停止状態なので、ストリーム詳細ページから「開始」ボタンをおします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/f7d19a1a-2d73-7961-cb21-b74da539be13.png)

ストリームが開始されると、自動的に BigQuery にデータセットとテーブルが生成されます。
ストリーミングしたDBデータのほかに、Datastream 用のメタデータカラムが付与されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/873e679f-5719-ec71-ec06-d913bdb202a1.png)
画像例だと、上二つのカラム（`key`, `date`）はDBデータ、`datastream_metadata` は自動付与されたDatastream 用のメタデータカラムです。

https://cloud.google.com/datastream/docs/destination-bigquery

## 実際使ってみて
DBへの接続方法については考慮する必要がありますが、その他は簡単な設定のみで作りこみが不要なので、気軽に使ってみやすいと思いました。
設定内容も各種作成ページに記載もしくは公式ドキュメントへのリンクが載っているので、詰まることがなくさくさく進めることができました。

以上、誰かの参考になれば幸いです。