변환 규칙 표현식을 사용하여 열 내용 정의 - AWS 데이터베이스 마이그레이션 서비스

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

변환 규칙 표현식을 사용하여 열 내용 정의

변환 규칙 내에서 표현식을 사용하여 새 열과 기존 열의 내용을 정의할 수 있습니다. 예를 들어, 표현식을 사용하여 열을 추가하거나 소스 테이블 헤더를 대상에 복제할 수 있습니다. 표현식을 사용하여 대상 테이블의 레코드를 소스에서 삽입, 업데이트 또는 삭제된 것으로 플래그를 지정할 수도 있습니다.

표현식을 사용하여 열 추가

변환 규칙에서 표현식을 사용하여 테이블에 열을 추가하려면 add-column 규칙 작업 및 column 규칙 대상을 사용합니다.

다음 예에서는 ITEM 테이블에 새 열을 추가합니다. 50자 길이의 string 데이터 형식을 사용하여 새 열 이름을 FULL_NAME으로 설정합니다. 표현식은 기존의 두 열 FIRST_NAMELAST_NAME의 값을 결합하여 FULL_NAME으로 평가합니다. schema-name, table-name 및 표현식 파라미터는 소스 데이터베이스 테이블의 객체를 참조합니다. Valuedata-type블록은 대상 데이터베이스 테이블의 객체를 참조합니다.

{ "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": "ITEM" }, "value": "FULL_NAME", "expression": "$FIRST_NAME||'_'||$LAST_NAME", "data-type": { "type": "string", "length": 50 } } ] }

표현식을 사용하여 대상 레코드에 플래그 지정

변환 규칙에서 표현식을 사용하여 대상 테이블의 레코드를 소스 테이블에서 삽입, 업데이트 또는 삭제된 것으로 플래그를 지정할 수 있습니다. 표현식은 operation_indicator 함수를 사용하여 레코드에 플래그를 지정합니다. 소스에서 삭제된 레코드는 대상에서 삭제되지 않습니다. 그 대신, 대상 레코드가 소스에서 삭제되었음을 나타내는 사용자 제공 값으로 플래그가 지정됩니다.

참고

operation_indicator 함수는 원본 및 대상 데이터베이스에 기본 키가 있는 테이블에서만 작동합니다.

예를 들어, 다음 변환 규칙은 먼저 대상 테이블에 새 Operation 열을 추가합니다. 그런 다음, 레코드가 소스 테이블에서 삭제될 때마다 D 값으로 열을 업데이트합니다.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "Operation", "expression": "operation_indicator('D', 'U', 'I')", "data-type": { "type": "string", "length": 50 } }

표현식을 사용하여 소스 테이블 헤더 복제

기본적으로 소스 테이블의 헤더는 대상에 복제되지 않습니다. 복제할 헤더를 나타내려면 테이블 열 헤더를 포함하는 표현식과 함께 변환 규칙을 사용합니다.

표현식에서 다음 열 헤더를 사용할 수 있습니다.

헤더 지속적 복제의 값 전체 로드의 값 데이터 유형
AR_H_STREAM_POSITION 소스의 스트림 위치 값. 이 값은 소스 엔드포인트에 따라 시스템 변경 번호(SCN) 또는 로그 시퀀스 번호(LSN)일 수 있습니다. 빈 문자열. STRING
AR_H_TIMESTAMP 변경 시간을 나타내는 타임스탬프. 데이터가 대상에 도달한 현재 시간을 나타내는 타임스탬프입니다. DATETIME(크기 = 7)
AR_H_COMMIT_TIMESTAMP 커밋 시간을 나타내는 타임 스탬프. 현재 시간을 나타내는 타임스탬프. DATETIME(크기 = 7)
AR_H_OPERATION INSERT, UPDATE 또는 DELETE INSERT STRING
AR_H_USER 변경한 사용자에 대해 소스에서 제공되는 사용자 이름, ID 또는 기타 정보.

이 헤더는 SQL Server 및 Oracle(버전 11.2.0.3 이상) 소스 엔드포인트에서만 지원됩니다.

객체에 적용할 변환. 변환 규칙 작업은 대소문자를 구분합니다. STRING
AR_H_CHANGE_SEQ 타임스탬프와 자동 증분 숫자로 구성된 소스 데이터베이스의 고유한 증분 숫자입니다. 값은 소스 데이터베이스 시스템에 따라 달라집니다. 빈 문자열. STRING

