

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

# ソースフィルタの使用
<a name="CHAP_Tasks.CustomizingTasks.Filters"></a>

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

ソースフィルタは、以下の制約に従う必要があります。
+ 選択ルールには、フィルタを設定しないことも、1 つ以上のフィルタを選択することもできます。
+ すべてのフィルタには 1 つ以上のフィルタ条件を設定できます。
+ 複数のフィルタを使用する場合、フィルタのリストはフィルタ間で AND 演算子を使用しているものとして結合されます。
+ 1 つのフィルタ内で複数のフィルタ条件を使用する場合、フィルタ条件のリストはフィルタ条件間で OR 演算子を使用しているものとして結合されます。
+ フィルタは `rule-action = 'include'` の場合のみ適用されます。
+ フィルタには、列名とフィルタ条件のリストが必要です。フィルター条件には、演算子に応じて、1 つの値、2 つの値、または値なしで関連付けられるフィルター演算子が必要です。
+ 列名、テーブル名、ビュー名およびスキーマ名では大文字と小文字が区別されます。Oracle と Db2 の場合は常に大文字を使用する必要があります。
+ フィルターは正確な名前のテーブルのみをサポートします。フィルターはワイルドカードをサポートしていません。

ソースフィルタの使用には、次の制限が適用されます。
+ フィルタは、右から左に読む言語の列を計算しません。
+ LOB 列にはフィルタを適用しないでください。
+ フィルタは、作成後に更新されていない*[immutable]*(イミュータブル)の列にのみ適用します。ソースフィルターが作成後に更新可能で変更可能な*[mutable]*(ミュータブル) 列に適用された場合、不正な動作が発生する可能性があります。

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

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

ソースフィルターを使用する場合、次の追加の懸念事項が適用されます。
+ フィルタリング定義とプライマリキーに含まれる列を使用してインデックスを作成することをお勧めします。

## JSON 形式のソースフィルタルールの作成
<a name="CHAP_Tasks.CustomizingTasks.Filters.Applying"></a>

選択ルールで JSON `filters` パラメータを使用してソースフィルタを作成できます。`filters` パラメータは、1 つ以上の JSON オブジェクトの配列を指定します。各オブジェクトには、ソースフィルタのタイプ、列の名前、フィルタ条件を指定するパラメータがあります。これらのフィルタ条件には、1 つ以上のフィルタ演算子およびフィルタ値が含まれています。

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


|  パラメータ  |  値  | 
| --- | --- | 
|   `filter-type`   | source | 
|  `column-name`  |  フィルターを適用するソース列の名前を持つパラメータです。名前は、大文字と小文字が区別されます。  | 
|  `filter-conditions`  | filter-operator 値に応じて、1 つまたは複数のオブジェクトでなる配列には filter-operator パラメータおよびゼロか正の関連値パラメータが含まれています。 | 
|  `filter-operator`  |  次のいずれかの値を持つパラメータ: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.Filters.html)  | 
|  `value` または `start-value` と `end-value` または 値なし  |  `filter-operator` と関連付けられた 0 個またはそれ以上の値パラメータ: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.Filters.html)  | 

以下の例では、ソースフィルタを使用する一般的な方法をいくつか示します。

**Example 1 つのフィルタ**  
次のフィルタは、`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": "100"
             }]
         }]
     }]
 }
```

**Example 複数のフィルタ演算子**  
以下のフィルタは、複数のフィルタ演算子を 1 つのデータ列に適用します。このフィルタは、`(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"
            }]
        }]
    }]
}
```

**Example 複数のフィルタ**  
以下のフィルターは、テーブル内の 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"
            }]
        }]
    }]
}
```

**Example 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"
            }]
        }]
    }]
}
```

**Example 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"
            }]
        }]
    }]
}
```

**Example 混合フィルター演算子の使用**  
 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` 値を持つレコードはレプリケートされません。

## 時刻と日付でフィルタリング
<a name="CHAP_Tasks.CustomizingTasks.Filters.Dates"></a>

インポートするデータを選択するときは、フィルター条件の一部として日付または時刻を指定できます。 はフィルタリングに日付形式 YYYY-MM-DD と時刻形式 YYYY-MM-DD HH:MM:SS.SSS AWS DMS を使用します。 AWS DMS 比較関数は SQLite の規則に従います。SQLite のデータ型と日付変換については、SQLite ドキュメントの「[SQLite バージョン 3 のデータ型](https://sqlite.org/datatype3.html)」をご参照ください。

以下の例は、日付をフィルタリングする方法を示しています。これは、`empstartdate >= January 1, 2002` のすべての従業員をターゲットデータベースにレプリケートします。

**Example 1 つの日付フィルタ**  

```
{
    "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"
            }]
        }]
    }]
}
```