변환 규칙 및 작업 - AWS Database Migration Service

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

변환 규칙 및 작업

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

제한 사항

  • 동일한 객체(스키마, 테이블, 열, 테이블-테이블스페이스 또는 인덱스-테이블스페이스)에 대해 둘 이상의 변환 규칙 작업을 적용할 수 없습니다. 각 변형 작업이 서로 다른 객체에 적용되는 한, 모든 레벨에 여러 변환 규칙 작업을 적용할 수 있습니다.

  • 변환 규칙의 테이블 이름과 열 이름은 대소문자를 구분합니다. 예를 들어, Oracle 또는 Db2 데이터베이스의 테이블 이름과 열 이름을 대문자로 제공해야 합니다.

  • 오른쪽에서 왼쪽으로 쓰는 언어를 사용하는 열 이름에는 변환이 지원되지 않습니다.

  • 이름에 특수 문자(예: #, \, /, -)가 포함된 열에서는 변환을 수행할 수 없습니다.

  • BLOB/CLOB 데이터 형식에 매핑된 열에 대해 지원되는 유일한 변환은 대상에서 열을 삭제하는 것입니다.

  • AWS DMS 두 개의 원본 테이블을 단일 대상 테이블에 복제하는 것은 지원하지 않습니다. AWS DMS 복제 작업의 변환 규칙에 따라 테이블에서 테이블로, 열에서 열로 레코드를 복제합니다. 객체 이름은 중복되지 않도록 고유한 이름이어야 합니다.

    예를 들어, 소스 테이블에는 이름이 ID인 열이 있고 그에 상응하는 대상 테이블에는 id라는 기존 열이 있습니다. 하나의 규칙에서 ADD-COLUMN 문을 사용하여 id라는 새 열을 추가하고 SQLite 문을 사용하여 열을 사용자 지정 값으로 채우는 경우, 이름이 id인 모호한 중복 객체가 생성되며 이 객체는 지원되지 않습니다.

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

파라미터 가능한 값 설명
rule-type transformation 선택 규칙에서 지정한 각 객체에 규칙을 적용하는 값입니다. 달리 지정되지 않는 한, transformation을 사용합니다.
rule-id 숫자 값. 규칙을 식별하기 위한 고유한 숫자 값입니다. 동일한 객체 (스키마, 테이블, 열, 테이블 간 공간 또는 인덱스 테이블 공간) 에 대해 여러 변환 규칙을 지정하는 경우 는 하위 rule-id를 사용하여 변환 규칙을 AWS DMS 적용합니다.
rule-name 영숫자 값입니다. 규칙을 식별하기 위한 고유한 이름입니다.
object-locator 객체는 다음 파라미터를 사용합니다.
  • schema-name – 스키마의 이름입니다. MongoDB 및 Amazon DocumentDB 엔드포인트의 경우, 컬렉션 세트를 보관하는 데이터베이스의 이름입니다.

  • table-name – 테이블, 뷰 또는 컬렉션의 이름입니다.

  • table-tablespace-name – 기존 테이블 테이블스페이스의 이름입니다.

  • index-tablespace-name – 기존 인덱스 테이블스페이스의 이름입니다.

  • column-name – 기존 열의 이름입니다.

  • data-type – 기존 열 데이터 형식의 이름입니다.

규칙이 적용되는 각 스키마, 테이블 또는 뷰, 테이블 테이블스페이스, 인덱스 테이블스페이스 및 열의 이름입니다. 각 object-locator 파라미터(data-type 제외) 값의 전부 또는 일부에 '%'(퍼센트 기호)를 와일드카드로 사용할 수 있습니다. 따라서 다음 항목들을 일치시킬 수 있습니다.

  • 단일 스키마의 단일 테이블 또는 뷰

  • 일부 또는 전체 스키마의 단일 테이블 또는 뷰

  • 단일 스키마의 일부 또는 전체 테이블 및 뷰

  • 일부 또는 전체 스키마의 일부 또는 전체 테이블 및 뷰

  • (하나 또는 둘 이상의) 지정된 테이블, 뷰 및 스키마에 있는 하나 이상의 열

  • 여러 열이 지정된 경우 지정된 data-type이 있는 열. data-type의 가능한 값은 이 표 다음에 설명된 data-type을 참조하십시오.

또한 table-tablespace-name 또는 index-tablespace-name 파라미터는 Oracle 소스 엔드포인트와 일치시키는 데만 사용할 수 있습니다. 단일 규칙에서 table-tablespace-name 또는 index-tablespace-name를 지정할 수 있지만 둘 다 지정할 수는 없습니다. 따라서 다음 항목 중 하나와 일치시킬 수 있습니다.

  • 하나의, 일부 또는 모든 테이블 테이블스페이스

  • 하나의, 일부 또는 모든 인덱스 테이블스페이스

rule-action

add-column, include-column, remove-column

rename

convert-lowercase, convert-uppercase

add-prefix, remove-prefix, replace-prefix

add-suffix, remove-suffix, replace-suffix

define-primary-key

change-data-type

add-before-image-columns

객체에 적용할 변환. 모든 변환 규칙 작업은 대소문자를 구분합니다.

rule-action 파라미터의 add-column 값은 테이블에 열을 추가합니다. 하지만 같은 테이블의 기존 열과 이름이 같은 새 열을 추가할 수는 없습니다.

expressiondata-type 파라미터와 함께 사용할 경우 add-column은 새 열 데이터의 값을 지정합니다.

rule-action에 대한 change-data-type 값은 column 규칙 대상에만 사용할 수 있습니다.

rule-action 파라미터의 include-column 값은 기본적으로 모든 열을 삭제하고 지정된 열을 포함하도록 테이블 모드를 변경합니다. include-column 규칙을 여러 번 호출하면 여러 열이 대상에 포함됩니다.

define-primary-key 규칙의 스키마 또는 테이블 이름에 와일드카드(%)가 있으면 이 규칙을 사용할 수 없습니다.

기존 작업의 경우 remove-column, rename 또는 add-prefix 같은 대상 테이블 스키마를 변경하는 변환 규칙 작업은 작업을 다시 시작할 때까지 적용되지 않습니다. 변환 규칙을 추가한 후 작업을 재개하면 변경된 열에 예기치 않은 동작이 발생할 수 있으며, 여기에는 열 데이터 누락이 포함될 수 있습니다. 변환 규칙이 제대로 작동하려면 작업을 다시 시작해야 합니다.

rule-target schema, table, column, table-tablespace, index-tablespace 변환할 객체의 유형입니다.

table-tablespaceindex-tablespace 값은 Oracle 대상 엔드포인트에만 사용할 수 있습니다.

object-locator: table-tablespace-name 또는 index-tablespace-name 이름의 일부로 지정하는 파라미터의 값을 지정해야 합니다.

value 대상 유형에서 명명 규칙을 따르는 영숫자 값입니다. rename과 같이 입력이 필요한 작업의 새 값입니다.
old-value 대상 유형에서 명명 규칙을 따르는 영숫자 값입니다. replace-prefix와 같이 대체가 필요한 작업의 이전 값입니다.
data-type

typerule-actionadd-column인 경우 사용할 데이터 형식 또는 rule-actionchange-data-type인 경우 대체 데이터 형식입니다.

또는 rule-actionchange-data-type이고, column-name의 값이 "%"이고, 기존 데이터 형식을 식별하기 위한 추가 data-type 파라미터가 object-locator에 포함된 경우 대체 데이터 형식의 이름입니다.

AWS DMS 다음 DMS 데이터 유형에 대한 열 데이터 유형 변환을 지원합니다. "bytes", "date", "time", "datetime", "int1", "int2", "int4", "int8", "numeric", "real4", "real8", "string", "uint1", "uint2", "uint4", "uint8", "wstring", "blob", "nclob", "clob", "boolean", "set", "list" "map", "tuple"

precision – 추가된 열 또는 대체 데이터 형식에 정밀도가 있는 경우 정밀도를 지정하는 정수 값.

scale – 추가된 열 또는 대체 데이터 형식에 척도가 있는 경우 척도를 지정하는 정수 값 또는 날짜 시간 값.

length – 새 열 데이터의 길이(add-column과 함께 사용하는 경우).

다음은 대체할 기존 데이터 형식을 지정하는 data-type 파라미터의 예입니다.

{ "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": "test", "table-name": "table_t", "column-name": "col10" }, "rule-action": "change-data-type", "data-type": { "type": "string", "length": "4092", "scale": "" } } ] }

