

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

# 변환 규칙 및 작업
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations"></a>

변환 작업을 사용하여 선택한 스키마, 테이블 또는 뷰에 적용할 변환을 지정합니다. 변환 규칙은 선택적입니다.

## 제한 사항
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.Limitations"></a>
+ 동일한 객체(스키마, 테이블, 열, 테이블-테이블스페이스 또는 인덱스-테이블스페이스)에 대해 둘 이상의 변환 규칙 작업을 적용할 수 없습니다. 각 변형 작업이 서로 다른 객체에 적용되는 한, 모든 레벨에 여러 변환 규칙 작업을 적용할 수 있습니다. 그러나 동일한 열에 대해 `ADD-COLUMN` 또는 `CHANGE-DATA-TYPE`와 같은 다른 변환을 수행할 수 있는 데이터 마스킹 변환 규칙을 사용할 때는 이 제한이 적용되지 않습니다.
+ 변환 규칙의 테이블 이름과 열 이름은 대소문자를 구분합니다. 예를 들어, Oracle 또는 Db2 데이터베이스의 테이블 이름과 열 이름을 대문자로 제공해야 합니다.
+ 오른쪽에서 왼쪽으로 쓰는 언어를 사용하는 열 이름에는 변환이 지원되지 않습니다.
+ 이름에 특수 문자(예: \$1, \$1, /, -)가 포함된 열에서는 변환을 수행할 수 없습니다.
+ BLOB/CLOB 데이터 형식에 매핑된 열에 대해 지원되는 유일한 변환은 대상에서 열을 삭제하는 것입니다.
+ AWS DMS 는 두 소스 테이블을 단일 대상 테이블로 복제하는 것을 지원하지 않습니다.는 AWS DMS 복제 작업의 변환 규칙에 따라 테이블에서 테이블로, 열에서 열로 레코드를 복제합니다. 객체 이름은 중복되지 않도록 고유한 이름이어야 합니다.

  예를 들어, 소스 테이블에는 이름이 `ID`인 열이 있고 그에 상응하는 대상 테이블에는 `id`라는 기존 열이 있습니다. 하나의 규칙에서 `ADD-COLUMN` 문을 사용하여 `id`라는 새 열을 추가하고 SQLite 문을 사용하여 열을 사용자 지정 값으로 채우는 경우, 이름이 `id`인 모호한 중복 객체가 생성되며 이 객체는 지원되지 않습니다.
+ 변환 규칙을 생성할 때는 예를 들어 `column-name`를 `%`로 설정할 때 선택 규칙이 여러 열을 지정하는 경우에만 `data-type` 파라미터를 사용하는 것이 좋습니다. `data-type`을 사용하여 단일 열을 선택하는 것은 권장하지 않습니다.
+ AWS DMS 는 소스 객체와 대상 객체(테이블)가 동일한 데이터베이스/스키마에 있는 변환 규칙을 지원하지 않습니다. 변환 규칙에서 소스 및 대상과 동일한 테이블을 사용하면 테이블 데이터의 의도하지 않은 변경, 테이블 구조 수정 또는 테이블 삭제를 포함하되 이에 국한되지 않는 예기치 않고 잠재적으로 유해한 결과가 발생할 수 있습니다.

## 값
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.Values"></a>

변환 규칙 유형을 사용하는 테이블 매핑 규칙의 경우, 다음 값을 적용할 수 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.html)

## 예제
<a name="CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.Examples"></a>

**Example 스키마 이름 바꾸기**  
다음은 소스의 스키마 이름 `Test`를 대상의 `Test1`로 변경하는 예입니다.  

```
{

    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-action": "rename",
            "rule-target": "schema",
            "object-locator": {
                "schema-name": "Test"
            },
            "value": "Test1"
        }
    ]
}
```

**Example 테이블 이름 바꾸기**  
다음은 소스의 테이블 이름 `Actor`를 대상의 `Actor1`로 변경하는 예입니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-action": "rename",
            "rule-target": "table",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "Actor"
            },
            "value": "Actor1"
        }
    ]
}
```

**Example 열 이름 바꾸기**  
다음은 `Actor` 테이블에서 소스의 열 이름 `first_name`을 대상의 `fname`으로 변경하는 예입니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
         {
            "rule-type": "transformation",
            "rule-id": "4",
            "rule-name": "4",
            "rule-action": "rename",
            "rule-target": "column",
            "object-locator": {
                "schema-name": "test",
                "table-name": "Actor",
                "column-name" : "first_name"
            },
            "value": "fname"
        }
    ]
}
```

