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