をご覧ください。
概要
Datastream のストリームの転送先は Cloud Storage です。
このセクションの内容:
- このストリームの転送先を設定する
- 転送先バケットと接頭辞を指定して、転送先でデータを書き込む場所を決定する
- 転送先に書き込まれたデータに関連する動作
設定
転送先の Cloud Storage バケットが Datastream と同じプロジェクトにある場合、Datastream API を有効にするだけで十分です。
別のプロジェクト内のバケットに書き込む場合は、Datastream に関連付けられたサービス アカウントに、バケットにアクセスするための権限を付与する必要があります。
- サービス アカウントに使用するメールアドレスを取得します。そのためには、Cloud Console ホームページでプロジェクト番号を見つけます。サービス アカウントのメールアドレスは、
service-[project_number]@gcp-sa-datastream.iam.gserviceaccount.com
になります。 - 転送先バケットに書き込むために必要な権限(通常は
roles/storage.objectViewer
、roles/storage.objectCreator
、roles/storage.legacyBucketReader
権限)を、このメールアドレスに付与します。
転送先バケットと接頭辞を指定する
ストリーム構成にプロジェクト名、バケット名、オプションのファイル接頭辞を指定し、データの書き込み場所を決定します。
書き込み動作
- 特定のストリームのデータは、指定されたバケットまたはファイルの接頭辞(
[bucket]/[prefix]/[object name]/yyyy/mm/dd/hh/mm/[filename(idempotent)]
)に書き込まれます。 - データベース ソースのパス内のオブジェクト名は、スキーマ名の後にテーブル名が続きます(アンダースコア「_」で区切られます)。
- パスのタイムスタンプ(hh/mm)は、イベント メタデータのソースのタイムスタンプです。
- バックフィル イベントの場合、タイムスタンプはバックフィル タスクが開始された時間を表します(通常はストリームが開始された時点、またはバックフィルが手動でトリガーされた時点)。
- CDC イベントの場合、タイムスタンプはソースでレコードが変更された時間を表します。
- ファイルは、最大ファイルサイズまたは最大タイムアウトのいずれか早いほうに達するとローテーションされます。
- また、ソースのスキーマの変更が検出される(たとえば、新しい列が追加される)たびに、ファイルがローテーションされます。
- 同じパス内に同じ時刻のファイルが複数存在する可能性があります。
- データの使用は、Cloud Storage API に応じて行われます。
場合によっては、最初にストリームの実行が開始されると、バックフィルと CDC が重複して、多くの場合、重複するイベントが発生します。これは、Datastream が現在のデータベースのログファイル(ストリームの開始前に作成されたファイル)から読み取りを開始し、このログファイルにバックフィルによってキャプチャされるイベントが含まれる場合に発生します。これは予期される動作で、必要に応じてイベント メタデータを使用して、重複するイベントを排除できます。