다음 예에서는 소스의 스트림 위치 값을 사용하여 대상에 새 열을 추가합니다. SQL Server의 경우, 스트림 위치 값은 소스 엔드포인트의 LSN입니다. Oracle의 경우, 스트림 위치 값은 소스 엔드포인트의 SCN입니다.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "transact_id", "expression": "$AR_H_STREAM_POSITION", "data-type": { "type": "string", "length": 50 } }

다음 예제에서는 원본의 고유한 증분 번호가 있는 새 열을 대상에 추가합니다. 이 값은 작업 수준에서 35자리 고유 숫자를 나타냅니다. 처음 16자리는 타임스탬프의 일부이고, 마지막 19자리는 DBMS에서 증분한 record_id 번호입니다.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "transact_id", "expression": "$AR_H_CHANGE_SEQ", "data-type": { "type": "string", "length": 50 } }

SQLite 함수를 사용하여 표현식 작성

테이블 설정을 사용하여 지정된 작업에서 선택한 테이블 또는 뷰에 적용할 설정을 지정합니다. 테이블 설정 규칙은 선택 사항입니다.

참고

MongoDB 및 DocumentDB 데이터베이스는 테이블과 뷰의 개념 대신 데이터 레코드를 컬렉션에 함께 수집된 문서로 저장합니다. 따라서 MongoDB 또는 DocumentDB 소스에서 마이그레이션할 때는 테이블과 뷰보다는 선택한 컬렉션에 대한 병렬 로드 설정의 범위 세그먼트화 유형을 고려하십시오.

다음은 변환 규칙 표현식을 작성하는 데 사용할 수 있는 문자열 함수를 찾을 수 있습니다.

문자열 함수 설명

lower(x)

lower(x) 함수는 모든 문자가 소문자로 변환된 x 문자열의 복사본을 반환합니다. 기본 내장 lower 함수는 ASCII 문자에만 사용할 수 있습니다.

upper(x)

upper(x) 함수는 모든 문자가 소문자로 변환된 x 문자열의 복사본을 반환합니다. 기본 내장 upper 함수는 ASCII 문자에만 사용할 수 있습니다.

ltrim(x,y)

ltrim(x,y) 함수는 x의 왼쪽에서부터 y에 표시되는 모든 문자를 제거하여 구성된 문자열을 반환합니다. y에 값이 없는 경우, ltrim(x)는 x의 왼쪽에서 공백을 제거합니다.

replace(x,y,z)

replace(x,y,z) 함수는 문자열 x에서 나타나는 모든 문자열 y를 문자열 z로 대체하여 구성된 문자열을 반환합니다.

rtrim(x,y)

rtrim(x,y) 함수는 x의 오른쪽에서부터 y에 표시되는 모든 문자를 제거하여 구성된 문자열을 반환합니다. y에 값이 없는 경우, rtrim(x)는 x의 오른쪽에서 공백을 제거합니다.

substr(x,y,z)

substr(x,y,z) 함수는 입력 문자열의 첫 y번째 문자로 시작하는 하위 문자열 x를 반환합니다. 이 문자열의 길이는 z자입니다.

z를 생략하면 substr(x,y)y번째 문자로 시작하는 x 문자열의 끝까지 모든 문자를 반환합니다. x의 가장 왼쪽 문자는 숫자 1입니다. y가 음수인 경우, 왼쪽이 아닌 오른쪽부터 계수하여 하위 문자열의 첫 번째 문자를 찾습니다. z가 음수인 경우, 첫 y 번째 문자 앞의 abs(z) 문자가 반환됩니다. x가 문자열인 경우, 문자의 인덱스는 실제 UTF-8 문자를 참조합니다. x가 BLOB인 경우, 인덱스는 바이트를 나타냅니다.

trim(x,y)

trim(x,y) 함수는 x의 양쪽에서부터 y에 표시되는 모든 문자를 제거하여 구성된 문자열을 반환합니다. y에 값이 없는 경우, trim(x)x의 오른쪽에서 공백을 제거합니다.

다음은 변환 규칙 표현식을 작성하는 데 사용할 수 있는 LOB 함수를 찾을 수 있습니다.

LOB 함수 설명

hex(x)

hex 함수는 BLOB를 인수로 받고 BLOB 내용의 대문자 16진수 문자열 버전을 반환합니다.

randomblob (N)

randomblob(N) 함수는 의사 랜덤 바이트를 포함하는 N바이트 BLOB를 반환합니다. N이 1보다 작으면 1바이트 임의 BLOB가 반환됩니다.