**Example Oracle 테이블 테이블스페이스의 이름 바꾸기**  
다음은 Oracle 소스에서 `Actor`라는 테이블에 대해 `SetSpace`라는 테이블 테이블스페이스의 이름을 Oracle 대상 엔드포인트의 `SceneTblSpace`로 바꾸는 예입니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Play",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-action": "rename",
            "rule-target": "table-tablespace",
            "object-locator": {
                "schema-name": "Play",
                "table-name": "Actor",
                "table-tablespace-name": "SetSpace"
            },
            "value": "SceneTblSpace"
        }
    ]
}
```

**Example Oracle 인덱스 테이블스페이스의 이름 바꾸기**  
다음은 Oracle 소스에서 `Actor`라는 테이블에 대해 `SetISpace`라는 인덱스 테이블스페이스의 이름을 Oracle 대상 엔드포인트의 `SceneIdxSpace`로 바꾸는 예입니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Play",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-action": "rename",
            "rule-target": "table-tablespace",
            "object-locator": {
                "schema-name": "Play",
                "table-name": "Actor",
                "table-tablespace-name": "SetISpace"
            },
            "value": "SceneIdxSpace"
        }
    ]
}
```

**Example 열 추가**  
다음 예에서는 스키마 `test`의 테이블 `Actor`에 `datetime` 열을 추가합니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-action": "add-column",
            "rule-target": "column",
            "object-locator": {
                "schema-name": "test",
                "table-name": "actor"
            },
            "value": "last_updated",
            "data-type": {
                "type": "datetime",
                "precision": 6
            }
        }
    ]
}
```

**Example 열 제거**  
다음은 소스의 `Actor`라는 테이블을 변환하여 `col` 문자로 시작하는 모든 열을 대상에서 제거하는 예입니다.  

```
{
 	"rules": [{
		"rule-type": "selection",
		"rule-id": "1",
		"rule-name": "1",
		"object-locator": {
			"schema-name": "test",
			"table-name": "%"
		},
		"rule-action": "include"
	}, {
		"rule-type": "transformation",
		"rule-id": "2",
		"rule-name": "2",
		"rule-action": "remove-column",
		"rule-target": "column",
		"object-locator": {
			"schema-name": "test",
			"table-name": "Actor",
			"column-name": "col%"
		}
	}]
 }
```

**Example 소문자로 변환**  
다음은 소스의 테이블 이름 `ACTOR`를 대상의 `actor`로 변환하는 예입니다.  

```
{
	"rules": [{
		"rule-type": "selection",
		"rule-id": "1",
		"rule-name": "1",
		"object-locator": {
			"schema-name": "test",
			"table-name": "%"
		},
		"rule-action": "include"
	}, {
		"rule-type": "transformation",
		"rule-id": "2",
		"rule-name": "2",
		"rule-action": "convert-lowercase",
		"rule-target": "table",
		"object-locator": {
			"schema-name": "test",
			"table-name": "ACTOR"
		}
	}]
}
```

**Example 대문자로 변환**  
다음은 모든 테이블의 전체 열과 모든 스키마를 소스의 소문자에서 대상의 대문자로 변환하는 예제입니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-action": "convert-uppercase",
            "rule-target": "column",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%",
                "column-name": "%"
            }
        }
    ]
}
```

**Example 접두사 추가**  
다음은 소스의 모든 테이블을 변환하여 대상에서 테이블에 `DMS_` 접두사를 추가하는 예입니다.  

```
{
 	"rules": [{
		"rule-type": "selection",
		"rule-id": "1",
		"rule-name": "1",
		"object-locator": {
			"schema-name": "test",
			"table-name": "%"
		},
		"rule-action": "include"
	}, {
		"rule-type": "transformation",
		"rule-id": "2",
		"rule-name": "2",
		"rule-action": "add-prefix",
		"rule-target": "table",
		"object-locator": {
			"schema-name": "test",
			"table-name": "%"
		},
		"value": "DMS_"
	}]
 
}
```

