1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

はじめに

比較的新しいBigQueryの機能である次の2つを軽く試して見たいと思います。

  • Export to BigTable
  • Cotinuous Query

まずはバッチで ReverseETL to BigTable

テーブルの作成とデータの準備

BigQuery にテストのテーブルを作って、テストデータも入れておきます。

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

BigTableインスタンスの作成

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

インスタンス名

Screenshot 2024-09-03 at 17.35.13.png

ストレージの種類

Screenshot 2024-09-03 at 17.35.49.png

初期クラスタ構成

Screenshot 2024-09-03 at 17.36.15.png

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

BigTableのサンプルテーブルを作成

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

Screenshot 2024-09-03 at 17.53.25.png

BigTableのアプリケーションプロファイル作成

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

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でのみサポートされている(参考)ため、予約を作成します。

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

Screenshot 2024-09-03 at 18.00.24.png

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

EXPORTの作成

BigQueryのコンソールに戻り以下の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

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

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

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

Screenshot 2024-09-03 at 18.21.32.png

Export to BigTable を Continuous Query にする

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

Screenshot 2024-09-03 at 18.24.29.png

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

Screenshot 2024-09-03 at 18.24.55.png

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?