SnowConvert AI - Oracle - SQL 문¶
이 문서에서는 SQL 구문의 모든 유사점, 차이점과 SnowConvert AI가 해당 SQL 구문을 기능적인 Snowflake SQL 구문으로 변환하는 방법에 대해 자세히 설명합니다.
Alter Table¶
이 섹션에서는 ALTER TABLE과 관련된 변환을 보여줍니다.
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
1. Description¶
ALTER TABLE 문을 사용하여 파티션되지 않은 테이블, 파티션된 테이블, 테이블 파티션 또는 테이블 하위 파티션의 정의를 변경할 수 있습니다. 오브젝트 테이블 또는 오브젝트 열이 있는 관계형 테이블의 경우 ALTER TABLE 을 사용하여 유형이 변경된 후 참조된 유형의 최신 정의로 테이블을 변환합니다 (Oracle 설명서).
Oracle 구문
참고
Snowflake 구문을 검토하려면 다음 설명서 를 검토하십시오.
2. Sample Source Patterns¶
2.1. 절이 있는 테이블 변경¶
경고
memoptimize_read_clause 및 memoptimize_read_clause 는 Snowflake에 적용되지 않으므로 제거됩니다.
Oracle¶
Snowflake¶
참고
일부 column_clauses and constraint_clauses 만 Snowflake에 애플리케이션할 수 있습니다. Oracle에서는 테이블 변경을 통해 생성된 파티션의 속성을 수정할 수 있지만 Snowflake에서는 이러한 작업이 필요하지 않습니다
2.2. 지원되지 않는 대/소문자가 있는 테이블 변경¶
Oracle¶
Snowflake¶
2.3. ADD CONSTRAINT 작업¶
ADD CONSTRAINT 작업은 Snowflake에도 동일하지만, ALTER TABLE 문당 1개의 제약 조건만 추가할 수 있으므로 문에 제약 조건이 2개 이상 포함될 경우 설명이 추가됩니다.
경고
enable_disable_clause 은 Snowflake와 관련이 없으므로 제거되었습니다.
Oracle¶
Snowflake¶
Known Issues¶
테이블의 일부 속성은 애플리케이션에 맞게 조정되거나 적용되지 않을 수 있습니다.
Create Database Link¶
경고
현재 _ Create Database Link _ 문은 변환되지 않고 구문 분석 중입니다. 또한 소스 코드에 create database link 문이 있는 경우 _ Assessment Report _에서 설명합니다
소스 코드의 예¶
Snowflake 출력¶
데이터베이스 링크 참조¶
입력 코드에서 데이터베이스 링크의 오브젝트를 사용하는 경우 출력 코드에서 해당 오브젝트의 이름은 유지되지만 사용 중인 데이터베이스 링크의 이름은 제거됩니다.
소스 코드의 예¶
Snowflake 출력¶
관련 EWIs¶
SSC-EWI-OR0123: 데이터베이스 링크 연결은 지원되지 않습니다.
SSC-FDM-0007: 종속성이 누락된 요소입니다.
테이블 삭제¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
테이블 삭제 문은 테이블을 제거하는 데 사용됩니다. 이 문은Oracle 과 Snowflake 사이에 약간씩 다릅니다. 차이점에 대한 자세한 내용은 각 설명서를 다시 확인할 수 있습니다.
Oracle에서 Drop Table 구문은 다음과 같습니다.
Snowflake에서 Drop Table 구문은 다음과 같습니다.
가장 큰 차이점은 테이블이 시스템에서 영구적으로 제거되지 않으므로 Snowflake에는 PURGE 절에 대한 등가물이 없다는 것입니다. 하지만 CASCADE CONSTRAINTS 및 CASCADE 절은 같습니다. 이 테이블을 참조하는 외래 키가 있더라도 둘 다 테이블을 삭제합니다.
예¶
이제 몇 가지 코드 예시와 변환된 후의 모습을 살펴보겠습니다. 각 예제에서는 테이블 드롭 문의 다른 변형을 사용합니다.
예 1:¶
이 예제에서는 가능한 한 간단하게 Drop Table 문을 사용합니다.
입력 코드:
변환된 코드:
예 2:¶
이 예제에서는 PURGE 절과 함께 Drop Table 문을 사용합니다. Snowflake에는 Drop Table 문 내에 있는 PURGE 절에 해당하는 문이 없다는 것을 기억하십시오.
입력 코드:
변환된 코드:
예 3:¶
이 예제에서는 CASCADE CONSTRAINTS 절과 함께 Drop Table 문을 사용합니다.
입력 코드:
변환된 코드:
변환된 코드에서는 CASCADE CONSTRAINTS 절에서 CONSTRAINTS 단어가 제거됩니다.
예 4:¶
이 예제에서는 CASCADE CONSTRAINTS 및 PURGE 절과 함께 Drop Table 문을 사용합니다.
입력 코드:
변환된 코드:
보시다시피 코드가 변경됩니다. 새 Snowflake 코드에서는 PURGE 절이 제거되고 CASCADE 절에서 CONSTRAINTS 단어도 제거됩니다.
기능적 동등성¶
다음 코드를 실행하여 기능적 동등성을 확인하고, 동등하지 않은 유일한 부분은 PURGE 절이며, Oracle에서는 시스템에서 테이블을 완전히 제거하며 Snowflake와 동등한 것이 없다는 점에 유의하십시오. 두 경우 모두 다른 테이블에서 참조된 경우에도 테이블이 삭제됩니다.
Oracle:
Snowflake:
관련 EWIs¶
관련 EWIs 없음.
Create Index¶
경고
현재 _ Create Index _ 문은 변환되지 않지만, 구문 분석 중입니다. 또한 소스 코드에 Create index 문이 있는 경우 _ Assessment Report _에서 이를 설명합니다.
create index 구문 분석 코드의 예입니다.¶
참고
아키텍처상의 이유로 Snowflake는 인덱스를 지원하지 않으므로, SnowConvert AI는 인덱스 생성과 관련된 모든 코드를 제거합니다. Snowflake는 모든 테이블에 대해 DML 작업의 성능 속도를 높이는 데 도움이 되는 마이크로 파티션을 자동으로 생성하므로 사용자는 이러한 마이크로 파티션의 생성 및 관리에 대해 걱정할 필요가 없습니다.
일반적으로 이 정도면 예외적으로 쿼리 성능이 매우 우수합니다. 그러나 데이터 클러스터링 키를 생성하여 이를 개선할 수 있는 방법이 있습니다. 마이크로 파티션과 데이터 클러스터링에 대한 자세한 내용은 Snowflake의 공식 페이지 에서 확인할 수 있습니다.
Create Sequence¶
먼저 코드 예시를 통해 코드가 변환된 후 어떤 모습일지 살펴보겠습니다.
Oracle:¶
Snowflake:¶
The first change that it is done is to apply the schema or datawarehouse to the name of the sequence. The second transformation consists in removing some elements and add them as comments, since oracle has some elements in the create sequence that are not supported in Snowflake.
Oracle에서 시퀀스 이름 뒤에 NOT 설명이 있는 요소는 다음과 같습니다
START WITH 1000
INCREMENT BY 1
요소가 이러한 요소 중 하나가 아닌 경우 예시에서와 같이 생성 시퀀스 바로 앞에 설명과 함께 경고로 추가됩니다.
제거되는 요소는 다음과 같습니다
MAXVALUE
NOMAXVALUE
MINVALUE
NOMINVALUE
CYCLE
NOCYCLE
CACHE
NOCACHE
ORDER
NOORDER
KEEP
NOKEEP
SESSION
GLOBAL
SCALE
EXTEND
SCALE
NOEXTEND
NOSCALE
SHARD
EXTEND
SHARD
NOEXTEND
NOSHARD
SEQUENCE EXPRESSIONS¶
NEXTVAL: Snowflake 문법은 Oracle 문법과 동일합니다.
CURRVAL: Snowflake does not have an equivalent so it is transformed to a stub function. Check this link to understand Snowflake’s approach.
Oracle:¶
Snowflake:¶
시퀀스 START WITH¶
START WITH 문 값은 Snowflake에서 허용하는 최대 값을 초과할 수 있습니다. 시작 값에 대해 Snowflake가 말한 것은 다음과 같습니다. 시퀀스에서 반환되는 첫 번째 값을 지정합니다. 지원되는 값은 64비트 2의 보수 정수로 표현할 수 있는 모든 값입니다(-2^63 ~ 2^63-1)_. 따라서 앞서 언급한 대로 최대 허용 값은 양수의 경우 9223372036854775807, 음수의 경우 9223372036854775808 입니다.
코드 예시¶
Oracle:¶
Snowflake:¶
관련 EWIs¶
SSC-EWI-OR0069: 시퀀스 CURRVAL 속성은 Snowflake에서 지원되지 않습니다.
SSC-EWI-OR0068: 시퀀스 시작 값이 Snowflake에서 허용하는 최대값을 초과합니다.
세션 변경¶
세션 변경¶
세션 변경에는 Snowflake에 해당하는 기능이 있으며 일부 변수는 Snowflake 변수에 매핑됩니다. 세션 변경 순열이 지원되지 않으면 노드에 설명이 추가되고 경고가 추가됩니다.
Oracle:¶
Snowflake:¶
세션 매개 변수 참조¶
참고
테이블에 표시되지 않는 세션 매개 변수는 현재 변환되고 있지 않습니다.
세션 매개 변수 |
Snowflake 변환 |
|---|---|
NLS_DATE_FORMAT |
DATE_INPUT_FORMAT and DATE_OUTPUT_FORMAT |
NLS_NUMERIC_CHARACTERS |
NOT SUPPORTED |
Known Issues¶
문제가 발견되지 않았습니다.
관련 EWIs¶
관련 EWIs 없음.
Create Synonym¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
Create Synonym¶
Snowflake에서는 동의어가 지원되지 않습니다. 동의어에 대한 참조가 원래 오브젝트에 대해 변경됩니다.
Oracle:¶
Snowflake:¶
예 1: 테이블을 참조하는 동의어입니다.¶
Oracle 소스 코드:
Snowflake 마이그레이션 코드: SELECT 가 원래 동의어를 가리키던 것이 이제는 동의어를 가리키는 테이블을 가리키는 것을 알 수 있습니다.
예 2: 다른 동의어를 참조하는 동의어입니다.¶
Oracle 소스 코드:
Snowflake 마이그레이션 코드: SELECT, UPDATE, INSERT가 원래 동의어를 참조하던 것이 이제는 원자성 오브젝트인 테이블을 참조한다는 것을 알 수 있습니다.
예 3: 뷰를 참조하는 동의어¶
Oracle 소스 코드
Snowflake 마이그레이션 코드: SELECT가 원래 동의어를 참조하던 것이 이제는 원자성 오브젝트인 뷰를 참조한다는 것을 알 수 있습니다.
관련 EWIs¶
SSC-FDM-0001: 단일 테이블에서 모든 열을 선택하는 뷰는 Snowflake에서 필수가 아닙니다.
SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있습니다.
SSC-FDM-OR0005: Snowflake에서는 동의어가 지원되지 않지만, 이 동의어에 대한 참조가 원래 오브젝트 이름으로 변경되었습니다.