ストリームのオブジェクトのバックフィルを管理する

Datastream のストリームでは、過去のデータをバックフィルすることや、進行中の変更を宛先にストリーミングすることが可能です。ストリームの作成の一環として、ストリームのソース データベースに関する情報を構成しました。

[履歴データをバックフィル] チェックボックスをオンにした場合、Datastream はデータへの変更に加えて、既存のデータをすべてソースから宛先にストリーミングします。

このチェックボックスをオンにしなかった場合、Datastream はデータへの変更のみをストリーミングします。Datastream ですべてのソースのスナップショットをソースから宛先にストリーミングするには、そのデータを含むオブジェクトのバックフィルを開始する必要があります。オブジェクトは、データベース スキーマ、テーブル、列の形式です。

オブジェクトのバックフィルを開始するもう一つの理由は、データがソースと宛先の間で同期していない場合です。たとえば、ユーザーが誤って宛先のデータを削除してしまうと、そのデータが失われています。この場合、オブジェクトのバックフィルを開始することがリセットの仕組みとして機能します。これは、すべてのデータが一度に宛先へストリーミングされるためです。その結果、ソースと宛先の間でデータが同期します。

オブジェクトのバックフィルを開始した後は、そのバックフィルを停止できます。前の例では、ユーザーがデータベース スキーマを変更し、スキーマまたはデータが破損しています。このスキーマやデータが宛先にストリーミングされないようにするには、オブジェクトのバックフィルを停止します。

また、ロード バランシングのためにオブジェクトのバックフィルを停止することもできます。データストリームは、複数のバックフィルを並行して実行できます。これにより、ソースの負荷が増加する可能性があります。負荷が著しく大きい場合は、オブジェクトのバックフィルを停止してから、オブジェクトのバックフィルを 1 つずつ開始します。

オブジェクトのステータス

オブジェクトのバックフィルの開始と停止のライフサイクルのさまざまなステータスには次のものがあります。

  • ステータスなし(UI では - と表示されます): オブジェクトがこのステータスを受け取る理由は次のとおりです。

    • ストリームはまだ開始していません。
    • [バックフィル履歴データ] チェックボックスがオンになっていません(そのため、バックフィルが手動として定義されています)。
    • このオブジェクトは、自動的にバックフィルから明示的に除外されています。
    • ストリームは、将来のテーブルを含むように構成されています。この場合、新しいテーブルがソースに追加されても、それらのテーブルに対して自動バックフィル タスクは作成されません(通常、新しいテーブルにはバックフィルする履歴データがないため)。
  • Pending: オブジェクトのバックフィルがまだ開始されていません。

  • Active: オブジェクトのバックフィルが進行中です。

  • Completed: オブジェクトのバックフィルが完了しました。

  • Stopped: オブジェクトのバックフィルが停止しました。オブジェクトのバックフィルが再度開始されると、Datastream はオブジェクトに関連付けられている既存のデータをすべてソースから宛先にストリーミングします。

  • Failed: オブジェクトのバックフィルが失敗したため、バックフィルを再度開始する必要があります。

バックフィルを開始

  1. Google Cloud コンソールの [ストリーム] ページに移動します。

    [ストリーム] ページに移動

  2. バックフィルを開始するオブジェクトを含むストリームをクリックします。

  3. [オブジェクト] タブをクリックします。

  4. バックフィルを開始する各オブジェクトのチェックボックスをオンにします。

  5. [バックフィルを開始] をクリックします。

  6. オブジェクトを 1 つだけ選択した場合は、ダイアログで [オブジェクトのバックフィルを開始] をクリックします。複数のオブジェクトを選択した場合は、[オブジェクトのバックフィルを開始] をクリックします。

    Datastream が選択したオブジェクトのバックフィルを開始し、各オブジェクトのステータスが Pending から ActiveCompleted に変わります。オブジェクトのステータスが Completed の場合、Datastream はオブジェクトのデータをすべて読み取っていますが、データはまだ宛先に読み込まれている可能性があります。

部分的なバックフィルを開始する

完全なバックフィルに加えて、部分的なバックフィルを実行して、移行元から移行先にデータの特定のサブセットを読み込むことができます。これを行うには、SQL WHERE 句をカスタム フィルタとして指定します。

