BigQuery DataFrames を使用してオンライン データセットとオフライン データセットを同期する
BigQuery で Bigtable を使用すると、リアルタイム分析データベースを構築し、それを機械学習(ML)パイプラインで使用できます。これにより、データの同期を維持し、データ操作とモデル開発(オフライン アクセス)と低レイテンシのアプリケーション サービング(オンライン アクセス)をサポートできます。
リアルタイム分析データベースを構築するには、BigQuery データ処理用のオープンソースの Python ライブラリ群である BigQuery DataFrames を使用します。BigQuery DataFrames を使用すると、BigQuery でモデルを開発してトレーニングし、ML モデルに使用される最新のデータ値のコピーを Bigtable に自動的に複製してオンライン サービングを行うことができます。
このドキュメントでは、bigframes.streaming API
を使用して、BigQuery と Bigtable 間でデータセットを自動的に複製して同期する BigQuery ジョブを作成する方法の概要について説明します。このドキュメントを読む前に、次のドキュメントを理解しておいてください。
BigQuery DataFrames
BigQuery DataFrames を使用すると、BigQuery でモデルを開発してトレーニングし、ML モデルに使用される最新のデータ値のコピーを Bigtable に自動的に複製してオンライン サービングできます。これにより、次のことが可能になります。
- Pandas 互換のインターフェース(
bigframes.pandas
)で、BigQuery データに対して直接データ変換を開発する - scikit-learn に似た API(
bigframes.ML
)を使用してモデルをトレーニングする - 低レイテンシ推論に必要なデータを Bigtable(
bigframes.streaming
)と同期して、ユーザー向けアプリケーションをサポートする
BigFrames StreamingDataFrame
bigframes.streaming.StreamingDataFrame
は、BigQuery DataFrames パッケージの DataFrame 型です。これにより、指定された BigQuery テーブルから Bigtable にデータをストリーミングしてオンライン サービングを行う、継続的に実行されるジョブの生成に使用できる StreamingDataFrame
オブジェクトを作成できます。これは、
BigQuery 連続クエリを生成することで行われます。
BigFrames StreamingDataFrame
は次のことができます。
- 指定された BigQuery テーブルから
StreamingDataFrame
を作成する - 必要に応じて、コンテンツの選択、フィルタ、プレビューなどの追加の Pandas オペレーションを実行します。
- Bigtable へのストリーミング ジョブを作成して管理する
必要なロール
BigQuery ノートブックで BigQuery DataFrames を使用するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼します。
Bigtable テーブルにデータを書き込むために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
始める
BigQuery DataFrames は、オープンソースのパッケージです。 最新バージョンをインストールするには、pip install --upgrade bigframes
を実行します。
最初の BigFrames StreamingDataFrame
を作成し、BigQuery と Bigtable の間でデータを同期するには、次のコード スニペットを実行します。完全なコードサンプルについては、GitHub ノートブック BigFrames StreamingDataFrame をご覧ください。
import bigframes.streaming as bst
bigframes.options._bigquery_options.project = "PROJECT"
sdf = bst.read_gbq_table("birds.penguins_bigtable_streaming")
job = sdf.to_bigtable(instance="BIGTABLE_INSTANCE",
table="TABLE",
app_profile=None,
truncate=True,
overwrite=True,`
auto_create_column_families=True,
bigtable_options={},
job_id=None,
job_id_prefix= "test_streaming_",)
print(job.running())
print(job.error_result)
以下を置き換えます。
- PROJECT: Google Cloud プロジェクトの ID
- BIGTABLE_INSTANCE: 書き込み先のテーブルを含む Bigtable インスタンスの ID
- TABLE: 書き込み先の Bigtable テーブルの ID
ジョブが初期化されると、BigQuery で継続的クエリとして実行され、データ変更が Bigtable にストリーミングされます。
費用
BigQuery BigFrames API の使用に追加料金は発生しませんが、継続的クエリ、Bigtable、BigQuery に使用される基盤となるリソースに対して料金が発生します。
継続的クエリでは、スロットで測定される BigQuery 容量コンピューティングの料金が使用されます。継続的クエリを実行するには、Enterprise エディションまたは Enterprise Plus エディションを使用する予約と、CONTINUOUS
ジョブタイプを使用する予約の割り当てが必要です。
データの取り込みやストレージなど、他の BigQuery リソースの使用量は、BigQuery の料金に記載されている料金で課金されます。
継続的クエリの結果を受け取る Bigtable サービスの使用量は、Bigtable の料金で課金されます。
制限事項
継続的クエリに関連するすべての機能とロケーションの制限は、ストリーミング DataFrame にも適用されます。
次のステップ
- Google Cloudで Feast を使ってみる
- Feast で ML 開発を効率化
- 外部テーブルに保存されている Bigtable データをクエリする。
- BigQuery から Bigtable にデータをエクスポートする。