zeroblob(N)

zeroblob(N) 함수는 N바이트의 0x00으로 구성된 BLOB를 반환합니다.

다음은 변환 규칙 표현식을 작성하는 데 사용할 수 있는 numeric 함수를 찾을 수 있습니다.

Numeric 함수 설명

abs(x)

abs(x) 함수는 숫자 인수 x의 절대값을 반환합니다. x가 NULL인 경우 abs(x) 함수는 NULL을 반환합니다. x가 숫자 값으로 변환할 수 없는 문자열 또는 BLOB인 경우 abs(x) 함수는 0.0을 반환합니다.

random()

random 함수는 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 사이의 의사 랜덤 정수를 반환합니다.

round (x,y)

round (x,y) 함수는 소수점 오른쪽의 y자리 숫자로 반올림된 부동 소수점 값 x를 반환합니다. y에 값이 없으면 0으로 간주됩니다.

max (x,y...)

다중 인수 max 함수는 최대값이 포함된 인수를 반환하며 인수가 NULL이면 NULL을 반환합니다.

max 함수는 인수의 왼쪽에서 오른쪽으로 데이터 정렬 함수를 정의하는 인수를 검색합니다. 검색으로 찾은 인수는 모든 문자열 비교에 해당 데이터 정렬 함수를 사용합니다. 데이터 정렬 함수를 정의하는 인수가 max에 하나도 없다면 BINARY 데이터 정렬 함수가 사용됩니다. max 함수는 인수가 두 개 이상이면 단순 함수이지만 인수가 하나뿐이면 집계 함수로 작동합니다.

min (x,y...)

다중 인수 min 함수는 최소값이 포함된 인수를 반환합니다.

min 함수는 인수의 왼쪽에서 오른쪽으로 데이터 정렬 함수를 정의하는 인수를 검색합니다. 검색으로 찾은 인수는 모든 문자열 비교에 해당 데이터 정렬 함수를 사용합니다. 데이터 정렬 함수를 정의하는 인수가 min에 하나도 없다면 BINARY 데이터 정렬 함수가 사용됩니다. min 함수는 인수가 두 개 이상이면 단순 함수이지만 인수가 하나뿐이면 집계 함수로 작동합니다.

다음은 변환 규칙 표현식을 작성하는 데 사용할 수 있는 NULL 체크 함수를 찾을 수 있습니다.

NULL 체크 함수 설명

coalesce (x,y...)

coalesce 함수는 NULL이 아닌 첫 번째 인수의 복사본을 반환하지만 모든 인수가 NULL이면 NULL을 반환합니다. coalesce 함수에는 인수가 두 개 이상 있습니다.

ifnull(x,y)

ifnull 함수는 NULL이 아닌 첫 번째 인수의 복사본을 반환하지만 두 인수가 모두 NULL이면 NULL을 반환합니다. 이 ifnull 함수에는 정확히 두 개의 인수가 있습니다. ifnull 함수는 두 개의 인수가 있는 coalesce와 같은 함수입니다.

nullif(x,y)

nullif(x,y) 함수는 인수가 다르면 첫 번째 인수의 복사본을 반환하지만 인수가 같으면 NULL을 반환합니다.

nullif(x,y) 함수는 인수의 왼쪽에서 오른쪽으로 데이터 정렬 함수를 정의하는 인수를 검색합니다. 검색으로 찾은 인수는 모든 문자열 비교에 해당 데이터 정렬 함수를 사용합니다. 데이터 정렬 함수를 정의하는 인수가 nullif에 하나도 없다면 BINARY 데이터 정렬 함수가 사용됩니다.

다음은 변환 규칙 표현식을 작성하는 데 사용할 수 있는 날짜 및 시간 함수를 찾을 수 있습니다.

날짜 및 시간 함수 설명

date(timestring, modifier, modifier...)

date 함수는 YYYY-MM-DD 형식으로 날짜를 반환합니다.

time(timestring, modifier, modifier...)

time 함수는 HH:MM:SS 형식으로 시간을 반환합니다.

datetime(timestring, modifier, modifier...)

datetime 함수는 YYYY-MM-DD HH:MM:SS 형식으로 날짜 및 시간을 반환합니다.

julianday(timestring, modifier, modifier...)

julianday 함수는 기원전 4714년 11월 24일 그리니치에서 정오 이후 경과한 일수를 반환합니다.

strftime(format, timestring, modifier, modifier...)