Datastream は、次のソースの部分的なバックフィルをサポートしています。

  • SQL Server
  • Spanner
  • Oracle
  • PostgreSQL

部分的なバックフィルを開始するには:

  1. Google Cloud コンソールの [ストリーム] ページに移動します。

    [ストリーム] ページに移動

  2. バックフィルを開始するオブジェクトを含むストリームをクリックします。

  3. [オブジェクト] タブをクリックします。

  4. バックフィルを開始するオブジェクトを選択します。

  5. [バックフィルを開始] をクリックします。

  6. 表示されたパネルで、[カスタム フィルタを有効にする] チェックボックスをオンにします。

  7. SQL の WHERE 句を入力します。例: product_id > 12 AND timestamp = '2025-01-06T22:00:00.00'

  8. [バックフィルを開始] をクリックします。

Datastream はフィルタを検証します。検証に失敗すると、エディタの上にエラー メッセージが表示されます。検証に成功すると、Datastream はバックフィル ジョブを開始します。

サポートされているカスタム フィルタの構文

カスタム フィルタを指定する場合、Datastream は SQL WHERE 句構文の基本的なサブセットをサポートします。サポートされている要素は次のとおりです。

  • 論理演算子: ANDOR
  • 比較演算子: =<><=>=!=
  • 条件: INNOT INIS NULLIS NOT NULL
  • グループ化: 条件グループを定義するための括弧 ()
  • :

    • 文字列: 単一引用符で囲まれたテキスト(例: 'value'
    • 数値: 整数(123)、小数(123.45)、負の数(-10)、指数を含む数値(1.2e3)。
    • ブール値: TRUE または FALSE(大文字と小文字が区別されるキーワード)。
  • ID:

    • 修飾: 列名は、ドットを使用してスキーマまたはテーブルを指定することで完全修飾できます(例: myColumnmyTable.myColumnmySchema.myTable.myColumn)。
    • 引用符で囲まれていない識別子: 文字、数字、アンダースコアを含めることができ、文字またはアンダースコアで始める必要があります。列名またはテーブル名の大文字と小文字の区別は、ターゲット データベースによって異なります。
    • 二重引用符で囲まれた識別子: 二重引用符(")で囲む必要があります。

部分的なバックフィルの制限事項

特定のステートメント、演算子、キーワードは明示的に禁止されており、使用するとエラーが発生します。たとえば、次のようなものが挙げられます。

  • --/* */ などのコメント。
  • 関数(UPPER(column)NOW() など)。
  • 算術式(column + 1 > 10 など)。
  • LIKE 演算子。LIKE では、%_ などのワイルドカードはサポートされていません。
  • BETWEEN 演算子。代わりに >=<= を使用してください。
  • サブクエリ(WHERE 句内の (SELECT ...) など)。
  • CASE ステートメント(CASE WHEN ... END など)。
  • 列の比較(column1 = column2 など)。比較はリテラルに対して行う必要があります。
  • DATETIME の特定の型または関数。
  • 配列または JSON 固有の演算子。
  • 明示的なキャスト: 例: CAST(column AS INT)

バックフィルを停止

  1. Google Cloud コンソールの [ストリーム] ページに移動します。

    [ストリーム] ページに移動

  2. バックフィルを停止するオブジェクトを含むストリームをクリックします。

  3. [オブジェクト] タブをクリックします。

  4. バックフィルを停止する各オブジェクトのチェックボックスをオンにします。

  5. [バックフィルを停止] をクリックします。

  6. オブジェクトを 1 つだけ選択した場合は、ダイアログで [オブジェクトのバックフィルを停止] をクリックします。複数のオブジェクトを選択した場合は、[オブジェクトのバックフィルを停止] をクリックします。

    Datastream が選択したオブジェクトのバックフィルを停止し、各オブジェクトのステータスが Stopped に変わります。

    オブジェクトがこのステータスになると、オブジェクトのバックフィルは停止しています。オブジェクトのバックフィルが再度開始されると、Datastream はオブジェクトに関連付けられている既存のデータをすべてソースから宛先にストリーミングします。

次のステップ