Data Mapping Guide¶
개요¶
데이터 매핑은 YAML 파일의 mappings: 구조로 작성하고 CLI의 mapping_rule 파라미터로 적용합니다. mappings=는 현재 CLI 파라미터가 아닙니다.
각 glob pattern은 최소 하나의 일반 파일과 일치해야 합니다.
웹 콘솔의 매핑에서도 YAML 또는 표로 편집을 사용합니다. 표 편집은 Mapping ID·Source·Target·조회조건을 한 번 작성하는 공통 설정과 컬럼별 Source 컬럼·변환 SQL·Target 컬럼 대응표로 나뉩니다. 같은 Source라도 조회조건은 Mapping ID별로 독립적입니다.
작업 범위와 적재 방식
mapping_rule은 작업 범위를 직접 정의하므로schemas,tables,query와 함께 사용할 수 없습니다.- Mapping은 이미 존재하며 metadata가 호환되는 Target에만 적재합니다.
table_action=APPEND|TRUNCATE만 지원합니다.REPLACE|STRUCTURE는 Target DDL 전에 거부됩니다.
1. 현재 YAML 형식¶
mappings:
customer_mapping:
source:
owner: SRC_USER
table_name: CUSTOMER
condition: STATUS = 'ACTIVE'
target:
owner: TGT_USER
table_name: CUSTOMER_COPY
columns:
- source_column: CUSTOMER_ID
target_column: CUSTOMER_ID
- conversion_rule: "UPPER(CUSTOMER_NAME)"
target_column: CUSTOMER_NAME
- conversion_rule: "FIRST_NAME || ' ' || LAST_NAME"
target_column: FULL_NAME
Mapping ID¶
mappings: 아래 key는 mapping ID입니다. 여러 파일 전체에서 고유해야 하며 중복되면 DUPLICATE_MAPPING_ID 오류입니다. 같은 ID의 모든 정의를 거부하며 먼저 읽은 정의를 우선해서 사용하지 않습니다. 무관한 유효 mapping은 계속 검증할 수 있습니다.
Source와 Target routing¶
source.owner와source.table_name은 읽을 Source를 지정합니다.target.owner와target.table_name은 적재할 실제 Target을 지정합니다.source.condition은WHERE없이 사용하는 신뢰된 Oracle SQL 조건식입니다.remap_schema,prefix,suffix,table_exclude는 mapping 대상에 적용되지 않습니다.
즉, mapping 작업의 routing은 YAML에 명시한 qualified Source/Target이 결정합니다. CLI의 source와 target은 접속 문자열이며 owner mapping을 대신하지 않습니다.
Column assignment¶
각 columns 항목에는 다음 규칙이 적용됩니다.
target_column을 지정합니다.source_column또는conversion_rule중 정확히 하나만 지정합니다.- Target column 중복은 허용되지 않습니다.
- YAML key 중복도 허용되지 않습니다.
conversion_rule은 sandbox 표현식이 아니라 Source DB에서 실행되는 신뢰된 Oracle SQL입니다.- 문자열 결합은 Oracle의
||연산자를 사용합니다.
2. 파일 지정과 중복 규칙¶
mapping_rule=/secure/mapping/customer.yaml
mapping_rule="/secure/mapping/hr/*.yaml,/secure/mapping/sales/*.yaml"
목록은 쉼표로 한 번에 지정합니다. 같은 CLI 파라미터를 반복하면 기본 CLI 중복 규칙에 따라 오류가 발생합니다.
datatrans \
source=SRC_USER/password@host:1521/SRCDB \
target=TGT_USER/password@host:1521/TGTDB \
mapping_rule="/secure/mapping/*.yaml" \
table_action=APPEND \
jobname=CUSTOMER_MAPPING
3. Parsing과 preflight¶
아래는 CLI 도움말과 현재 사전 검증 동작을 기준으로 정리한 parsing·preflight 안내입니다. 설치본의 MAPPING_PREFLIGHT_GUIDE.md에서 안내하는 주요 결과도 함께 설명합니다.
Mapping Rule Parsing¶
파일 접근, UTF-8, YAML 구조와 key를 검사합니다.
- 읽기 또는 YAML parsing에 실패한 파일은 제외하고 다른 파일을 계속 검사합니다.
- Parsing 가능한 파일에서는 잘못된 entry만 제외하고 정상 entry를 계속 검사합니다.
- Pattern이 파일과 일치하지 않거나 정상 entry가 하나도 없으면 작업을 중단합니다.
- 중복 YAML key는
MAPPING_YAML, 잘못된 entry 구조는MAPPING_SCHEMA로 보고됩니다. - 중복 YAML key가 있는 파일은 파일 전체를 거부합니다. Target column 중복은 대소문자를 구분하지 않고 해당 entry를 거부합니다.
MAPPING PREFLIGHT¶
Source expression 결과와 실제 Target metadata를 비교합니다. Preflight는 모든 mapping을 계속 검증해 오류를 한 번에 표시하며, 실제 모든 row의 변환 성공까지 보장하지는 않습니다.
표현식 결과 개수, Target 컬럼 존재 여부, 자료형 그룹, NUMBER precision/scale, BYTE/CHAR 길이, 필수 미매핑 컬럼과 가상·identity 컬럼을 검사합니다. 검증 후 메타데이터가 바뀌면 해당 작업의 새 처리 시작을 차단합니다.
| 상태 | 동작 |
|---|---|
PASSED | Warning과 Error 없이 계속 실행합니다. |
PASSED WITH WARNINGS | 상세 Warning을 표시하고 계속 실행합니다. |
PARTIAL | 오류 mapping은 제외하고 검증된 mapping만 실행합니다. |
FAILED | Worker를 시작하지 않습니다. Workers started : 0으로 표시됩니다. |
정상 mapping이 남아 실행되고 파일·entry·metadata 검증 오류가 일부 있었다면 최종 작업 상태는 COMPLETED_WITH_ERRORS입니다. 실행 가능한 mapping이 하나도 없거나 전역 설정·연결·저장소 무결성 오류가 있으면 전체 작업을 실패 처리합니다.
4. Preflight 요약¶
| 항목 | 의미 |
|---|---|
Mapping files | 읽은 mapping 파일 수 |
Rejected files | 접근 또는 parsing 오류로 제외한 파일 수 |
Mapping entries | mapping ID 수 |
Accepted entries | YAML/schema 검증을 통과한 mapping ID 수 |
Rejected entries | YAML/schema 검증에서 제외한 mapping ID 수 |
Source tables | 중복을 제거한 Source table 수 |
Target tables | 중복을 제거한 Target table 수 |
Column assignments | 전체 Target column assignment 수 |
Direct assignments | source_column assignment 수 |
Conversion assignments | conversion_rule assignment 수 |
Validated mappings | Metadata 검증을 통과한 mapping 수 |
Duplicate targets | 같은 Target을 추가로 사용하는 mapping 수 |
Warnings / Errors | 계속 가능한 확인 항목 / 실행 불가 오류 수 |
집계 관계는 다음과 같습니다.
Column assignments = Direct assignments + Conversion assignments
Duplicate targets = Mapping entries - Target tables
Validated mappings <= Mapping entries
5. 같은 Target을 쓰는 Mapping¶
APPEND에서 여러 mapping이 같은 Target을 사용하면 DUPLICATE_TARGET Warning입니다. Row 순서와 중복 제거는 보장하지 않으며 Target constraint 동작을 따릅니다.
TRUNCATE에서 같은 Target을 여러 mapping이 사용하면 DUPLICATE_TARGET Error이며 해당 Target의 mapping 그룹은 실행할 수 없습니다. 반복해서 데이터를 비우는 것을 막기 위한 제한이며 무관한 유효 Target은 계속 처리할 수 있습니다.
6. 오류 코드¶
| 코드 | 의미 |
|---|---|
MAPPING_FILE_ACCESS | 파일 접근 또는 UTF-8 오류 |
MAPPING_YAML | YAML syntax 또는 duplicate key 오류 |
MAPPING_SCHEMA | Mapping entry 구조 또는 필드 오류 |
DUPLICATE_MAPPING_ID | 여러 entry의 mapping ID 중복 |
SOURCE_METADATA | Source expression 또는 metadata 조회 실패 |
TARGET_METADATA | Target metadata 조회 실패 |
OUTPUT_CARDINALITY | Expression 수와 결과 column 수 불일치 |
UNKNOWN_TARGET_COLUMN | Target column이 존재하지 않음 |
INCOMPATIBLE_DATATYPE | Source와 Target datatype이 호환되지 않음 |
NUMBER_PRECISION_SCALE | Target NUMBER precision 또는 scale 초과 |
CHARACTER_LENGTH | Target BYTE 또는 CHAR 길이 초과 |
REQUIRED_TARGET_COLUMN | 필수 Target column이 mapping되지 않음 |
VIRTUAL_COLUMN | Virtual Target column에 직접 mapping |
IDENTITY_COLUMN | Identity Target column에 직접 mapping |
METADATA_CHANGED | Preflight 이후 metadata 변경 |
DUPLICATE_TARGET | TRUNCATE에서 여러 mapping이 같은 Target 사용 |
MAPPING_METADATA | 기타 Mapping metadata 검증 오류 |
7. 안전 체크리스트¶
-
mapping_rule만 사용하고mappings=를 사용하지 않았습니다. -
schemas,tables,query를 함께 지정하지 않았습니다. - Source와 Target owner/table을 YAML에 명시했습니다.
-
APPEND|TRUNCATE와 기존 compatible Target만 사용했습니다. - Mapping ID, YAML key와 Target column이 중복되지 않습니다.
- 각 assignment에
source_column|conversion_rule중 하나만 있습니다. -
conversion_rule과source.condition은 관리자가 검토한 신뢰된 Oracle SQL입니다. -
PARTIAL이면 제외된 mapping과 최종COMPLETED_WITH_ERRORS를 확인합니다.