ソースフィルターの使用 - AWS Database Migration Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ソースフィルターの使用

ソースフィルターを使用すると、ソースからターゲットに転送されるレコードの数と種類を制限できます。例えば、勤務地が本社の従業員のみをターゲットデータベースに移動するように指定できます。フィルターは、選択ルールの一部です。フィルターはデータの列に適用します。

ソースフィルターは次の制約に従う必要があります。

  • 選択ルールにはフィルターを含めないことも、単数または複数のフィルターを含めることもできます。

  • すべてのフィルターに単数または複数のフィルター条件を指定できます。

  • 複数のフィルターが使用されている場合、フィルターのリストは、フィルター間で AND 演算子を使用しているのと同様に結合されます。

  • 単一のフィルターで複数のフィルターが使用されている場合、フィルター条件のリストは、フィルター間で OR 演算子を使用しているのと同様に結合されます。

  • フィルターは rule-action = 'include' の場合にのみ適用されます。

  • フィルターには列名とフィルター条件のリストが必要です。フィルター条件には、演算子に応じて単一の値、2 つの値、または値なしのいずれかで関連付けられたフィルター演算子が必要です。

  • 列名、テーブル名、ビュー名、スキーマ名は大文字と小文字が区別されます。Oracle と Db2 の場合は常に大文字を使用する必要があります。

  • フィルターは正確な名前のテーブルのみをサポートします。フィルターはワイルドカードをサポートしていません。

ソースフィルターの使用には次の制限が適用されます。

  • フィルターは右から左に記述する言語の列を計算しません。

  • LOB 列にはフィルターを適用できません。

  • フィルターは、作成後に更新されない イミュータブルの列にのみ適用します。作成後に更新される可能性がある可変列にソースフィルターを適用すると、好ましくない結果となる可能性があります。

    例えば、列内の特定の行を除外したり含めたりするフィルターでは、行が後に変更された場合でも、常に指定された行が除外または含まれることになります。列 A で行 1~10 を除外したり、含めたりした後、これらの行が行 11~20 に変更されたとします。この場合、データが変わっても、これらのデータは引き続き除外されたり含まれたりします。

    同様に、フィルターの範囲外の行が後で更新されて (または更新後に削除されて)、フィルターの定義に従って除外または含める必要があるとします。このような場合でも、ターゲットにレプリケートされます。

JSON 形式のソースフィルタールールの作成

ソースフィルターを選択ルールの JSON filters パラメータを使用して作成できます。filters パラメータを使用すると、単数または複数の JSON オブジェクトの配列を指定できます。各オブジェクトには、ソースフィルターのタイプ、列名、フィルター条件を指定するパラメータがあります。このようなフィルター条件には、単数または複数のフィルター演算子とフィルター値があります。

次の表は、filters オブジェクトでソースフィルターを指定するパラメータを説明しています。

パラメータ

filter-type

source

column-name

フィルターを適用するソース列名を持つパラメータ。名前では、大文字と小文字が区別される。

filter-conditions

filter-operator の値に応じて、フィルター演算子パラメータと 0 以上の関連する filter-operator を含む単数または複数のオブジェクトの配列。

filter-operator

次のいずれかの値を持つパラメータ。

  • lte – 単数の値以下

  • ste – 単数の値以下 (lte のエイリアス)

  • gte— 単数の値以上

  • eq— 単数の値と等しい

  • noteq— 単数の値と等しくない

  • between - 2 つの値に等しい、またはそれらの値の間

  • notbetween – 2 つの値に等しくない、またはそれらの値の間ではない

  • nullNULL

  • notnullNULL 値でない

value または

start-valueend-value または

値なし

filter-operator と関連付けられた 0 以上の値のパラメータ:

  • filter-operatorlte または stegteeqnoteq を使用する場合、value を使用して、単一の値パラメータを指定します。

  • filter-operatorbetween または notbetween の場合、start-valueend-value を使用して、2 つの値パラメータを指定する。

  • filter-operatornull または notnull の場合、値パラメータを指定しない。

ソースフィルターを使用する一般的な方法を次のいくつかの例で説明します。

例 単一のフィルター

次のフィルターは、empid >= 100 のすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "gte", "value": "50" },{ "filter-operator": "noteq", "value": "100" }] }] }] }
例 複数のフィルター演算子

次のフィルターは、複数のフィルター演算子を単一のデータ列に適用します。このフィルターは、(empid <= 10) または (empid is between 50 and 75) または (empid >= 100) であるすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "lte", "value": "10" }, { "filter-operator": "between", "start-value": "50", "end-value": "75" }, { "filter-operator": "gte", "value": "100" }] }] }] }
例 複数のフィルター

次のフィルターは、テーブル内の 2 つの列に複数のフィルターを適用します。このフィルターは、(empid <= 100) かつ (dept = tech) であるすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "lte", "value": "100" }] }, { "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "eq", "value": "tech" }] }] }] }
例 NULL 値のフィルタリング

次のフィルターは、空の値でフィルターする方法を説明しています。これは、dept = NULL であるすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "null" }] }] }] }
例 NOT 演算子を使用したフィルタリング

演算子によっては否定形で使用できます。次のフィルターは、(empid is < 50) OR (empid is > 75) のすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "notbetween", "start-value": "50", "end-value": "75" }] }] }] }
例 混合フィルター演算子の使用

AWS DMS バージョン 3.5.0 以降では、包含演算子と負演算子を混ぜて使用できます。

次のフィルターは、(empid != 50) AND (dept is not NULL) のすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "noteq", "value": "50" }] }, { "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "notnull" }] }] }] }

その他のフィルター演算子と同時に null を使用する場合は、次の点に注意します。

  • 同じフィルター内で包括フィルター条件、負のフィルター条件、null フィルター条件を同時に使用すると、NULL 値を持つレコードはレプリケートされません。

  • 同じフィルター内で包含フィルター条件を使用せずに、負のフィルター条件と null フィルター条件を同時に使用すると、データはレプリケートされません。

  • null フィルター条件を明示的に設定せずに負のフィルター条件を使用すると、NULL 値を持つレコードはレプリケートされません。

時刻と日付でのフィルタリング

インポートするデータを選択する際、フィルター条件の一部として日付または期間を指定できます。AWS DMS では、フィルタリングに日付形式 YYYY-MM-DD と時刻形式 YYYY-MM-DD HH:MM:SS を使用します。AWS DMS 比較関数は SQLite のルールに従います。SQLite のデータ型と日付比較については、SQLite ドキュメントの「Datatypes in SQLite version 3」を参照してください。

次のフィルターは、日付でフィルターする方法を説明しています。これは、empstartdate >= January 1, 2002 であるすべての従業員をターゲットデータベースにレプリケートします。

例 単一の日付フィルター
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empstartdate", "filter-conditions": [{ "filter-operator": "gte", "value": "2002-01-01" }] }] }] }