여기서는 table_t 테이블의 col10 열이 string 데이터 유형으로 변경됩니다.

expression SQLite 구문을 따르는 영숫자 값입니다.

rename-schema로 설정된 rule-action과 함께 사용되는 경우 expression 파라미터는 새 스키마를 지정합니다. rename-table로 설정된 rule-action과 함께 사용되는 경우 expression은 새 테이블을 지정합니다. rename-column으로 설정된 rule-action과 함께 사용되는 경우 expression은 새 열 이름을 지정합니다.

add-column으로 설정된 rule-action과 함께 사용되는 경우 expression은 새 열을 구성하는 데이터를 지정합니다.

이 파라미터에는 표현식만 지원된다는 점에 유의하십시오. 연산자와 명령은 지원되지 않습니다.

변환 규칙에 표현식을 사용하는 방법에 관한 자세한 내용은 변환 규칙 표현식을 사용하여 열 내용 정의 단원을 참조하십시오.

SQLite 표현식에 관한 자세한 내용은 SQLite 함수를 사용하여 표현식 작성 섹션을 참조하세요.

primary-key-def

객체는 다음 파라미터를 사용합니다.

  • name – 테이블 또는 뷰에 대한 새 기본 키 또는 고유 인덱스의 이름입니다.

  • (선택 사항) origin – 정의할 고유 키의 유형: primary-key(기본값) 또는 unique-index.

  • columns – 기본 키 또는 고유 인덱스에서 나타나는 순서대로 열의 이름을 나열하는 문자열 배열입니다.

