

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 소스 필터 사용
<a name="CHAP_Tasks.CustomizingTasks.Filters"></a>

소스 필터를 사용하여 소스에서 대상으로 전송되는 레코드의 수와 유형을 제한할 수 있습니다. 예를 들어, 본사 사업장에서 근무하는 직원만이 대상 데이터베이스로 이동하도록 지정할 수 있습니다. 필터는 선택 규칙의 일부입니다. 데이터 열에서 필터를 적용합니다.

소스 필터는 다음 제약 조건을 준수해야 합니다.
+ 선택 규칙에는 필터가 전혀 없거나 필터가 하나 이상 있을 수 있습니다.
+ 모든 필터에는 하나 이상의 필터 조건이 있을 수 있습니다.
+ 필터를 2개 이상 사용하는 경우, 필터 사이에서 AND 연산자를 사용하는 것처럼 필터 목록이 결합됩니다.
+ 단일 필터 내에서 필터 조건을 2개 이상 사용하면 필터 조건 사이에서 OR 연산자를 사용하는 것처럼 필터 조건 목록이 결합됩니다.
+ `rule-action = 'include'`인 경우 필터만이 적용됩니다.
+ 필터에는 열 이름과 필터 조건 목록이 필요합니다. 필터 조건에는 연산자에 따라 값이 한 개, 두 개 또는 아무 값에도 연결되지 않는 필터 연산자가 있어야 합니다.
+ 열 이름, 테이블 이름, 조회 이름 및 스키마 이름은 대소문자를 구분합니다. Oracle 및 Db2는 항상 대문자를 사용해야 합니다.
+ 필터는 정확한 이름을 가진 테이블만 지원합니다. 필터는 와일드카드를 지원하지 않습니다.

소스 필터 사용 시 다음과 같은 제한 사항이 적용됩니다.
+ 필터는 오른쪽에서 왼쪽으로 쓰는 언어의 열을 계산하지 않습니다.
+ LOB 열에 필터를 적용하지 마세요.
+ 생성 후 업데이트되지 않는 *변경 불가능* 열에만 필터를 적용합니다. 생성 후 업데이트할 수 있는 *변경 가능* 열에 소스 필터가 적용되면 불리한 동작이 발생할 수 있습니다.

  예를 들어, 열의 특정 행을 제외하거나 포함하는 필터는 나중에 행이 변경되더라도 항상 지정된 행을 제외하거나 포함합니다. A열에 1\$110 행을 제외하거나 포함시키고 나중에 11\$120 행이 되도록 변경한다고 가정합니다. 이 경우, 데이터가 더 이상 동일하지 않은 경우에도 계속 제외되거나 포함됩니다.

  마찬가지로 필터 범위 외부의 행이 나중에 업데이트(또는 업데이트 및 삭제)되고, 필터에 의해 정의된 대로 제외되거나 포함되어야 한다고 가정합니다. 이 경우, 대상에서 복제됩니다.

소스 필터를 사용할 때 다음과 같은 추가 문제가 적용됩니다.
+ 필터링 정의에 포함된 열과 프라이머리 키를 사용하여 인덱스를 생성하는 것이 좋습니다.

## JSON에서 소스 필터 규칙 생성
<a name="CHAP_Tasks.CustomizingTasks.Filters.Applying"></a>

선택 규칙의 JSON `filters` 파라미터를 사용하여 소스 필터를 생성할 수 있습니다. `filters` 파라미터는 1개 이상의 JSON 객체 배열을 지정합니다. 각 객체는 소스 필터 유형, 열 이름 및 필터 조건을 지정하는 파라미터를 가지고 있습니다. 이러한 필터 조건에는 하나 이상의 필터 연산자 및 필터 값이 포함됩니다.

다음 표에는 `filters` 객체에서 소스 필터링을 지정하기 위한 파라미터가 나와 있습니다.


|  파라미터  |  값  | 
| --- | --- | 
|   `filter-type`   | source | 
|  `column-name`  |  필터를 적용할 원본 열의 이름이 있는 파라미터입니다. 이름은 대/소문자를 구분합니다.  | 
|  `filter-conditions`  | filter-operator 값에 따라 filter-operator 파라미터와 0개 이상의 관련 값 파라미터를 포함하는 하나 이상의 객체로 구성된 배열입니다. | 
|  `filter-operator`  |  다음 값 중 하나를 가진 파라미터: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.Filters.html)  | 
|  `value` 또는 `start-value` 및 `end-value` 또는 값 없음  |  0개 이상의 값 파라미터가 `filter-operator`과 연관되어 있음: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.Filters.html)  | 

다음 예제에서는 소스 필터를 사용하는 일반적인 방법에 대해 다룹니다.

**Example 단일 필터**  
다음 필터는 `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 여러 필터 연산자**  
다음 필터는 여러 필터 연산자를 단일 데이터 열에 적용합니다. 이 필터는 `(empid <= 10)` OR `(empid is between 50 and 75)` OR `(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)` AND `(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 단일 날짜 필터**  

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