すべてのプロダクト
Search
ドキュメントセンター

Data Transmission Service:フィルター条件の設定

最終更新日:Feb 07, 2026

データ同期または移行タスクを設定する際、フィルター条件を設定して、要件を満たすソースデータベースのデータのみを同期または移行できます。この機能は、シャーディングや部分的なデータ同期・移行などのシナリオで一般的に使用されます。

前提条件

現在のタスクが オブジェクト設定 フェーズにある必要があります。このフェーズに到達する方法については、「同期ソリューションの概要」および「移行ソリューションの概要」の関連する設定ドキュメントをご参照ください。

注意事項

  • 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 = 1enabled = 0 に変更すると、システムはこれをまず enabled = 1 のレコードを削除し、次に enabled = 0 の新しいレコードを挿入するものとして扱います。削除はフィルター条件を満たすため、レコードは削除されます。その後の挿入は条件を満たさないため、同期されません。enabled = 0enabled = 1 の両方のデータを同期するには、このフィルター条件を削除して同期を再開してください。

操作手順

説明

フィルター条件の設定方法は、ソースデータベースのタイプによって異なります。Tair/RedisMongoDB、およびその他のデータベースタイプの 3 つのケースがあります。

個別の設定

  1. オブジェクト設定 フェーズで、タスクオブジェクトを 選択中のオブジェクト エリアに移動します。

    説明

    ソースデータベースのタイプが MongoDB の場合、コレクション粒度でオブジェクトを選択します。ソースデータベースのタイプが Tair/Redis の場合、Redis DB 粒度でオブジェクトを選択します。他のすべてのソースデータベースタイプでは、テーブル粒度でオブジェクトを選択します。

  2. 対象のオブジェクトを右クリックします。

  3. 表示されるダイアログボックスで、フィルター条件を入力します。

    • ソースデータベースのタイプが Tair/Redis の場合:スキーマの編集 ダイアログボックスで、同期するプレフィックス (ホワイトリスト) または フィルタリングするプレフィックス (ブラックリスト) を入力します。

    • ソースデータベースのタイプが MongoDB の場合:テーブルの編集 ダイアログボックスで、フィルタリング条件 を入力します。

    • ソースデータベースのタイプがその他の場合:テーブルの編集 ダイアログボックスで、フィルタリング条件 を入力します。

    説明

    構文の例については、「ステートメントの例」をご参照ください。

  4. 条件を設定した後、[OK] をクリックします。

  5. プロンプトに従って、残りのタスク設定を完了します。

一括設定

  1. オブジェクト設定 フェーズで、タスクオブジェクトを 選択中のオブジェクト エリアに移動します。

  2. 選択中のオブジェクト エリアの右上隅にある 一括編集 をクリックします。

  3. オブジェクトを選択 ボックスで、プレフィックスフィルター条件を設定するオブジェクトにチェックを入れます。

    説明

    タイプを選択 はデフォルト値のままにします。

  4. 編集タイプの選択 エリアで、フィルタリング条件 タブをクリックします。

    説明

    ソースデータベースのタイプが Tair/Redis の場合、同期 / フィルタリングするプレフィックス タブをクリックします。

  5. 編集モードを選択する を選択します。

    • 追加:既存のフィルター条件を保持し、新しい条件を追加します。

    • 上書き:既存のフィルター条件をクリアし、新しい条件を適用します。

  6. フィルター条件を設定します。

    • ソースデータベースのタイプが Tair/Redis の場合:必要に応じて 同期するプレフィックス または フィルタリングするプレフィックス にチェックを入れ、対応するプレフィックスを入力します。

    • ソースデータベースのタイプが MongoDB の場合:テキストボックスにフィルター条件を入力します。

    • ソースデータベースのタイプがその他の場合:テキストボックスにフィルター条件を入力します。

    説明

    構文の例については、「ステートメントの例」をご参照ください。

  7. 条件を設定した後、[OK] をクリックします。

  8. プロンプトに従って、残りのタスク設定を完了します。

ステートメントの例

移行元データベースタイプが Tair/Redis

フィルタータイプ

ステートメントの例

説明

単一プレフィックスの同期

同期するプレフィックス に入力:dtsnew

