Data Transmission Service (DTS) でデータ移行またはデータ同期タスクのオブジェクトを設定する場合、指定された条件を満たすデータのみをターゲットデータベースに移行または同期するように SQL 条件を指定できます。 この機能は、データベースシャーディング、テーブルパーティショニング、部分データの同期または移行などのシナリオに適用できます。
前提条件
DTS タスクは、オブジェクト設定 ステップで設定されています。 DTS タスクの設定方法の詳細については、データ同期シナリオおよびデータ移行シナリオを参照してください。
注意事項
複雑な SQL 文をフィルター条件として使用することはできません。例:
COLUMN1 IN (SELECT id FROM table1)
。ソーステーブルまたはコレクションの 2 つの列の名前が大文字と小文字のみ異なる場合、データは期待どおりにフィルタリングされない可能性があります。
ソースによって異なります。
Tair/Redis インスタンス: キーのプレフィックスを使用してのみデータをフィルタリングできます。
MongoDB データベース: 完全データ同期または完全データ移行に対してのみフィルター条件を指定できます。 増分データ同期または増分データ移行に対してフィルター条件を指定することはできません。
その他: 必要に応じて、SQL 条件で単一引用符 (') を使用します。
フィルター条件はセミコロン (;) で終わらせることはできません。 終了すると、DTS タスクが失敗する可能性があります。
ソースデータベースで UPDATE 文を実行すると想定します。 以前のイメージ値がフィルター条件を満たし、新しいイメージ値がフィルター条件を満たさない場合、DTS は UPDATE 文を DELETE 文に変換し、ターゲットデータベースで DELETE 文を実行します。
重要ソースデータベースが SQL Server データベースである DTS インスタンスでは、フィルター対象のフィールドがクラスタ化インデックス列である場合にのみ、フィルター条件が有効になります。
手順
Tair/Redis、MongoDB、または別のタイプのデータベースなど、ソースのタイプによって、フィルター条件を設定する方法は異なります。
単一設定
オブジェクト設定 ステップで、同期または移行するオブジェクトを 選択中のオブジェクト セクションに移動します。
説明ソースが Tair/Redis インスタンスの場合、同期または移行するオブジェクトとしてデータベースのみを選択できます。
ソースが MongoDB データベースの場合、同期または移行するオブジェクトとしてコレクションのみを選択できます。
ソースが Tair または Redis インスタンスでも MongoDB データベースでもない場合、同期または移行するオブジェクトとしてテーブルのみを選択できます。
オブジェクトを右クリックします。
表示されるダイアログボックスで、フィルター条件を入力します。
Tair/Redis インスタンス: スキーマの編集 ダイアログボックスで、同期するプレフィックス (ホワイトリスト) または フィルタリングするプレフィックス (ブラックリスト) パラメーターを設定します。
MongoDB データベース: テーブルの編集 ダイアログボックスで、フィルタリング条件 フィールドにフィルター条件を指定します。
その他: テーブルの編集 ダイアログボックスで、フィルタリング条件 フィールドにフィルター条件を指定します。
説明フィルター条件の構文については、条件例を参照してください。
設定が完了したら、[OK] をクリックします。
DTS タスクに必要なその他のパラメーターを設定します。
バッチ設定
オブジェクト設定 ステップで、同期または移行するオブジェクトを 選択中のオブジェクト セクションに移動します。
選択中のオブジェクト セクションの右上隅にある 一括編集 をクリックします。
オブジェクトを選択 セクションで、編集するオブジェクト (プレフィックスフィルター条件を設定する) を選択します。
説明タイプを選択 はデフォルトのままにすることができます。
編集タイプの選択 セクションで、フィルタリング条件 タブをクリックします。
説明ソースが Tair/Redis インスタンスの場合、同期 / フィルタリングするプレフィックス タブをクリックします。
編集モードを選択する を選択します。
追加: 既存のフィルター条件を保持し、新しいフィルター条件を追加します。
上書き: 既存のフィルター条件をクリアし、新しいフィルター条件を使用します。
フィルター条件を設定します。
ソースが Tair/Redis インスタンスの場合: ビジネス要件に基づいて、同期するプレフィックス または フィルタリングするプレフィックス を選択し、対応するプレフィックスを入力します。
ソースが MongoDB データベースの場合: テキストボックスにフィルター条件を入力します。
ソースが別のタイプのデータベースの場合: テキストボックスにフィルター条件を入力します。
説明フィルター条件の構文については、条件例を参照してください。
設定が完了したら、[OK] をクリックします。
DTS タスクに必要なその他のパラメーターを設定します。
条件例
Tair/Redis インスタンス
フィルタータイプ | ステートメント例 | 説明 |
単一プレフィックスの同期 | 同期するプレフィックス パラメーターを | 同期対象のオブジェクトのうち、キーが |
単一プレフィックスの除外 | フィルタリングするプレフィックス パラメーターを | 同期対象のオブジェクトから、キーが |
複数プレフィックスの同期 | 同期するプレフィックス パラメーターを | キーのプレフィックスが |
同期とフィルタリングの併用 | 同期するプレフィックス パラメーターを フィルタリングするプレフィックス パラメーターを | キーのプレフィックスが |
MongoDB データベース
フィルタータイプ | ステートメント例 | 説明 |
その他 |
| ユーザー ID でデータをフィルタリングします。この例では、 |
その他
フィルタリング条件 フィールドでは、SQL 条件で次の演算子がサポートされています:
=
、!=
、<
、>
、in
。フィルター条件の入力時に質問がある場合は、最初に よくある質問 を確認できます。
条件例
フィルタータイプ | 例 | 説明 |
数値 |
|
|
文字列 |
|
|
時間 |
| 2020 年以降に作成されたデータを検索します。 重要
|
次のステップ
フィルター条件を表示する
設定中の DTS タスクの場合: オブジェクトの設定と詳細設定 ステップに戻ります。 選択中のオブジェクト セクションで、同期または移行するオブジェクトを表示し、オブジェクトを右クリックします。 表示されるダイアログボックスで、フィルタリング条件 フィールドの値を表示します。
設定済みで実行中の DTS タスクの場合: 類似タスクの作成機能または同期オブジェクトの変更機能を使用して、オブジェクトの設定と詳細設定 ステップに進むことができます。 選択中のオブジェクト セクションで、同期または移行するオブジェクトを表示し、オブジェクトを右クリックします。 表示されるダイアログボックスで、フィルタリング条件 フィールドの値を表示します (フィルター条件を表示した後、それ以上処理を進めずにタスクを直接キャンセルできます)。 詳細については、「類似タスクを作成する」および「同期対象オブジェクトを変更する」をご参照ください。
フィルター条件を変更する
設定中の DTS タスクの場合: オブジェクトの設定と詳細設定 ステップに戻ります。 選択中のオブジェクト セクションで、同期または移行するオブジェクトを表示し、オブジェクトを右クリックします。 表示されるダイアログボックスで、フィルタリング条件 フィールドの値を変更します。
設定済みで実行中の DTS タスクの場合:
タスクがデータ移行タスクの場合: データ移行タスクでは、フィルター条件の変更はサポートされていません。 タスクを再設定する必要があります。
タスクがデータ同期タスクの場合: 同期オブジェクトの変更機能を使用して、オブジェクトの設定と詳細設定 ステップに移動します。 選択中のオブジェクト セクションで、同期するオブジェクトを表示し、オブジェクトを右クリックします。 表示されるダイアログボックスで、フィルタリング条件 フィールドの値を変更し、プロンプトに従ってタスクに必要なその他のパラメーターを設定します。 詳細については、「同期対象オブジェクトを変更する」をご参照ください。
一般的なエラーとトラブルシューティング
指定したフィルター条件が無効な場合、次のエラーが発生する可能性があります。 エラーメッセージとこのトピックの「次のステップ」セクションに基づいて、報告されたエラーを修正できます。
エラーメッセージの正規表現 ((.*)?
) は変数を示します。
エラーコード | エラーメッセージ | 説明 |
DTS-RETRY-ERR-0070 | データ (.*)? の処理中に (.*)? が失敗しました SQL ステートメントの構文エラー | 同期オブジェクトに設定されているフィルターフィールドの形式が正しくありません。 |
DTS-RETRY-ERR-0145 | 不明な列 (.*)? in | タスクに設定されているフィルター条件のフィールドがソースデータベースに存在しません。 |
DTS-RETRY-ERR-0147 | SQL 構文にエラーがあります | タスクに設定されているフィルター条件のフィールドがソースデータベースに存在しません。 |
DTS-RETRY-ERR-0188 | 列 (.*)? の NULL 値は NOT NULL 制約に違反しています | ターゲットの NOT NULL 制約のある列が除外されているか、ソースの対応する列の値が NULL です。 |
DTS-RETRY-ERR-0276 | (.*)? が指定されている場合、空にすることはできません | Elasticsearch の |
よくある質問
フィルター条件が有効にならないのはなぜですか?
フィルター条件が無効であるか、ソースが MongoDB データベースである増分データ同期タスクまたは増分データ移行タスクに指定されています。
フィルター条件が変更された後、フィルター条件は何に適用されますか?
設定中の DTS タスクの場合: ソースが MongoDB データベースの場合、フィルター条件は完全データ同期または完全データ移行に適用されます。 ソースが別のタイプのデータベースの場合、フィルター条件は完全データ同期と増分データ同期、または完全データ移行と増分データ移行に適用されます。
設定済みで実行中の DTS タスクの場合: ソースが MongoDB データベースの場合、フィルター条件は DTS タスクには適用されません (サポートされていません)。 ソースが別のタイプのデータベースの場合、フィルター条件は増分データ同期または増分データ移行に適用されます。
一度に複数のフィルター条件を指定できますか?
いいえ、複数のオブジェクトに個別にフィルター条件を指定できます。
指定された条件を満たすデータをフィルタリングし、残りのデータをターゲットに同期または移行できますか?
ソースが Tair/Redis インスタンスの場合: はい、フィルタリングするプレフィックス パラメーターを設定して、条件を満たすキーを除外できます。
ソースが別のタイプのデータベースの場合、データをフィルタリングすることはできません。 ビジネス要件を満たすために、他のフィルター条件を使用できます。 たとえば、
age
フィールドの値が 25 であるデータをフィルタリングする場合、フィルタリング条件 フィールドにage > 25 or age < 25
と入力できます。
複数のキーに基づいてデータをフィルタリングする場合、どのようにフィルター条件を指定すればよいですか?
コンマ (,) を使用して複数のキーを区切ることができます。
同期するプレフィックス パラメーターと フィルタリングするプレフィックス パラメーターの両方を設定できますか?
はい。 この場合、[同期するキーのプレフィックス] パラメーターと [除外するキーのプレフィックス] パラメーターで指定されたフィルター条件の両方が有効になります。
API 操作を呼び出してフィルター条件を指定できますか?
サポートされていません。
関連 API 操作
API 操作 | 説明 |
DTS 移行タスクまたは同期タスクを設定します。 |