**Example 접두사 바꾸기**  
다음은 소스에서 `Pre_` 접두사를 포함하는 모든 열을 변환하여 이 접두사를 대상의 `NewPre_` 접두사로 대체하는 예입니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "transformation",
            "rule-id": "2",
            "rule-name": "2",
            "rule-action": "replace-prefix",
            "rule-target": "column",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%",
                "column-name": "%"
            },
            "value": "NewPre_",
            "old-value": "Pre_"
        }
    ]
}
```

**Example 접미사 제거**  
다음은 소스의 모든 테이블을 변환하여 대상의 테이블에서 `_DMS` 접미사를 제거하는 예입니다.  

```
{
	"rules": [{
		"rule-type": "selection",
		"rule-id": "1",
		"rule-name": "1",
		"object-locator": {
			"schema-name": "test",
			"table-name": "%"
		},
		"rule-action": "include"
	}, {
		"rule-type": "transformation",
		"rule-id": "2",
		"rule-name": "2",
		"rule-action": "remove-suffix",
		"rule-target": "table",
		"object-locator": {
			"schema-name": "test",
			"table-name": "%"
		},
		"value": "_DMS"
	}]
}
```

**Example 프라이머리 키 정의**  
대상 엔드포인트로 마이그레이션된 `ITEM-primary-key` 테이블의 세 열에서 `ITEM`라는 프라이머리 키를 정의하는 예입니다.  

```
{
	"rules": [{
		"rule-type": "selection",
		"rule-id": "1",
		"rule-name": "1",
		"object-locator": {
			"schema-name": "inventory",
			"table-name": "%"
		},
		"rule-action": "include"
	}, {
		"rule-type": "transformation",
		"rule-id": "2",
		"rule-name": "2",
		"rule-action": "define-primary-key",
		"rule-target": "table",
		"object-locator": {
			"schema-name": "inventory",
			"table-name": "ITEM"
		},
		"primary-key-def": {
			"name": "ITEM-primary-key",
			"columns": [
				"ITEM-NAME",
				"BOM-MODEL-NUM",
				"BOM-PART-NUM"
			]
              }
	}]
}
```

**Example 고유 인덱스 정의**  
대상 엔드포인트로 마이그레이션된 `ITEM` 테이블의 세 열에서 `ITEM-unique-idx`라는 고유 인덱스를 정의하는 예입니다.  

```
{
	"rules": [{
		"rule-type": "selection",
		"rule-id": "1",
		"rule-name": "1",
		"object-locator": {
			"schema-name": "inventory",
			"table-name": "%"
		},
		"rule-action": "include"
	}, {
		"rule-type": "transformation",
		"rule-id": "2",
		"rule-name": "2",
		"rule-action": "define-primary-key",
		"rule-target": "table",
		"object-locator": {
			"schema-name": "inventory",
			"table-name": "ITEM"
		},
		"primary-key-def": {
			"name": "ITEM-unique-idx",
			"origin": "unique-index",
			"columns": [
				"ITEM-NAME",
				"BOM-MODEL-NUM",
				"BOM-PART-NUM"
			]
              }
	}]
}
```

**Example 대상 열의 데이터 형식 변경**  
다음 예제에서는 이름이 `SALE_AMOUNT`인 대상 열의 데이터 형식을 기존 데이터 형식에서 `int8`로 변경합니다.  

```
{
    "rule-type": "transformation",
    "rule-id": "1",
    "rule-name": "RuleName 1",
    "rule-action": "change-data-type",
    "rule-target": "column",
    "object-locator": {
        "schema-name": "dbo",
        "table-name": "dms",
        "column-name": "SALE_AMOUNT"
    },
    "data-type": {
        "type": "int8"
    }
}
```

**Example 이전 이미지 열 추가**  
`emp_no`라는 소스 열에 대해 다음 예의 변환 규칙은 대상에 `BI_emp_no`라는 새 열을 추가합니다.  

```
{
	"rules": [{
			"rule-type": "selection",
			"rule-id": "1",
			"rule-name": "1",
			"object-locator": {
				"schema-name": "%",
				"table-name": "%"
			},
			"rule-action": "include"
		},
		{
			"rule-type": "transformation",
			"rule-id": "2",
			"rule-name": "2",
			"rule-target": "column",
			"object-locator": {
				"schema-name": "%",
				"table-name": "employees"
			},
			"rule-action": "add-before-image-columns",
			"before-image-def": {
				"column-prefix": "BI_",
				"column-suffix": "",
				"column-filter": "pk-only"
			}
		}
	]
}
```
여기서 다음 문은 해당 행의 `BI_emp_no` 열을 1로 채웁니다.  

```
UPDATE employees SET emp_no = 3 WHERE BI_emp_no = 1;
```
지원되는 AWS DMS 대상에 CDC 업데이트를 작성할 때 `BI_emp_no` 열을 사용하면 `emp_no` 열에 업데이트된 값이 있는 행을 알 수 있습니다.