このページでは、BigQuery データセットにデータを書き込めるように Datastream を構成する方法について説明します。
必要な権限
Datastream は、変更データ キャプチャ(CDC)の更新に対する BigQuery の組み込みサポートを使用します。Datastream は、BigQuery Storage Write API(gRPC)を使用してストリーミングされた変更を処理して適用することで、BigQuery テーブルを更新します。
API の使用と BigQuery へのデータの取り込みに必要な権限は、 Datastream サービス エージェント ロールに付与されます。
BigQuery を宛先として構成する
BigQuery にストリーミングするように Datastream を構成するには、次の操作を行います。
- プロジェクトで BigQuery API が有効になっていることを確認します。 Google Cloud
- [すべてのスキーマに単一のデータセットを使用する] オプションを使用する場合は、 BigQuery にデータセットを作成します。
- ストリームの宛先データセットを構成します。
- 書き込みモードを構成します。
- ストリームのデータ未更新の上限を 指定します。
宛先データセットを構成する
データセットは、BigQuery テーブルへのアクセスを整理して制御するために使用される最上位のコンテナです。
Datastream を使用して BigQuery の宛先のデータセットを構成する際には、次のいずれかのオプションを選択できます。
スキーマごとのデータセット: データセットは、ソースのスキーマ名に基づいて、指定された BigQuery ロケーションで Datastream によって選択または自動的に作成されます。その結果、ソース内の各スキーマには、BigQuery に対応するデータセットが作成されます。 たとえば、MySQL ソースがあり、このソースのデータベース内に
mydbデータベースとemployeesテーブルがある場合、Datastream は BigQuery にmydbデータセットとemployeesテーブルを作成します。Datastream は、選択したプロジェクトにデータセットを作成します。デフォルトでは、現在のプロジェクトが選択されます。データセットのリストには、選択したプロジェクトで使用可能なデータセットが表示されます。データセットをストリームと同じリージョンに作成する必要はありませんが、費用とパフォーマンスを最適化するために、ストリームのすべてのリソースとデータセットを同じリージョンに配置することをおすすめします。
すべてのスキーマに単一のデータセットを使用する: ストリームの BigQuery データセットを選択します。Datastream は、すべてのデータをこのデータセットにストリーミングします。選択したデータセットの場合、Datastream はすべての テーブルを
<schema>_<table>として作成します。たとえば、MySQL ソースがあり、このソースのデータベース内に
mydbデータベースとemployeesテーブルがある場合、Datastream は選択したデータセットにmydb_employeesテーブルを作成します。データセットは、任意の Google Cloud プロジェクトから選択できます。デフォルトでは、現在のプロジェクトのデータセットが表示されます。選択したプロジェクトに新しいデータセットを作成することもできます。
書き込みモードを構成する
BigQuery にデータを書き込む方法を定義するには、次の 2 つのモードを使用できます。
マージ: これはデフォルトの書き込みモードです。このモードを選択すると、BigQuery にはソース データベースにデータが保存されている方法が反映されます。つまり、Datastream はデータに対するすべての変更を BigQuery に書き込み、BigQuery は既存のデータと変更を統合して、ソーステーブルのレプリカである最終的なテーブルを作成します。マージ モードでは、変更イベントの過去の記録は保持されません。たとえば、行を挿入してから更新した場合、BigQuery には更新されたデータのみが保持されます。その後、ソーステーブルから行を削除すると、BigQuery にはその行のレコードが保持されなくなります。
追加専用: 追加専用の書き込みモードでは、変更ストリーム(
INSERT、UPDATE-INSERT、UPDATE-DELETE、DELETEイベント)として BigQuery にデータを追加できます。データの履歴状態を保持する必要がある場合は、このモードを使用します。追加専用の書き込みモードをより深く理解するために、次のシナリオについて考えてみましょう。
- 初期バックフィル __: 初期バックフィル後、すべてのイベントは同じタイムスタンプ、Universally Unique Identifier(UUID)、変更シーケンス番号を持つ
INSERTタイプのイベントとして BigQuery に書き込まれます。 - 主キーの更新 __: 主キーが変更されると、次の 2 つの行が BigQuery に書き込まれます。
- 元の主キーを持つ
UPDATE-DELETE行 - 新しい主キーを持つ
UPDATE-INSERT行
- 元の主キーを持つ
- 行の更新 __: 行を更新すると、単一の
UPDATE-INSERT行が BigQuery に書き込まれます。 - 行の削除: 行を削除すると、単一の
DELETE行が BigQuery に書き込まれます。
- 初期バックフィル __: 初期バックフィル後、すべてのイベントは同じタイムスタンプ、Universally Unique Identifier(UUID)、変更シーケンス番号を持つ
データの未更新に関する制限事項を指定する
BigQuery は、構成されたデータ未更新の制限に従って、ソースの変更をバックグラウンドで継続的に、またはクエリの実行時に適用します。Datastream が BigQuery で新しいテーブルを作成する場合、テーブルの max_staleness オプションは、ストリームの現在のデータ未更新の上限値に従って設定されます。これにより、テーブルが適用された未更新の上限を超えることはありません。データ未更新の上限は、BigQuery マージジョブの頻度には影響しません。
max_staleness オプション付きで BigQuery テーブルを使用する方法については、テーブルの未更新をご覧ください。