SnowConvert 를 사용한 Oracle에서 Snowflake로의 변환

이 문서는 Oracle SQL 을 Snowflake로 마이그레이션할 때 SnowConvert 가 수행한 주요 변환을 요약한 것입니다. 이 문서는 데이터 타입 매핑, 함수 변환 및 기타 SQL 구조 조정에 대해 다루며 그 과정을 설명하기 위한 예제를 제공합니다. 이 요약은 개략적인 개요를 제공하기 위한 것이므로 가장 포괄적이고 최신 정보는 공식 설명서(SnowConvert)를 참조하십시오.

데이터 타입 매핑:

SnowConvert 는 Oracle 데이터 타입을 Snowflake에 대응하는 데이터 타입으로 매핑하는 작업을 처리합니다. 많은 유형이 직접 대응하는 유형이 있지만 일부 유형은 변환 또는 특수 처리가 필요합니다.

  • 숫자 유형: Oracle의 NUMBER 는 Snowflake의 NUMBER 에 매핑됩니다. 일반적으로 전체 자릿수와 스케일은 유지되지만, 변환 후에는 반드시 확인해야 합니다. FLOATBINARY_FLOAT/BINARY_DOUBLE 은 특정 전체 자릿수 및 사용 방법에 따라 조정이 필요할 수 있습니다.

    • 예시: Oracle의 NUMBER(10,2) 는 Snowflake의 NUMBER(10,2) 가 됩니다.

  • 문자열 유형: VARCHAR2, NVARCHAR2, CHAR 은 Snowflake의 VARCHARCHAR 에 매핑됩니다. CLOBNCLOB 는 Snowflake의 VARCHAR (크기 제한 있음) 또는 TEXT 에 매핑됩니다. Large CLOBs 는 Snowflake의 VARCHAR 에서 크기 제한으로 인해 대체 처리가 필요할 수 있습니다.

    • 예시: VARCHAR2(255)VARCHAR(255) 가 됩니다. CLOBVARCHAR(16777216) 이 되거나 다른 대규모 오브젝트 전략이 필요할 수 있습니다.

  • 날짜/시간 유형: DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE 은 해당 Snowflake 유형에 매핑됩니다. 타임존 처리는 마이그레이션 시 핵심적으로 고려해야 할 사항입니다. Snowflake는 TIMESTAMP_NTZ (타임존 없음) 및 TIMESTAMP_TZ (타임존 포함)을 제공합니다.

    • 예시: Oracle의 TIMESTAMP WITH TIME ZONE 은 Snowflake에서는 TIMESTAMP_TZ 일 수 있습니다.

  • LOBs: Oracle BLOBBFILE (이진 대형 오브젝트)는 특별한 주의가 필요합니다. Snowflake는 이진 데이터에 VARBINARY 를 사용합니다. Large BLOBs 에는 다른 저장소 전략이 필요할 수 있습니다. BFILE (외부 파일 LOBs)은 Snowflake가 동일한 방식으로 직접 지원하지 않으므로 재설계가 필요할 수 있습니다.

    • 예: BLOBVARBINARY 일 수 있습니다. 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에서 SYSDATECURRENT_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, UPDATEDELETE 문은 일반적으로 변환됩니다.

  • 저장 프로시저 및 함수(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);
Copy

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()
Copy

이 경우 코어 로직과 구문은 그대로 유지됩니다. 하지만 다음 사항에 유의해야 합니다.

SYSDATE 가 CURRENT_DATE()로 변환되었습니다. 직원 테이블에 있는 Oracle 고유의 데이터 타입 뉘앙스는 데이터 타입 매핑 규칙에 따라 처리되었을 것입니다. 쿼리 내에 직접적인 Snowflake 동등 함수가 없는 Oracle 전용 함수가 있는 경우 SnowConvert 가 변환을 시도하거나 수동 검토를 위해 플래그(EWIs 또는 FDMs사용)를 지정했을 것입니다. 주요 고려 사항

  • 테스트가 중요합니다. 변환된 코드를 항상 철저하게 테스트하여 기능적 동등성을 보장하십시오. 데이터 타입 동작, 함수의 에지 케이스, 성능 차이에 세심한 주의를 기울이십시오.

  • 타임존 처리: 타임존 변환에는 세심한 계획과 테스트가 필요합니다.

  • PL/SQL 변환 복잡성: PL/SQL 변환에는 상당한 노력이 필요합니다. SnowConvert 를 사용하면 이 작업의 일부를 자동화할 수 있지만 일반적으로 수동 검토 및 조정이 필요합니다.

  • EWIs 및 FDMs 검토: SnowConvert 에서 생성된 EWIs (오류, 경고, 정보) 및 FDMs (함수 차이 메시지)를 주의 깊게 검토하십시오. 주의가 필요한 부분을 강조 표시합니다.

  • 성능 튜닝: Snowflake의 성능 특성은 Oracle과 다릅니다. 변환 후에는 쿼리와 데이터 구조를 조정해야 할 수 있습니다.

이러한 변환과 잠재적 차이점을 이해하면 SnowConvert 를 통해 Oracle에서 Snowflake로의 마이그레이션을 더 잘 준비할 수 있습니다.