はじめに
こんにちは、京セラコミュニケーションシステム 森田 (@kccs_kai-morita)です。
GoogleCloudPlatform - Pub/SubからBigQueryにデータをInsertするためにこれまではGoogleCloudPlatform - DataFlowを使うのがGoogleCloudのオススメでしたが、単に生データをそのまま使うユースケースでは過剰になり高額な費用がかかりました。ところが最近Pub/SubからGoogleCloudPlatform - BigQueryに直登録できるBigqueryサブスクリプションがリリースされたという記事が公開されましたので詳しく調べてみました。
この記事の対象者
- BiqQueryおよびCloud Pub/Subについて基本的な知識を持っている人
Bigqueryサブスクリプションの作成
Bigqueryサブスクリプションのドキュメントによると3つアドバンテージがあり、そのうちの1つは以下の通りです。
Simple deployment.
You can set up a BigQuery subscription through a single workflow in the
console, Google Cloud CLI, client library, or Pub/Sub API.
要はコンソール、GoogleCloud CLI、クライアント ライブラリ、または Pub/Sub API で簡単にBigQuery サブスクリプションをセットアップできますよ、ということが書かれています。
さっそくコンソールから構築します。
Pub/Sub>サブスクリプション>「CREATE SUBSCRIPTION」を選択します。
Subscriptionを作成する前にBigqueryテーブルを作成する必要があると記載があるとおり、テーブルは事前に作成する必要があるようです。一方でサブスクリプション作成のページからデータセットの作成はできました(テーブルの作成はこのページからはできませんでした・・・)。
既存のテーブルを使うにはPub/Subトピックのスキーマとの互換性があるか確認する必要があります。
今回は新規でデータセットとテーブルを作成しました。
次にオプションを見ていきます。
以下のオプションを選択できるようで、それぞれの説明はコンソール上に記載されているのでやさしいですね。
- トピックスキーマを使用する
Pub/SubトピックのスキーマをPub/Subで使用できるようです。
- メタデータを書き込む
メタデータをBigqueryテーブルの追加の列に書き込めるみたいです。便利ですね。
- 不明な項目を削除する
トピックスキーマには存在するがBigQueryスキーマには存在しないフィールドをドロップできます。
一旦オプションは選択せずに早速作成!と作成ボタンをクリックすると、アクセスが拒否されたという一文とともにエラーがでました。
サービスアカウントserviece-******@gcp-sa-pubsub.iam.gserviceaccount.comに、BigQueryの書き込み権限があるかどうかを判断できません。テーブルが存在し、権限が構成されていることを確認してください。
サービスアカウントに権限を付与する必要があるとのことが記載されています。
そこでIAMと管理からPub/Subサービスアカウント(@gcp-sa-pubsub.iam.gserviceaccount.com)にBigQueryデータ編集者( roles/bigquery.dataEditor)の役割と BigQueryメタデータ閲覧者(roles/bigquery.metadataViewer )の役割を付与します。
作成ボタンをクリックすると次は下記のエラーが発生しました。
BiqQuery tableスキーマにフィールドdataが見つかりません。「トピックスキーマを使用する」オプションが選択されていない場合、BigQueryテーブルには「data」というフィールドが必要です。
つまりトピックスキーマを使用しないものは、メッセージをBigQueryの「data」というフィールドに書き込まれるようですので、「data」フィールドを作成する必要があるようです。
BigQueryのページに移動し、先程作成したテーブルを開き、新たにスキーマを追加します。
「サブスクリプションが正常に作成されました。」と出て作成完了を確認できました。
以上により簡単にBigQueryサブスクリプションを作成できました。
オプションをみたところ追加で処理を実施できるような項目は確認できませんでしたので、その場合はDataflowを使用した方が良さそうですね。
メッセージを公開してBigQueryにデータが入っているか確認する
Pub/Subコンソールにてさきほど作成したトピックに移動して、メッセージをパブリッシュします。
スキーマを使用していないため、data列に書き込まれるはずです。
SELECT * でQuery発行して確認します。
data列にデータが入っていることを確認できました。
費用について
Bigqueryサブスクリプションのドキュメントに記載されているアドバンテージには次のものがあります。
Offers low costs.
Removes the additional cost and latency of similar Pub/Sub pipelines
that include Dataflow jobs. This cost optimization is useful for
messaging systems that do not require additional processing before
storage.
"Dataflow ジョブを含む同様の Pub/Sub パイプラインの追加コストとレイテンシを取り除きます。このコストの最適化は、保存前に追加の処理を必要としないメッセージングシステムに役立ちます。"ということで、つまり費用を抑えているということですので利用費用について調べてみました。
Dataflow構成時はDataflowジョブやBigQueryのデータの取り込みについて課金されますが、この手法ではこれらの費用はかからないようでした。BigQueryサブスクリプションは、サブスクリプションからの読み取り (サブスクライブスループット) と BigQuery への書き込みに対して、すべてのGoogleCloudPlatform リージョンでTiB あたり50ドルかかります。追加の BigQueryデータ取り込み料金はないみたいですが、ストレージやデータ抽出など他のタイプのBigQuery 料金が適用されるようです。MessageDelivery Basic SKUとして識別されるスループットは最初の10GiBに対して無料枠があるのですが、BigQueryサブスクリプション スループットは無料ではないようです。
Dataflow vs BigQueryサブスクリプション
Bigqueryサブスクリプションのドキュメントに記載されている3つ目のアドバンテージには次のとおり記載されていました。
Minimizes monitoring.
BigQuery subscriptions are part of the multi-tenant Pub/Sub service and
do not require you to run separate monitoring jobs.
要は監視についても個別に設定することが不要であるという点でBigQueryサブスクリプションに利点があるということです。Dataflow構成との違いについてまとめます。
※Dataflow構成とは公式にPub/Sub サブスクリプション to BigQueryとしてテンプレートが用意されているようにPub/Subでメッセージを公開してDataflow経由でBigQueryにデータが入る構成を指すこととします。
Dataflowを利用するケース
メッセージをBigQueryテーブルへ保存する前に、前処理を施す必要がある場合はDataflowを使用します。
BigQueryサブスクリプションを利用するケース
メッセージをBigQueryテーブルへ保存する前にメッセージを変換しない場合は、Pub/Subを使用します。
費用比較
利用費用について比較しました。
※2022/08時点の費用となります。
Dataflow構成 | BigQueryサブスクリプション | |
---|---|---|
Pub/Subスループットコスト | $40/TiB(10GiBまで無料アリ) | $50/TiB |
Dataflowコスト | あり | なし |
BigQueryデータ取り込み料金 | $0.012/200MB | なし |
※その他のPub/SubおよびBigQueryの料金は両者共通であると思われるため省略します。
料金比較例
1月に1TiBのデータを前処理なしでそのままBigQueryへ流すケースを想定したものとなります。
Dataflow構成 | BigQueryサブスクリプション | |
---|---|---|
Pub/Subスループットコスト | $40 | $50 |
Dataflowコスト | $12(データ流すだけなので最小構成を想定) | $0 |
BigQueryデータ取り込み料金 | $60 | $0 |
合計 | $112 | $50 |
従来と比較して半分以上にコストを抑えられることがわかりました。
終わりに
従来と比較すると簡単にBigQueryサブスクリプションを構築でき、さらにコストも半分以下に抑えることを可能であることがわかりました。しかし、前処理する機能はなくそのまま流すだけであるため、何らかの処理をデータに施したい場合は従来どおりDataflowを使用すると良いと思います。
参考
No pipelines needed. Stream data with Pub/Sub direct to BigQuery
以下は一部日本語ページには存在しないセクションや文がありますが言語を英語に変更すると表示されます。(2022年08月時点)
Create and use subscriptions