이 파라미터는 변환된 테이블 또는 뷰에서 고유 키의 이름, 유형 및 콘텐츠를 정의할 수 있습니다. 이는 rule-actiondefine-primary-key로 설정되고 rule-targettable로 설정된 경우에 해당됩니다. 기본적으로 고유 키는 기본 키로 정의됩니다.
before-image-def

객체는 다음 파라미터를 사용합니다.

  • column-prefix – 열 이름 앞에 추가되는 값입니다. 기본 값은 BI_입니다.

  • column-suffix – 열 이름에 뒤에 추가되는 값입니다. 기본값은 비어 있음입니다.

  • column-filter – 다음 값 중 하나가 필요합니다. pk-only(기본값), non-lob(선택 사항) 및 all(선택 사항).

이 파라미터는 이전 이미지 열을 식별하는 명명 규칙을 정의하고 대상에 이전 이미지 열을 만들 수 있는 소스 열을 식별하는 필터를 지정합니다. rule-actionadd-before-image-columns로 설정되고 rule-targetcolumn으로 설정된 경우 이 파라미터를 지정할 수 있습니다.

column-prefixcolumn-suffix를 모두 빈 문자열로 설정하지 마십시오.

column-filter에서 다음을 선택합니다.

  • pk-only – 테이블 기본 키의 일부인 열만 추가합니다.

  • non-lob – LOB 유형이 아닌 열만 추가합니다.

  • all – 이전 이미지 값이 있는 열을 추가합니다.

AWS DMS 대상 엔드포인트에서 이전 이미지 지원에 관한 자세한 내용은 다음을 참조하십시오.

예제

예 스키마 이름 바꾸기

다음은 소스의 스키마 이름 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" } ] }
예 테이블 이름 바꾸기

다음은 소스의 테이블 이름 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" } ] }
예 열 이름 바꾸기

다음은 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" } ] }
예 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" } ] }
예 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" } ] }
예 열 추가

다음 예에서는 스키마 test의 테이블 Actordatetime 열을 추가합니다.

{ "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 } } ] }
예 열 제거

다음은 소스의 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%" } }] }
예 소문자로 변환

다음은 소스의 테이블 이름 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" } }] }
예 대문자로 변환

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

{ "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": "%" } } ] }
예 접두사 추가

다음은 소스의 모든 테이블을 변환하여 대상에서 테이블에 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_" }] }
예 접두사 바꾸기

다음은 소스에서 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_" } ] }
예 접미사 제거

다음은 소스의 모든 테이블을 변환하여 대상의 테이블에서 _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" }] }
예 기본 키 정의

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

{ "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" ] } }] }
예 고유 인덱스 정의

대상 엔드포인트로 마이그레이션된 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" ] } }] }
예 대상 열의 데이터 형식 변경

다음 예제에서는 이름이 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" } }
예 이전 이미지 열 추가

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