Datastream のストリームでは、過去のデータをバックフィルすることや、進行中の変更を宛先にストリーミングすることが可能です。ストリームの作成の一環として、ストリームのソース データベースに関する情報を構成しました。
[履歴データをバックフィル] チェックボックスをオンにした場合、Datastream はデータへの変更に加えて、既存のデータをすべてソースから宛先にストリーミングします。
このチェックボックスをオンにしなかった場合、Datastream はデータへの変更のみをストリーミングします。Datastream ですべてのソースのスナップショットをソースから宛先にストリーミングするには、そのデータを含むオブジェクトのバックフィルを開始する必要があります。オブジェクトは、データベース スキーマ、テーブル、列の形式です。
オブジェクトのバックフィルを開始するもう一つの理由は、データがソースと宛先の間で同期していない場合です。たとえば、ユーザーが誤って宛先のデータを削除してしまうと、そのデータが失われています。この場合、オブジェクトのバックフィルを開始することがリセットの仕組みとして機能します。これは、すべてのデータが一度に宛先へストリーミングされるためです。その結果、ソースと宛先の間でデータが同期します。
オブジェクトのバックフィルを開始した後は、そのバックフィルを停止できます。前の例では、ユーザーがデータベース スキーマを変更し、スキーマまたはデータが破損しています。このスキーマやデータが宛先にストリーミングされないようにするには、オブジェクトのバックフィルを停止します。
また、ロード バランシングのためにオブジェクトのバックフィルを停止することもできます。データストリームは、複数のバックフィルを並行して実行できます。これにより、ソースの負荷が増加する可能性があります。負荷が著しく大きい場合は、オブジェクトのバックフィルを停止してから、オブジェクトのバックフィルを 1 つずつ開始します。
オブジェクトのステータス
オブジェクトのバックフィルの開始と停止のライフサイクルのさまざまなステータスには次のものがあります。
ステータスなし(UI では
-と表示されます): オブジェクトがこのステータスを受け取る理由は次のとおりです。- ストリームはまだ開始していません。
- [バックフィル履歴データ] チェックボックスがオンになっていません(そのため、バックフィルが手動として定義されています)。
- このオブジェクトは、自動的にバックフィルから明示的に除外されています。
- ストリームは、将来のテーブルを含むように構成されています。この場合、新しいテーブルがソースに追加されても、それらのテーブルに対して自動バックフィル タスクは作成されません(通常、新しいテーブルにはバックフィルする履歴データがないため)。
Pending: オブジェクトのバックフィルがまだ開始されていません。Active: オブジェクトのバックフィルが進行中です。Completed: オブジェクトのバックフィルが完了しました。Stopped: オブジェクトのバックフィルが停止しました。オブジェクトのバックフィルが再度開始されると、Datastream はオブジェクトに関連付けられている既存のデータをすべてソースから宛先にストリーミングします。Failed: オブジェクトのバックフィルが失敗したため、バックフィルを再度開始する必要があります。
バックフィルを開始
Google Cloud コンソールの [ストリーム] ページに移動します。
バックフィルを開始するオブジェクトを含むストリームをクリックします。
[オブジェクト] タブをクリックします。
バックフィルを開始する各オブジェクトのチェックボックスをオンにします。
[バックフィルを開始] をクリックします。
オブジェクトを 1 つだけ選択した場合は、ダイアログで [オブジェクトのバックフィルを開始] をクリックします。複数のオブジェクトを選択した場合は、[オブジェクトのバックフィルを開始] をクリックします。
Datastream が選択したオブジェクトのバックフィルを開始し、各オブジェクトのステータスが
PendingからActive、Completedに変わります。オブジェクトのステータスがCompletedの場合、Datastream はオブジェクトのデータをすべて読み取っていますが、データはまだ宛先に読み込まれている可能性があります。
部分的なバックフィルを開始する
完全なバックフィルに加えて、部分的なバックフィルを実行して、移行元から移行先にデータの特定のサブセットを読み込むことができます。これを行うには、SQL WHERE 句をカスタム フィルタとして指定します。
Datastream は、次のソースの部分的なバックフィルをサポートしています。
- SQL Server
- Spanner
- Oracle
- PostgreSQL
部分的なバックフィルを開始するには:
Google Cloud コンソールの [ストリーム] ページに移動します。
バックフィルを開始するオブジェクトを含むストリームをクリックします。
[オブジェクト] タブをクリックします。
バックフィルを開始するオブジェクトを選択します。
[バックフィルを開始] をクリックします。
表示されたパネルで、[カスタム フィルタを有効にする] チェックボックスをオンにします。
SQL の
WHERE句を入力します。例:product_id > 12 AND timestamp = '2025-01-06T22:00:00.00'[バックフィルを開始] をクリックします。
Datastream はフィルタを検証します。検証に失敗すると、エディタの上にエラー メッセージが表示されます。検証に成功すると、Datastream はバックフィル ジョブを開始します。
サポートされているカスタム フィルタの構文
カスタム フィルタを指定する場合、Datastream は SQL WHERE 句構文の基本的なサブセットをサポートします。サポートされている要素は次のとおりです。
- 論理演算子:
AND、OR - 比較演算子:
=、<、>、<=、>=、!= - 条件:
IN、NOT IN、IS NULL、IS NOT NULL - グループ化: 条件グループを定義するための括弧
() 値:
- 文字列: 単一引用符で囲まれたテキスト(例:
'value') - 数値: 整数(
123)、小数(123.45)、負の数(-10)、指数を含む数値(1.2e3)。 - ブール値:
TRUEまたはFALSE(大文字と小文字が区別されるキーワード)。
- 文字列: 単一引用符で囲まれたテキスト(例:
ID:
- 修飾: 列名は、ドットを使用してスキーマまたはテーブルを指定することで完全修飾できます(例:
myColumn、myTable.myColumn、mySchema.myTable.myColumn)。 - 引用符で囲まれていない識別子: 文字、数字、アンダースコアを含めることができ、文字またはアンダースコアで始める必要があります。列名またはテーブル名の大文字と小文字の区別は、ターゲット データベースによって異なります。
- 二重引用符で囲まれた識別子: 二重引用符(
")で囲む必要があります。
- 修飾: 列名は、ドットを使用してスキーマまたはテーブルを指定することで完全修飾できます(例:
部分的なバックフィルの制限事項
特定のステートメント、演算子、キーワードは明示的に禁止されており、使用するとエラーが発生します。たとえば、次のようなものが挙げられます。
--や/* */などのコメント。- 関数(
UPPER(column)、NOW()など)。 - 算術式(
column + 1 > 10など)。 LIKE演算子。LIKEでは、%や_などのワイルドカードはサポートされていません。BETWEEN演算子。代わりに>=と<=を使用してください。- サブクエリ(
WHERE句内の(SELECT ...)など)。 CASEステートメント(CASE WHEN ... ENDなど)。- 列の比較(
column1 = column2など)。比較はリテラルに対して行う必要があります。 DATEとTIMEの特定の型または関数。- 配列または JSON 固有の演算子。
- 明示的なキャスト: 例:
CAST(column AS INT)。
バックフィルを停止
Google Cloud コンソールの [ストリーム] ページに移動します。
バックフィルを停止するオブジェクトを含むストリームをクリックします。
[オブジェクト] タブをクリックします。
バックフィルを停止する各オブジェクトのチェックボックスをオンにします。
[バックフィルを停止] をクリックします。
オブジェクトを 1 つだけ選択した場合は、ダイアログで [オブジェクトのバックフィルを停止] をクリックします。複数のオブジェクトを選択した場合は、[オブジェクトのバックフィルを停止] をクリックします。
Datastream が選択したオブジェクトのバックフィルを停止し、各オブジェクトのステータスが
Stoppedに変わります。オブジェクトがこのステータスになると、オブジェクトのバックフィルは停止しています。オブジェクトのバックフィルが再度開始されると、Datastream はオブジェクトに関連付けられている既存のデータをすべてソースから宛先にストリーミングします。
次のステップ
- ストリームの詳細については、ストリームのライフサイクルをご覧ください。
- ストリームに関する情報を表示する方法については、ストリームを表示するをご覧ください。
- ストリームを変更する方法については、ストリームを変更するをご覧ください。
- ストリームをモニタリングする方法については、ストリームをモニタリングするをご覧ください。
- 失敗したストリームを復元する方法については、ストリームを復元するをご覧ください。