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