API を有効にする
転送先の Cloud Storage バケットが Datastream と同じプロジェクトにある場合、Datastream API を有効にするだけで十分です。
別のプロジェクト内のバケットに書き込む場合は、Datastream に関連付けられたサービス アカウントに、バケットにアクセスするための権限を付与する必要があります。
- サービス アカウントに使用するメールアドレスを取得します。そのためには、Google Cloud コンソール ホームページでプロジェクト番号を見つけます。サービス アカウントのメールアドレスは、
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 イベントの場合、タイムスタンプはソースでレコードが変更された時間を表します。
- ファイルは、最大ファイルサイズまたは最大タイムアウトのいずれかに達したときにローテーションされます。最大ファイルサイズと最大タイムアウト値は、Datastream API を使用して調整できます。
- また、ソースのスキーマの変更が検出される(たとえば、新しい列が追加される)たびに、ファイルがローテーションされます。
- 同じパス内に同じ時刻のファイルが複数存在する可能性があります。
- データの使用は、Cloud Storage API に応じて行われます。
- Cloud Storage にデータをストリーミングする際のイベントの最大サイズは 100 MB です。
場合によっては、ストリーミングの開始時にバックフィルと CDC が重複し、イベントが重複することがあります。これは、Datastream が現在のデータベース ログファイル(ストリームの開始前に作成されたもの)からの読み取りを開始したときに発生します。このログファイルには、バックフィルによってキャプチャされるイベントも含まれています。これは想定された動作であり、必要に応じてイベント メタデータを使用して重複イベントを排除できます。