選択されたオブジェクト内でキーが dtsnew で始まるデータのみをターゲットに同期します。

単一プレフィックスの除外

フィルタリングするプレフィックス に入力:dtstest

選択されたオブジェクト内でキーが dtstest で始まるデータを除外します。それ以外のすべてのデータをターゲットに同期します。

複数プレフィックスの同期

同期するプレフィックス に入力:dtsnew,dtsold

選択されたオブジェクト内でキーが dtsnew または dtsold で始まるデータのみをターゲットに同期します。

同期と除外の混在

同期するプレフィックス に入力:dts

フィルタリングするプレフィックス に入力:dtstest

選択されたオブジェクト内でキーが dts で始まるが、dtstest で始まらないデータのみをターゲットに同期します。

ソースデータベースのタイプは MongoDB です

フィルタータイプ

ステートメントの例

説明

その他

{"_id":{$gt:"user100844658590795****",$lte:"user101674868045948****"}}

ユーザー ID でフィルターします。ここで、$gt は「より大きい」を意味し、$lte は「以下」を意味します。MongoDB のフィルター条件は、標準 SQL の WHERE 句とは異なる構文を使用します。詳細については、「SQL を MongoDB ステートメントにマッピングする」をご参照ください。

ソースデータベースがその他のタイプの場合

説明
  • フィルタリング条件 は、英字のオペレーター =!=<>、および in をサポートします。

  • フィルター条件の記述について質問がある場合は、まず「よくある質問」をご確認ください。

ステートメントの例

フィルタータイプ

ステートメントの例

説明

id > 100 and id <= 200 or id in (1, 2, 3)

id フィールドが 100 より大きく 200 以下、または id フィールドが 1、2、または 3 のデータのみを同期または移行します。

文字列

address in('hangzhou','shanghai')

address フィールドが hangzhou または shanghai のデータのみを同期または移行します。

時間

create_time>'2020-01-01' または create_time>'2020-01-01 00:00:00'

2020 年以降に作成されたデータのみを同期または移行します。

重要
  • create_time>'2020' は使用しないでください。

  • 時間ベースのデータをフィルタリングする場合、DTS は GMT+8 タイムゾーンを使用します。時間データにタイムゾーン情報が含まれている場合は、フィルター条件の時間を GMT+8 に変換してから フィルタリング条件 に入力してください。

サポートされる型

データベース

サポートされるデータ型

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 の _id 列にマッピングされた値が空です。値が空のレコードをフィルターで除外してください。

よくある質問

  • フィルター条件が有効にならないのはなぜですか。

    フィルター文が無効であるか、タスクが増分 MongoDB タスクである可能性があります。増分 MongoDB タスクはフィルター条件をサポートしていません。

  • 変更されたフィルター条件はどのデータに影響しますか。

    • 未設定のタスクの場合: MongoDB ソースの場合、変更は完全同期フェーズ中にのみ有効になります。その他のソースタイプの場合、完全同期フェーズと増分フェーズの両方で有効になります。

    • 設定済みで実行中のタスクの場合: MongoDB ソースの場合、変更は影響しません (サポートされていません)。その他のソースタイプの場合、増分データのみに影響します。

  • フィルター条件をバッチ設定できますか。

    いいえ。各ターゲットオブジェクトに対して個別にフィルター条件を設定する必要があります。

  • 一致するデータをフィルターし、残りを同期または移行できますか。

    • ソースデータベースの種類は Tair/Redis です:はい。フィルタリングするプレフィックス を入力して、一致するキーを除外します。

    • ソースデータベースが別のタイプの場合: いいえ。代わりに、反対のフィルター条件を定義します。たとえば、age フィールドが 25 と等しいレコードを除外するには、フィルタリング条件age > 25 or age < 25 と入力します。

  • 複数のキーをフィルターするにはどうすればよいですか。

    コンマ (,) で区切ります。

  • 同期するプレフィックスフィルタリングするプレフィックス の両方を入力できますか。

    はい。両方のルールが適用されます。

  • フィルター条件で API を呼び出すことはできますか。

    いいえ。

関連 API

API 操作

説明

ConfigureDtsJob

DTS の移行タスクまたは同期タスクを設定します。Dblist 内の filter パラメーターを設定して、フィルター条件を定義します。