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

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

最終更新日:Nov 04, 2024

data Transmission Service (DTS) でデータ移行タスクまたはデータ同期タスクのオブジェクトを構成する場合、SQL条件を指定して、指定した条件を満たすデータのみを移行先データベースに移行または同期できます。 この機能は、データベースシャーディング、テーブルパーティション分割、部分データの同期または移行などのシナリオに適用できます。

前提条件

DTSタスクは、オブジェクトの設定と詳細設定 ステップで構成されています。 DTSタスクの設定方法の詳細については、「データ同期シナリオの概要」および「データ移行シナリオの概要」のトピックをご参照ください。

使用上の注意

  • 複雑なSQL文をフィルター条件として使用することはできません。 例: COLUMN1 IN (SELECT id FROM table1)

  • ソーステーブルまたはコレクション内の2つの列の名前が同じで、大文字でのみ異なる場合、データが期待どおりにフィルタリングされない場合があります。

  • ソースがTair/Redisインスタンスの場合、キーのプレフィックスを使用してのみデータをフィルタリングできます。

  • ソースがMongoDBデータベースの場合、完全データ同期または完全データ移行にのみフィルター条件を指定できます。 増分データ同期または増分データ移行のフィルター条件は指定できません。

  • ソースがTair/RedisインスタンスまたはMongoDBデータベースでない場合は、必要に応じてSQL条件で単一引用符 (') を使用します。

  • フィルター条件はセミコロン (;) で終わることはできません。 そうしないと、DTSタスクが失敗する可能性があります。

  • ソースデータベースでUPDATEステートメントを実行するとします。 前のイメージ値がフィルター条件を満たし、新しいイメージ値がフィルター条件を満たしていない場合、DTSはUPDATEステートメントをDELETEステートメントに変換し、ターゲットデータベースでDELETEステートメントを実行します。

手順

  1. オブジェクトの設定と詳細設定 ステップで、同期または移行するオブジェクトを 選択中のオブジェクト セクションに移動し、オブジェクトを右クリックします。

    説明

    ソースがMongoDBデータベースの場合、同期または移行するオブジェクトとしてコレクションのみを選択できます。 ソースがTair/Redisインスタンスの場合、同期または移行するオブジェクトとしてデータベースのみを選択できます。 ソースがTairまたはRedisインスタンスまたはMongoDBデータベースでない場合、同期または移行するオブジェクトとしてテーブルのみを選択できます。

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

    SQL条件の構文は、Tair/RedisMongoDB、または別の種類のデータベースなど、ソースの種類によって異なります。

    • ソースがTair/Redisインスタンスの場合:

      スキーマの編集 ダイアログボックスで、同期するプレフィックス または フィルタリングするプレフィックス パラメーターを設定します。

      image.png

      サンプル条件

      フィルタータイプ

      説明

      特定のプレフィックスで識別されるオブジェクトの同期

      dtsnew

      キーのプレフィックスにdtsnewが付いているオブジェクトのみが同期先に同期されます。

      特定のプレフィックスで識別されるオブジェクトを除外する

      dtstest

      キーにdtstestがプレフィックスされているオブジェクト以外のすべてのオブジェクトは、宛先に同期されます。

      複数のプレフィックスで識別されるオブジェクトを同期する

      dtsnew,dtsold

      キーの接頭辞にdtsnewまたはdtsoldが付いているオブジェクトのみが同期先に同期されます。

      混合条件

      同期するプレフィックスパラメーターをdtsに設定します。

      フィルタリングするプレフィックスパラメーターをdtstestに設定します。

      キーのプレフィックスにdtsが付いており、プレフィックスにdtstestが付いていないオブジェクトのみが、宛先に同期されます。

    • ソースがMongoDBデータベースの場合:

      テーブルの編集 ダイアログボックスで、フィルタリング条件 フィールドでフィルター条件を指定します。

      image.png

      サンプル条件

      フィルタータイプ

      説明

      他のタイプ

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

      ユーザーIDでデータをフィルタリングします。 この例では、$gtはより大きいことを示し、$lteはより小さいか等しいことを示します。 MongoDBデータベースでサポートされているSQL条件は、標準のSQL WHEREステートメントとは異なります。 詳細については、MongoDBドキュメントの「クエリおよび投影演算子」および「SQL to MongoDB Mapping Chart」をご参照ください。

    • ソースが別のタイプのデータベースの場合:

      テーブルの編集 ダイアログボックスで、フィルタリング条件 フィールドでフィルター条件を指定します。

      説明
      • では、フィルタリング条件フィールドでは、次の演算子がSQL条件でサポートされています。=,!=,<,>、および.

      • フィルター条件を指定する方法の詳細については、このトピックのFAQセクションを参照してください。

      image.png

      サンプル条件

      フィルタータイプ

      説明

      id > 100およびid <= 200またはid in (1, 2, 3)

      id値が100より大きく200以下のデータ、またはid値が1、2、または3のデータを検索します。

      String

      アドレスin('hangzhou','shanghai')

      address値がhangzhouまたはshanghaiであるデータを検索します。

      時間

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

      2020以降で作成されたデータを検索します。

      重要
      • create_time>'2020' は入力できません。

      • DTSはUTC + 8タイムゾーンを使用します。 タイムデータにタイムゾーン情報が含まれている場合は、フィルター条件の時刻をUTC + 8タイムゾーンの時刻に変換し、フィルタリング条件 フィールドに変換後のフィルター条件を指定する必要があります。

  3. [OK] をクリックします。

  4. DTSタスクに必要なその他のパラメーターを設定します。

次のステップ

  • フィルター条件の表示

    • 設定中のDTSタスクについては、オブジェクトの設定と詳細設定 の手順に戻ります。 選択中のオブジェクト セクションで、同期または移行するオブジェクトを表示し、オブジェクトを右クリックします。 表示されるダイアログボックスで、フィルタリング条件 フィールドの値を表示します。

    • 設定済みで実行中のDTSタスクの場合は、[DTSタスクの操作] 列で [タスクの複製] または [オブジェクトの再選択] をクリックして、オブジェクトの設定と詳細設定 の手順に進みます。 選択中のオブジェクト セクションで、同期または移行するオブジェクトを表示し、オブジェクトを右クリックします。 表示されるダイアログボックスで、フィルタリング条件 フィールドの値を表示します。 フィルター条件を表示したら、直接タスクをキャンセルできます。 詳細については、「類似インスタンスの作成」および「同期するオブジェクトの変更」をご参照ください。

  • フィルター条件の変更

    • 設定中のDTSタスクについては、オブジェクトの設定と詳細設定 の手順に戻ります。 選択中のオブジェクト セクションで、同期または移行するオブジェクトを表示し、オブジェクトを右クリックします。 表示されるダイアログボックスで、フィルタリング条件 フィールドの値を変更します。

    • 設定され、実行中のDTSタスクの場合:

      • タスクがデータ移行タスクの場合、タスクのフィルター条件を変更することはできません。 データ移行タスクを再設定する必要があります。

      • タスクがデータ同期タスクの場合は、DTSタスクの [操作] 列で [オブジェクトの再選択] をクリックし、オブジェクトの設定と詳細設定 の手順に進みます。 選択中のオブジェクト セクションで、同期するオブジェクトを表示し、オブジェクトを右クリックします。 表示されるダイアログボックスで、フィルタリング条件 フィールドの値を変更します。 次に、プロンプトに従ってタスクに必要な他のパラメーターを設定します。 詳細については、「同期するオブジェクトの変更」をご参照ください。

一般的なエラーとトラブルシューティング

入力したフィルター条件が無効な場合、次のエラーが発生する可能性があります。 レポートされたエラーは、エラーメッセージとこのトピックの [次の操作] セクションに基づいて修正できます。

説明

エラーメッセージの正規表現 ((.*)?) は変数を示します。

エラーコード

エラーメッセージ

説明

DTS-RETRY-ERR-0070

データ処理中 (.*)? 失敗 (.*)? SQL文の構文エラー

同期するオブジェクトをフィルタリングするために使用されるフィールドは、無効な形式で指定されます。

DTS-RETRY-ERR-0145

不明な列 (.*)? in

タスクに設定されたフィルター条件のフィールドは、ソースに存在しません。

DTS-RETRY-ERR-0147

SQL構文にエラーがある

タスクに設定されたフィルター条件のフィールドは、ソースに存在しません。

DTS-RETRY-ERR-0188

列のnull値 (.*)? 違反していない-null制約

宛先にNOT NULL制約がある列が除外されるか、ソースの対応する列の値がNULLになります。

DTS-RETRY-ERR-0276

if (.*)? は空であってはならない

ターゲットElasticsearchクラスターの _id列にマップされた値は空です。

よくある質問

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

    フィルター条件が無効であるか、ソースがMongoDBデータベースである増分データ同期タスクまたは増分データ移行タスクに対して指定されています。

  • フィルター条件が変更された後、フィルター条件は何に適用されますか?

    • 設定中のDTSタスクの場合: ソースがMongoDBデータベースの場合、フィルター条件は完全データ同期または完全データ移行に適用されます。 ソースが別のタイプのデータベースの場合、フィルター条件は完全データ同期と増分データ同期、または完全データ移行と増分データ移行に適用されます。

    • 設定済みで実行中のDTSタスクの場合: ソースがMongoDBデータベースの場合、フィルター条件はDTSタスクには適用されません。 ソースが別のタイプのデータベースの場合、フィルター条件は増分データ同期または増分データ移行に適用されます。

  • 一度に複数のフィルター条件を指定できますか?

    いいえ、複数のオブジェクトに対して個別にフィルター条件を指定できます。

  • 指定された条件を満たすデータを除外し、残りのデータを同期または移行先に移行できますか?

    • はい。 ソースがTair/Redisインスタンスの場合、フィルタリングするプレフィックス パラメーターを設定して、データをフィルターアウトできます。

    • ソースが別のタイプのデータベースである場合、データを除外することはできません。 他のフィルター条件を使用して、ビジネス要件を満たすことができます。 たとえば、ageフィールドの値が25であるデータを除外する場合、フィルタリング条件フィールドにage > 25またはage < 25と入力できます。

  • 複数のキーに基づいてデータをフィルタリングする場合、フィルタ条件を指定するにはどうすればよいですか?

    コンマ (,) を使用して複数のキーを区切ることができます。

  • 同期するプレフィックスフィルタリングするプレフィックスの両方のパラメーターを設定できますか?

    はい。 この場合、同期するキーのプレフィックスとフィルタアウトするキーのプレフィックスの両方のパラメータで指定されたフィルタ条件が有効になります。

  • API操作を呼び出してフィルター条件を指定できますか?

    いいえ、APIを呼び出してフィルター条件を指定することはできません。

関連する API 操作

API 操作

説明

ConfigureDtsJob

データ移行または同期タスクを設定します。 Dblistリクエストパラメーターのfilterフィールドを設定して、フィルター条件を指定できます。