SnowConvert 를 사용한 Oracle에서 Snowflake로의 변환¶
이 문서는 Oracle SQL 을 Snowflake로 마이그레이션할 때 SnowConvert 가 수행한 주요 변환을 요약한 것입니다. 이 문서는 데이터 타입 매핑, 함수 변환 및 기타 SQL 구조 조정에 대해 다루며 그 과정을 설명하기 위한 예제를 제공합니다. 이 요약은 개략적인 개요를 제공하기 위한 것이므로 가장 포괄적이고 최신 정보는 공식 설명서(SnowConvert)를 참조하십시오.
데이터 타입 매핑:
SnowConvert 는 Oracle 데이터 타입을 Snowflake에 대응하는 데이터 타입으로 매핑하는 작업을 처리합니다. 많은 유형이 직접 대응하는 유형이 있지만 일부 유형은 변환 또는 특수 처리가 필요합니다.
숫자 유형: Oracle의
NUMBER
는 Snowflake의NUMBER
에 매핑됩니다. 일반적으로 전체 자릿수와 스케일은 유지되지만, 변환 후에는 반드시 확인해야 합니다.FLOAT
및BINARY_FLOAT/BINARY_DOUBLE
은 특정 전체 자릿수 및 사용 방법에 따라 조정이 필요할 수 있습니다.예시: Oracle의
NUMBER(10,2)
는 Snowflake의NUMBER(10,2)
가 됩니다.
문자열 유형:
VARCHAR2
,NVARCHAR2
,CHAR
은 Snowflake의VARCHAR
및CHAR
에 매핑됩니다.CLOB
및NCLOB
는 Snowflake의VARCHAR
(크기 제한 있음) 또는TEXT
에 매핑됩니다. LargeCLOBs
는 Snowflake의 VARCHAR 에서 크기 제한으로 인해 대체 처리가 필요할 수 있습니다.예시:
VARCHAR2(255)
은VARCHAR(255)
가 됩니다.CLOB
는VARCHAR(16777216)
이 되거나 다른 대규모 오브젝트 전략이 필요할 수 있습니다.
날짜/시간 유형:
DATE
,TIMESTAMP
,TIMESTAMP WITH TIME ZONE
은 해당 Snowflake 유형에 매핑됩니다. 타임존 처리는 마이그레이션 시 핵심적으로 고려해야 할 사항입니다. Snowflake는TIMESTAMP_NTZ
(타임존 없음) 및TIMESTAMP_TZ
(타임존 포함)을 제공합니다.예시: Oracle의
TIMESTAMP WITH TIME ZONE
은 Snowflake에서는TIMESTAMP_TZ
일 수 있습니다.
LOBs: Oracle
BLOB
및BFILE
(이진 대형 오브젝트)는 특별한 주의가 필요합니다. Snowflake는 이진 데이터에VARBINARY
를 사용합니다. LargeBLOBs
에는 다른 저장소 전략이 필요할 수 있습니다.BFILE
(외부 파일 LOBs)은 Snowflake가 동일한 방식으로 직접 지원하지 않으므로 재설계가 필요할 수 있습니다.예:
BLOB
은VARBINARY
일 수 있습니다.BFILE
은 다른 접근법이 필요할 수 있으며, 클라우드 저장소에 파일을 스테이징한 다음 데이터를 Snowflake로 로딩하는 방식이 필요할 수 있습니다.
기타 유형:
RAW
,ROWID
, 사용자 정의 유형과 같은 기타 데이터 타입에는 특정 매핑 전략이 필요합니다. 자세한 내용은 SnowConvert 설명서를 참조하십시오.
SQL 함수 및 변환 구성:
SnowConvert 는 수많은 SQL 함수와 구조체의 변환을 처리합니다. 대부분은 직접적인 등가 함수가 있는 반면 변환 또는 에뮬레이션이 필요한 함수도 있습니다.
문자열 함수:
SUBSTR
,UPPER
,LOWER
,TRIM
,CONCAT
같은 함수는 일반적으로 직접 변환됩니다. 그러나 일부 함수는 이름이나 인자 순서가 약간 다를 수 있습니다.예시: Oracle의
SUBSTR(string, start, length)
는 Snowflake의SUBSTRING(string, start, length)
와 유사합니다.
숫자 함수:
ABS
,ROUND
,MOD
,CEIL
,FLOOR
같은 함수는 일반적으로 직접 변환됩니다.예:_
ROUND(number, decimals)
은 Oracle과 Snowflake에서 모두 동일합니다.
날짜/시간 함수:
SYSDATE
,SYSTIMESTAMP
,ADD_MONTHS
,EXTRACT
같은 함수에는 Snowflake와 동등한 함수가 있습니다. 그러나 타임존 처리가 다를 수 있습니다.예시: Oracle에서
SYSDATE
는CURRENT_DATE()
이 됩니다.ADD_MONTHS(date, number)
는 둘 다에서 동일합니다.
집계 함수:
SUM
,AVG
,COUNT
,MIN
,MAX
는 일반적으로 직접 변환됩니다.분석 함수(윈도우 함수): Oracle의 분석 함수(예:
ROW_NUMBER
,RANK
,LAG
,LEAD
)는 일반적으로 Snowflake에서 지원되지만 구문이나 동작에 미묘한 차이가 있을 수 있습니다.예시:
ROW_NUMBER() OVER (ORDER BY column)
은 둘 다에서 유사하지만, 항상 에지 케이스가 있는지 확인합니다.
조건부 논리:
CASE
식은 일반적으로 직접 변환됩니다.예시:
CASE WHEN 조건 THEN 결과 ELSE 결과 END
는 둘 다에서 동일합니다.
조인: 내부 조인, 외부 조인 및 교차 조인은 일반적으로 문제 없이 변환됩니다.
DDL 문:
CREATE TABLE
,ALTER TABLE
,DROP TABLE
은 일반적으로 변환됩니다. 그러나 제약 조건, 인덱스 및 기타 테이블 속성은 신중한 검토와 매핑이 필요합니다. Oracle 전용 저장소 절을 조정해야 할 수 있습니다.예: 특정 테이블스페이스 또는 저장소 매개 변수가 있는 Oracle
CREATE TABLE
문은 Snowflake에서 조정이 필요할 수 있습니다.
DML 문:
SELECT
,INSERT
,UPDATE
및DELETE
문은 일반적으로 변환됩니다.저장 프로시저 및 함수(PL/SQL): Oracle의
PL/SQL
코드를 Snowflake의 저장 프로시저 언어(Snowflake Scripting)로 변환해야 합니다. 이는 복잡한 프로세스이며 SnowConvert 에서 도움을 받을 수 있지만 수동 개입이 필요한 경우가 많습니다.트리거: Oracle 트리거는 Snowflake의 작업 및 스트림 기능을 사용하여 Snowflake에서 다시 구현해야 합니다.
패키지: Oracle 패키지는 Snowflake에 직접 대응하는 것이 없습니다. 저장 프로시저와 기능을 사용하여 기능을 다시 설계해야 하는 경우가 많습니다.
시퀀스: Oracle 시퀀스를 Snowflake 시퀀스에 매핑할 수 있습니다.
뷰: Oracle 뷰는 일반적으로 직접 변환됩니다.
더 복잡한 변환의 예:
다음과 같은 Oracle 쿼리가 있다고 가정해 보겠습니다.
SELECT employee_id,
ename,
hire_date,
SALARY,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) as rn
FROM employees
WHERE hire_date > ADD_MONTHS(SYSDATE, -12);
SnowConvert 를 변환하면 Snowflake SQL 로 변환될 가능성이 높습니다.
SELECT employee_id,
ename,
hire_date,
SALARY,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) as rn
FROM employees
WHERE hire_date > ADD_MONTHS(CURRENT_DATE(), -12); -- SYSDATE becomes CURRENT_DATE()
이 경우 코어 로직과 구문은 그대로 유지됩니다. 하지만 다음 사항에 유의해야 합니다.
SYSDATE 가 CURRENT_DATE()로 변환되었습니다. 직원 테이블에 있는 Oracle 고유의 데이터 타입 뉘앙스는 데이터 타입 매핑 규칙에 따라 처리되었을 것입니다. 쿼리 내에 직접적인 Snowflake 동등 함수가 없는 Oracle 전용 함수가 있는 경우 SnowConvert 가 변환을 시도하거나 수동 검토를 위해 플래그(EWIs 또는 FDMs사용)를 지정했을 것입니다. 주요 고려 사항
테스트가 중요합니다. 변환된 코드를 항상 철저하게 테스트하여 기능적 동등성을 보장하십시오. 데이터 타입 동작, 함수의 에지 케이스, 성능 차이에 세심한 주의를 기울이십시오.
타임존 처리: 타임존 변환에는 세심한 계획과 테스트가 필요합니다.
PL/SQL 변환 복잡성: PL/SQL 변환에는 상당한 노력이 필요합니다. SnowConvert 를 사용하면 이 작업의 일부를 자동화할 수 있지만 일반적으로 수동 검토 및 조정이 필요합니다.
EWIs 및 FDMs 검토: SnowConvert 에서 생성된 EWIs (오류, 경고, 정보) 및 FDMs (함수 차이 메시지)를 주의 깊게 검토하십시오. 주의가 필요한 부분을 강조 표시합니다.
성능 튜닝: Snowflake의 성능 특성은 Oracle과 다릅니다. 변환 후에는 쿼리와 데이터 구조를 조정해야 할 수 있습니다.
이러한 변환과 잠재적 차이점을 이해하면 SnowConvert 를 통해 Oracle에서 Snowflake로의 마이그레이션을 더 잘 준비할 수 있습니다.