データ同期または移行タスクを設定する際、フィルター条件を設定して、要件を満たすソースデータベースのデータのみを同期または移行できます。この機能は、シャーディングや部分的なデータ同期・移行などのシナリオで一般的に使用されます。
前提条件
現在のタスクが オブジェクト設定 フェーズにある必要があります。このフェーズに到達する方法については、「同期ソリューションの概要」および「移行ソリューションの概要」の関連する設定ドキュメントをご参照ください。
注意事項
COLUMN1 IN (SELECT id FROM table1)のような複雑なフィルターステートメントはサポートされていません。ソーステーブルまたはコレクションに、大文字と小文字のみが異なる 2 つの列名が含まれている場合、フィルターが期待どおりの結果を生成しない可能性があります。
ソースデータベースのタイプが Tair/Redis の場合、キープレフィックスでのみデータをフィルタリングできます。
ソースデータベースのタイプが MongoDB の場合、条件付きフィルタリングは完全同期タスクまたは完全移行タスクでのみサポートされます。増分同期または増分移行中はサポートされません。
ソースデータベースのタイプが Tair/Redis および MongoDB 以外の場合、フィルター条件で引用符が必要な場合はシングルクォーテーション (') を使用してください。
フィルター条件の末尾にセミコロン (;) を追加しないでください。追加するとタスクが失敗する可能性があります。
ソースデータベースで UPDATE 操作が実行され、特定の条件 (変更前イメージの値はフィルター条件を満たすが、変更後イメージの値は満たさない) を満たす場合、DTS はデフォルトで UPDATE 文を DELETE 文に変換し、ターゲットデータベースで実行します。
重要ソースデータベースが SQL Server の DTS インスタンスでは、フィルター対象のフィールドがクラスター化インデックスの一部でない場合、フィルターロジックは有効になりません。
DTS は変更前イメージのフィルタリングを使用します。設定されたフィルターフィールドの値が変更された場合、DTS は変更前の値に基づいてフィルターを適用します。
例:フィルター条件
enabled = 1を設定したとします。DTS はこの条件を満たすデータのみを同期します。データフィールドenabled = 1をenabled = 0に変更すると、システムはこれをまずenabled = 1のレコードを削除し、次にenabled = 0の新しいレコードを挿入するものとして扱います。削除はフィルター条件を満たすため、レコードは削除されます。その後の挿入は条件を満たさないため、同期されません。enabled = 0とenabled = 1の両方のデータを同期するには、このフィルター条件を削除して同期を再開してください。
操作手順
フィルター条件の設定方法は、ソースデータベースのタイプによって異なります。Tair/Redis、MongoDB、およびその他のデータベースタイプの 3 つのケースがあります。
個別の設定
オブジェクト設定 フェーズで、タスクオブジェクトを 選択中のオブジェクト エリアに移動します。
説明ソースデータベースのタイプが MongoDB の場合、コレクション粒度でオブジェクトを選択します。ソースデータベースのタイプが Tair/Redis の場合、Redis DB 粒度でオブジェクトを選択します。他のすべてのソースデータベースタイプでは、テーブル粒度でオブジェクトを選択します。
対象のオブジェクトを右クリックします。
表示されるダイアログボックスで、フィルター条件を入力します。
ソースデータベースのタイプが Tair/Redis の場合:スキーマの編集 ダイアログボックスで、同期するプレフィックス (ホワイトリスト) または フィルタリングするプレフィックス (ブラックリスト) を入力します。
ソースデータベースのタイプが MongoDB の場合:テーブルの編集 ダイアログボックスで、フィルタリング条件 を入力します。
ソースデータベースのタイプがその他の場合:テーブルの編集 ダイアログボックスで、フィルタリング条件 を入力します。
説明構文の例については、「ステートメントの例」をご参照ください。
条件を設定した後、[OK] をクリックします。
プロンプトに従って、残りのタスク設定を完了します。
一括設定
オブジェクト設定 フェーズで、タスクオブジェクトを 選択中のオブジェクト エリアに移動します。
選択中のオブジェクト エリアの右上隅にある 一括編集 をクリックします。
オブジェクトを選択 ボックスで、プレフィックスフィルター条件を設定するオブジェクトにチェックを入れます。
説明タイプを選択 はデフォルト値のままにします。
編集タイプの選択 エリアで、フィルタリング条件 タブをクリックします。
説明ソースデータベースのタイプが Tair/Redis の場合、同期 / フィルタリングするプレフィックス タブをクリックします。
編集モードを選択する を選択します。
追加:既存のフィルター条件を保持し、新しい条件を追加します。
上書き:既存のフィルター条件をクリアし、新しい条件を適用します。
フィルター条件を設定します。
ソースデータベースのタイプが Tair/Redis の場合:必要に応じて 同期するプレフィックス または フィルタリングするプレフィックス にチェックを入れ、対応するプレフィックスを入力します。
ソースデータベースのタイプが MongoDB の場合:テキストボックスにフィルター条件を入力します。
ソースデータベースのタイプがその他の場合:テキストボックスにフィルター条件を入力します。
説明構文の例については、「ステートメントの例」をご参照ください。
条件を設定した後、[OK] をクリックします。
プロンプトに従って、残りのタスク設定を完了します。
ステートメントの例
移行元データベースタイプが Tair/Redis
フィルタータイプ | ステートメントの例 | 説明 |
単一プレフィックスの同期 | 同期するプレフィックス に入力: | 選択されたオブジェクト内でキーが |
単一プレフィックスの除外 | フィルタリングするプレフィックス に入力: | 選択されたオブジェクト内でキーが |
複数プレフィックスの同期 | 同期するプレフィックス に入力: | 選択されたオブジェクト内でキーが |
同期と除外の混在 | 同期するプレフィックス に入力: フィルタリングするプレフィックス に入力: | 選択されたオブジェクト内でキーが |
ソースデータベースのタイプは MongoDB です
フィルタータイプ | ステートメントの例 | 説明 |
その他 |
| ユーザー ID でフィルターします。ここで、 |
ソースデータベースがその他のタイプの場合
フィルタリング条件 は、英字のオペレーター
=、!=、<、>、およびinをサポートします。フィルター条件の記述について質問がある場合は、まず「よくある質問」をご確認ください。
ステートメントの例
フィルタータイプ | ステートメントの例 | 説明 |
値 |
|
|
文字列 |
|
|
時間 |
| 2020 年以降に作成されたデータのみを同期または移行します。 重要
|
サポートされる型
データベース | サポートされるデータ型 |
PostgreSQL | CHAR、BIGINT、SMALLINT、INTEGER、FLOAT4、FLOAT8、VARCHAR、DATE、TIMESTAMP、NUMERIC |
Oracle | VARCHAR2、NVARCHAR2、NUMBER、DATE、ROWID、CHAR、BINARY_FLOAT、BINARY_DOUBLE、CLOB、NCLOB、TIMESTAMP、TIMESTAMP WITH TIME ZONE、UROWID |
MySQL | DECIMAL、INTEGER、BIGINT、FLOAT4、DOUBLE、DATE、TIME、DATETIME、YEAR、VARCHAR |
SQL Server | NCHAR、DATE、TIME、DATETIME2、TINYINT、SMALLINT、INT、SMALLDATETIME、REAL、DECIMAL、DATETIME、FLOAT、BIT、NUMERIC、BIGINT、VARCHAR、CHAR、TIMESTAMP、NVARCHAR、MONEY、SMALLMONEY、UNIQUEIDENTIFIER |
DB2 LUW | SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、FLOAT、DOUBLE、DECFLOAT、CHAR、CHARACTER、VARCHAR、GRAPHIC、NCHAR、VARGRAPHIC、NVARCHAR、DATE、TIME、TIMESTAMP、BLOB、CLOB、DBCLOB、LONG VARG、LONG VARCHAR、LONG VARGRAPHIC、BINARY、VARBINARY、XML |
DB2 AS400 | BIGINT、INTEGER、SMALLINT、DECIMAL、NUMERIC、FLOAT、DECFLOAT、CHAR、VARCHAR、NCHAR、BINARY、DATE、TIME、TIMESTAMP、XML |
次のステップ
フィルター文の表示
現在のタスクが未設定の場合: オブジェクトの設定と詳細設定 フェーズに戻ります。選択中のオブジェクト エリアで同期または移行オブジェクトを展開し、ターゲットオブジェクトを右クリックして フィルタリング条件 を表示します。
現在のタスクが設定済みで実行中の場合: 「類似タスクの作成」または「同期オブジェクトの変更」機能を使用して、オブジェクトの設定と詳細設定 フェーズに入ります。選択中のオブジェクト エリアで同期または移行オブジェクトを展開し、ターゲットオブジェクトを右クリックして フィルタリング条件 を表示します。表示後、タスクをキャンセルします。先に進む必要はありません。詳細については、「類似タスクの作成」および「同期オブジェクトの変更」をご参照ください。
フィルター文の変更
現在のタスクが未設定の場合: オブジェクトの設定と詳細設定 フェーズに戻ります。選択中のオブジェクト エリアで同期または移行オブジェクトを展開し、ターゲットオブジェクトを右クリックして フィルタリング条件 を変更します。
現在のタスクが設定済みで実行中の場合:
移行タスク: 移行タスクではフィルター条件の変更はサポートされていません。タスクを再設定する必要があります。
同期タスク: 「同期オブジェクトの変更」機能を使用して、オブジェクトの設定と詳細設定 フェーズに入ります。選択中のオブジェクト エリアで同期オブジェクトを展開し、ターゲットオブジェクトを右クリックして フィルタリング条件 を変更し、プロンプトに従って残りの設定を完了します。詳細については、「同期オブジェクトの変更」をご参照ください。
よくあるエラー
フィルター条件が正しくない場合、タスクは次のいずれかのエラーで失敗することがあります。エラーメッセージと「次のステップ」のガイダンスを参考にして、問題を解決してください。
エラーメッセージ内の正規表現 ((.*)?) は変数を表します。
エラーコード | エラーメッセージ | 説明 |
DTS-RETRY-ERR-0070 | In process of processing data (.*)? failed (.*)? Syntax error in SQL statement | 同期オブジェクトのフィルターフィールドのフォーマットが無効です。 |
DTS-RETRY-ERR-0145 | Unknown column (.*)? in | フィルター条件で指定されたフィールドがソースデータベースに存在しません。 |
DTS-RETRY-ERR-0147 | You have an error in your SQL syntax | フィルター条件で指定されたフィールドがソースデータベースに存在しません。 |
DTS-RETRY-ERR-0188 | null value in column (.*)? violates not-null constraint | 宛先の非 NULL 制約を持つ列がフィルターされたか、対応する列の値がソースにありません。 |
DTS-RETRY-ERR-0276 | if (.*)? is specified it must not be empty | Elasticsearch の |
よくある質問
フィルター条件が有効にならないのはなぜですか。
フィルター文が無効であるか、タスクが増分 MongoDB タスクである可能性があります。増分 MongoDB タスクはフィルター条件をサポートしていません。
変更されたフィルター条件はどのデータに影響しますか。
未設定のタスクの場合: MongoDB ソースの場合、変更は完全同期フェーズ中にのみ有効になります。その他のソースタイプの場合、完全同期フェーズと増分フェーズの両方で有効になります。
設定済みで実行中のタスクの場合: MongoDB ソースの場合、変更は影響しません (サポートされていません)。その他のソースタイプの場合、増分データのみに影響します。
フィルター条件をバッチ設定できますか。
いいえ。各ターゲットオブジェクトに対して個別にフィルター条件を設定する必要があります。
一致するデータをフィルターし、残りを同期または移行できますか。
ソースデータベースの種類は Tair/Redis です:はい。フィルタリングするプレフィックス を入力して、一致するキーを除外します。
ソースデータベースが別のタイプの場合: いいえ。代わりに、反対のフィルター条件を定義します。たとえば、
ageフィールドが 25 と等しいレコードを除外するには、フィルタリング条件 にage > 25 or age < 25と入力します。
複数のキーをフィルターするにはどうすればよいですか。
コンマ (,) で区切ります。
同期するプレフィックス と フィルタリングするプレフィックス の両方を入力できますか。
はい。両方のルールが適用されます。
フィルター条件で API を呼び出すことはできますか。
いいえ。
関連 API
API 操作 | 説明 |
DTS の移行タスクまたは同期タスクを設定します。 |