BigQuery から BigTable へ ReverseETL ついでに ContinuousQuery で

# はじめに
比較的新しいBigQueryの機能である次の2つを軽く試して見たいと思います。
- Export to BigTable
- Cotinuous Query

# まずはバッチで ReverseETL to BigTable
## テーブルの作成とデータの準備
BigQuery にテストのテーブルを作って、テストデータも入れておきます。

```SQL
CREATE SCHEMA `tmp`
  OPTIONS (
  default_table_expiration_days = 30);
  
CREATE TABLE `tmp.bigtable_export` (
  id STRING,
  name STRING,
  age STRING,
  class STRING
);

INSERT INTO `tmp.bigtable_export`
  (id, name, age)
VALUES
  ("001", "Alice", "20"),
  ("002", "Bob", "35");
```

こんな感じでデータが入りました。

![Screenshot 2024-09-03 at 17.33.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/ad4630f7-5ec7-9d9f-877d-1269d1395554.png)

## BigTableインスタンスの作成
BigTableのコンソールに移動して、「インスタンスの作成」を選んで次のように設定します。(ぶっちゃけ設定は何でもいいですが)

### インスタンス名
![Screenshot 2024-09-03 at 17.35.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/a0500d1b-7f23-c8c1-55dc-226cfc2d067a.png)

### ストレージの種類
![Screenshot 2024-09-03 at 17.35.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/19175def-84fa-bac6-92cb-d0eda0b28f6b.png)

### 初期クラスタ構成
![Screenshot 2024-09-03 at 17.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/2ab8c84c-994f-231a-5c6d-5a7debb9ded8.png)


で、「作成」を押します。

## BigTableのサンプルテーブルを作成
インスタンスを選択します。左のメニューから「テーブル」をクリックします。「テーブルを作成」をクリックし、次のような設定で「作成」を押します。

![Screenshot 2024-09-03 at 17.53.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/414abd22-e50b-373a-4dd9-66743e063eef.png)


## BigTableのアプリケーションプロファイル作成
Export用のアプリケーションのプロファイルってのを作成します。これは現状コマンドでしかできないので、Cloud Shellを開いて、次のコマンドを実行します。

```bash
gcloud bigtable app-profiles create export \
  --instance=bq-export \
  --route-to=bq-export-c1 \
  --priority=PRIORITY_LOW
```

## BigQuery予約の作成
Export to BigTableは、BigQuery EnterpriseエディションあるいはEnterprise Plusでのみサポートされている([参考](https://cloud.google.com/bigquery/docs/export-to-bigtable?hl=ja#limitations))ため、予約を作成します。

BigQUueryのコンソールに戻り、左のメニューから「容量管理」を選択します。「予約を作成」を選択します。次のように入力して「保存」をクリックします。(ベースラインスロット数を０にすることにより、クエリを実行しているとき以外はお金がかからない設定になっています。が、実験後削除してください。）

![Screenshot 2024-09-03 at 18.00.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/da2c08a2-b9e3-cb41-4e89-fd6fd8fbf0fc.png)

次に割当を作成して、現在のプロジェクトで利用できるようにします。作成された予約の右端のメニューアイコンをクリックして、「割り当ての作成」を選択します。プロジェクトの選択欄で「参照」をクリックして、現在使用しているプロジェクトIDを選択します。「作成」をクリックします。

## EXPORTの作成
BigQueryのコンソールに戻り以下のSQLを実行します。予約を作成した直後はまだ設定が反映されておらず、予約がない旨のエラーが出る可能性がありますが、その場合は少し待ちます。

```SQL
EXPORT DATA OPTIONS(
  uri="https://bigtable.googleapis.com/projects/<YOUR PROJECT ID>/instances/bq-export/appProfiles/export/tables/bq-export-students",
  format="CLOUD_BIGTABLE",
  bigtable_options = """{
     "columnFamilies": [{
       "familyId": "cf1",
       "encoding": "TEXT",
       "columns": [
         {
           "qualifierString": "id",
           "fieldName": "id"
         },
         {
           "qualifierString": "name",
           "fieldName": "name"
         },
         {
           "qualifierString": "age",
           "fieldName": "age"
         }
       ]}
    ]
   }"""
) AS
SELECT id AS rowkey, STRUCT(name, age) as cf1 FROM `tmp.bigtable_export` LIMIT 1000
```
完了したら「2 個の行を 30 ファイルに正常にエクスポートしました。」とでます。

では、実際にBigTable上でデータの存在を確認してみましょう。

## BigTableでデータをクエリ
BigTableのコンソールに戻ります。インスタンスが選択された画面で左のメニューから「BigTable Studio」を選びます。左側のエクスプローラ内で、「bq-export-sutudets」テーブルを見つけ、右のメニューアイコンをクリックして、「クエリの例」を選びます。そのまま「実行」を押すと、データが入っているのが確認できます。

めでたしめでたし。

# 次にContnuous Queryでリアルタイムにする
リアルタイムデータのソースとして、Pub/Subのトピックを作って、トピックに流されたデータをBigQueryにリアルタイムにストリーミングします。

## Pub／Sub トピックの作成
Pub/Subのコンソール画面に移動します。「トピックを作成」を選択して、次のような設定で「作成」をクリックします。

![Screenshot 2024-09-03 at 18.15.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/4950a043-f180-6c05-500c-a0b8f94f474c.png)

では、実際にデータを流してみて、BigQueryにリアルタイムに連携されるか見てみます。作成後に表示された画面で、「メッセージ」というタブを選びます。「メッセージをパブリッシュ」をクリックし、「メッセージ本文」に以下を入れて、「公開」をクリックします。これで作成したPub/Subのトピックにメッセージを飛ばしました。

```JSON
{"id":"003", "name":"John", "age":"10"}
```

で、BigQueryの画面でテーブルを選択して「プレビュー」を見てみます。入りましたね。

![Screenshot 2024-09-03 at 18.21.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/9569283c-69f0-fa8e-3a9e-fbbfaf7f4004.png)

## Export to BigTable を Continuous Query にする
BigQueryのコンソール画面で先程のEXPORTクエリの編集画面に戻る。右上の「展開」から「継続的クエリ」を選ぶ。

![Screenshot 2024-09-03 at 18.24.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/03e1313a-8c52-208d-004e-7362537b1b3b.png)

あれ、公開プレビューだけど、許可リスト申請が必要みたいだ。

![Screenshot 2024-09-03 at 18.24.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54176/65982874-1b25-9dcc-5d86-77cdd7cebe65.png)

そして、このドキュメントリンクの先の申請フォームは、gmailアカウントでは開けなかった。断念。GAを待つか別の環境で実験再開するか。Stay Tuned!