同期タスクまたは移行タスクのタスクオブジェクトを構成する際に、フィルター条件を設定して、ソースデータベースからターゲットデータベースへ特定のデータを同期または移行できます。この機能は、シャーディングやデータの一部のみを移行するなどのシナリオで役立ちます。
前提条件
タスクは オブジェクト設定 ステージにあります。このステージに入る手順については、同期ソリューションの概要 および 移行ソリューションの概要 をご参照ください。
注意事項
COLUMN1 IN (SELECT id FROM table1)のような複雑なフィルター文はサポートされていません。ソーステーブルまたはコレクションに、大文字と小文字の違いしかない 2 つの列が含まれている場合、フィルタリングタスクが期待どおりに機能しないことがあります。
ソースデータベースが Tair/Redis の場合、キープレフィックスによってのみデータをフィルターできます。
ソースデータベースが MongoDB の場合、条件付きフィルタリングは完全同期タスクまたは移行タスクでのみサポートされ、増分タスクではサポートされません。
ソースデータベースが Tair/Redis または MongoDB 以外の場合、フィルター条件でクォーテーションマークが必要な場合は、シングルクォーテーションマーク (') を使用します。
フィルター条件の末尾にセミコロン (;) を追加しないでください。タスクが失敗する原因となります。
ソースデータベースでの UPDATE 操作が特定の条件を満たし、変更前イメージの値はフィルター条件を満たすが、変更後イメージの値は満たさない場合、DTS はデフォルトで UPDATE 文を DELETE 文に変換し、ターゲットデータベースでその 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 年以降に作成されたデータのみを同期または移行します。 重要
|
サポートされているタイプ
データベース | サポートされているデータ型 |
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 制約がありますが、対応するソース列がフィルターで除外されているか、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 の移行タスクまたは同期タスクを設定します。 |