タスクオブジェクトの設定時に SQL 条件を指定することで、条件を満たすデータのみを同期または移行できます。この機能は、定期的なデータ同期、移行、およびテーブル分割のシナリオに適用されます。
前提条件
タスク設定を開始し、オブジェクトの設定と詳細設定 ステップに進んでいること。タスク設定を開始するには、「データ同期タスクの設定 (新しいコンソール)」をご参照ください。
制限事項
複雑なフィルター文はサポートされていません。例:
COLUMN1 IN (SELECT id FROM table1)。OLUMN1 IN (SELECT id FROM table1).
ソーステーブルまたはコレクションに、名前の大文字と小文字のみが異なる 2 つのカラムが含まれている場合、フィルタータスクで期待される結果が得られない場合があります。
o 名前の大文字と小文字のみが異なるカラムの場合、フィルタータスクで期待どおりの結果が得られない場合があります。
ソースデータベースタイプが Tair/Redis の場合、プレフィックスベースのキーフィルタリングのみがサポートされます。
、プレフィックスによるキーのフィルタリングのみがサポートされます。
ソースデータベースタイプが MongoDB の場合、条件付きフィルタリングをサポートするのは完全同期または移行タスクのみです。増分同期または移行はサポートされていません。
同期または移行タスクは、条件付きフィルタリングをサポートします。 増分同期または増分移行はサポートされていません。
ソースデータベースタイプが Tair/Redis および MongoDB 以外のデータベースの場合、フィルター条件に引用符が必要な場合は、シングルクォーテーション (') を使用してください。
833fe828ef">, フィルター条件に引用符が必要な場合は、単一引用符 (') を使用します。
フィルター条件の末尾にセミコロン (;) を追加しないでください。そうしないと、タスクが失敗する可能性があります。
フィルター条件の末尾。そうしないと、タスクが失敗する場合があります。
ソースデータベースで UPDATE 操作が実行され、その操作が特定の条件 (変更前イメージ値はフィルター条件を満たすが、変更後イメージ値は満たさない) を満たす場合、DTS はデフォルトで UPDATE 文を DELETE 文に変換し、ターゲットデータベースで実行します。
重要ソースデータベースが SQL Server の 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 の場合、フィルター条件は有効になりません (サポートされていません)。ソースデータベースが他のタイプの場合、フィルター条件は増分データに対してのみ有効になります。
DTS は、特定の条件を満たすデータを除外し、残りのデータを送信先に同期または移行することをサポートしていますか。
ソースデータベースタイプが Tair/Redis の場合:はい。 フィルタリングするプレフィックス を入力して、条件を満たすキーをフィルターで除外できます。
ソースデータベースが他のタイプの場合: いいえ。要件を満たすために、逆のフィルター条件を設定できます。たとえば、
ageフィールドが 25 のデータを除外する必要がある場合、フィルタリング条件 にage > 25 or age < 25を入力できます。
フィルターするキーが複数ある場合、フィルター条件はどのように入力しますか。
カンマ (,) を区切り文字として使用します。
同期するプレフィックス と フィルタリングするプレフィックス の両方を入力できますか?
はい。キーの同期ルールとフィルタールールの両方が有効になります。
フィルター条件は API 呼び出しをサポートしていますか。
いいえ。
関連 API
API | 説明 |
DTS の移行タスクまたは同期タスクを設定し、 |