strftime 함수는 다음 변수 중 하나를 사용하여 첫 번째 인수로 지정된 형식 문자열에 따라 날짜를 반환합니다.

%d: 날짜(월, 일)

%H: 00~24시

%f: ** 소수 초(SS.SSS)

%j: 연중 일(001~366)

%J: ** 율리우스력 날수

%m: 01~12개월 차

%M: 00~59분

%s: 1970-01-01 이후 경과 시간(초)

%S: 00~59초

%w: 주중 일(0~6, 일요일 =0)

%W: 연중 주(00~53)

%Y: 0000~9999년도

%%: %

다음은 변환 규칙 표현식을 작성하는 데 사용할 수 있는 해시 함수를 찾을 수 있습니다.

해시 함수 설명

hash_sha256(x)

hash 함수는 (SHA-256 알고리즘을 사용하여) 입력 열에 대한 해시 값을 생성하고 생성된 해시 값의 16진수 값을 반환합니다.

표현식에서 hash 함수를 사용하려면 표현식에 hash_sha256(x) 함수를 추가하고 x를 소스 열 이름으로 바꾸십시오.

CASE 표현식 사용

SQLite CASE 표현식은 조건 목록을 평가하고 결과를 기반으로 표현식을 반환합니다. 다음 구문이 나와 있습니다.

CASE case_expression WHEN when_expression_1 THEN result_1 WHEN when_expression_2 THEN result_2 ... [ ELSE result_else ] END # Or CASE WHEN case_expression THEN result_1 WHEN case_expression THEN result_2 ... [ ELSE result_else ] END

예제:

예 CASE 조건을 사용하여 대상 테이블에 새 문자열 열을 추가하는 방법

예를 들어, 다음 변환 규칙은 먼저 대상 테이블 employee에 새 문자열 열 emp_seniority를 추가합니다. 급여 열에 SQLite round 함수를 사용하고 이 때 급여가 20,000과 같거나 이를 초과하는지 확인하는 CASE 조건을 함께 적용합니다. 값이 맞으면 해당 열에 값 SENIOR이 적용되고 다른 모든 항목은 해당 값 JUNIOR를 갖습니다.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "emp_seniority", "expression": " CASE WHEN round($emp_salary)>=20000 THEN ‘SENIOR’ ELSE ‘JUNIOR’ END", "data-type": { "type": "string", "length": 50 } }
예 대상 테이블에 새 날짜 열 추가

다음 예에서는 대상 테이블 employee에 새 날짜 열 createdate를 추가합니다. SQLite 날짜 함수 datetime을 사용하면 삽입된 각 행에 대해 새로 생성된 테이블에 날짜가 추가됩니다.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "createdate", "expression": "datetime ()", "data-type": { "type": "datetime", "precision": 6 } }
예 대상 테이블에 새 숫자 열 추가

다음 예에서는 대상 테이블 employee에 새 숫자 열 rounded_emp_salary를 추가합니다. SQLite round 함수를 사용하여 반올림된 급여를 추가합니다.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "rounded_emp_salary", "expression": "round($emp_salary)", "data-type": { "type": "int8" } }
예 해시 함수를 사용하여 대상 테이블에 새 문자열 열을 추가하는 방법

다음 예에서는 대상 테이블 employee에 새 문자열 열 hashed_emp_number를 추가합니다. SQLite hash_sha256(x) 함수는 소스 열 emp_number의 대상에 해시된 값을 생성합니다.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "hashed_emp_number", "expression": "hash_sha256($emp_number)", "data-type": { "type": "string", "length": 64 } }

표현식을 사용하여 대상 테이블에 메타데이터 추가

다음 표현식을 사용하여 대상 테이블에 메타데이터 정보를 추가할 수 있습니다.

  • $AR_M_SOURCE_SCHEMA – 소스 스키마의 이름입니다.

  • $AR_M_SOURCE_TABLE_NAME – 소스 테이블의 이름입니다.

  • $AR_M_SOURCE_COLUMN_NAME – 소스 테이블의 열 이름입니다.

  • $AR_M_SOURCE_COLUMN_DATATYPE – 소스 테이블 내 열의 데이터 형식입니다.

예 소스의 스키마 이름을 사용하여 스키마 이름에 대한 열을 추가하는 방법

다음 예에서는 소스의 스키마 이름을 사용하여 대상에 schema_name이라는 새 열을 추가합니다.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value":"schema_name", "expression": "$AR_M_SOURCE_SCHEMA", "data-type": { "type": "string", "length": 50 } }