SnowConvert AI - 일반적인 기능적 차이¶
SSC-FDM-0001¶
Snowflake에서는 단일 테이블에서 모든 열을 선택하는 뷰가 필요하지 않습니다
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
단일 테이블의 모든 열만 선택하고 필터링 절이 없는 뷰는 Snowflake에 필요하지 않으며 성능에 영향을 미칠 수 있습니다.
코드 예제¶
입력 코드(Oracle):¶
CREATE OR REPLACE VIEW simpleView1
AS
SELECT
*
FROM
simpleTable;
CREATE OR REPLACE VIEW simpleView2
AS
SELECT
*
FROM
simpleTable GROUP BY col1;
생성된 코드:¶
CREATE OR REPLACE VIEW simpleView1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable;
CREATE OR REPLACE VIEW simpleView2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable
GROUP BY col1;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0002¶
상관 관계가 있는 하위 쿼리에 기능적 차이가 있을 수 있습니다
설명¶
이 메시지는 상관 관계가 있는 하위 쿼리(외부 쿼리의 열을 참조하는 하위 쿼리)가 있을 때 표시됩니다. 이러한 유형의 하위 쿼리는 경우에 따라 Snowflake에서 몇 가지 기능적 차이를 나타낼 수 있습니다(하위 쿼리 사용하기).
코드 예제¶
입력 코드:¶
CREATE TABLE schema1.table1(column1 NVARCHAR(50), column2 NVARCHAR(50));
CREATE TABLE schemaA.tableA(columnA NVARCHAR(50), columnB NVARCHAR(50));
--Correlated Subquery
SELECT columnA FROM schemaA.tableA ta WHERE columnA = (SELECT SUM(column1) FROM schema1.table1 t1 WHERE t1.column1 = ta.columnA);
생성된 코드:¶
CREATE OR REPLACE TABLE schema1.table1 (
column1 VARCHAR(50),
column2 VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/11/2024", "domain": "test" }}'
;
CREATE OR REPLACE TABLE schemaA.tableA (
columnA VARCHAR(50),
columnB VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/11/2024", "domain": "test" }}'
;
--Correlated Subquery
SELECT
columnA
FROM
schemaA.tableA ta
WHERE
columnA =
--** SSC-FDM-0002 - CORRELATED SUBQUERIES MAY HAVE SOME FUNCTIONAL DIFFERENCES. **
(SELECT
SUM(column1) FROM
schema1.table1 t1
WHERE
t1.column1 = ta.columnA
);
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0003¶
변환율 불일치
설명¶
이 메시지는 지정된 평가 필드에서 변환율 불일치가 발견될 때 표시됩니다. 이 문제는 SnowConvert AI가 자동으로 해결하므로, 이 메시지는 정보 제공용 경고일 뿐입니다.
참고
이 정보 제공용 경고는 출력 코드가 아닌 평가 문서에만 표시됩니다.
모범 사례¶
SnowConvert AI가 문제를 자동으로 수정할 수 있지만, snowconvert-support@snowflake.com으로 이메일을 보내고 문제를 지정하여 SnowConvert AI 지원 팀에 문의할 수 있습니다.
SSC-FDM-0004¶
외부 테이블이 일반 테이블로 변환되었습니다
설명¶
Snowflake에서는 데이터 저장이 문제가 되지 않고 외부 테이블이 필요하지 않기 때문이 이 경고는 외부 처리와 관련된 절에 추가됩니다. 대신, 모든 데이터는 Snowflake 데이터 저장소 내에서 관리해야 합니다. 이 주제에 대한 자세한 내용은 여기에서 데이터 저장소에 대한 Snowflake 고려 사항을 참조하세요.
코드 예제¶
입력 코드:¶
CREATE EXTERNAL TABLE ext_csv_file (
id INT,
name TEXT,
age INT,
city TEXT
)
LOCATION (
'gpfdist://192.168.1.100:8080/data/my_data.csv'
)
FORMAT 'CSV' (DELIMITER ',' HEADER);
생성된 코드:¶
--** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE TABLE ext_csv_file (
id INT,
name TEXT,
age INT,
city TEXT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "greenplum", "convertedOn": "07/09/2025", "domain": "no-domain-provided" }}'
;
모범 사례¶
외부 테이블의 파일에 저장된 데이터는 Snowflake 데이터베이스로 옮겨야 합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0005¶
시간 데이터 타입에 TIME ZONE이 지원되지 않습니다
설명¶
Snowflake의 시간 데이터 타입은 타임존 값을 저장하지 않습니다
TIME은 내부적으로 “wallclock” 시간을 저장하며 TIME 값에 대한 모든 작업은 타임존을 고려하지 않고 수행됩니다. 자세한 내용은 여기를 참조하세요.
코드 예시¶
입력 코드:¶
CREATE TABLE TABLE_TIME_TYPE (
COLNAME TIME (9) WITH TIME ZONE
);
생성된 코드:¶
CREATE OR REPLACE TABLE TABLE_TIME_TYPE (
COLNAME TIME(9) /*** SSC-FDM-0005 - TIME ZONE NOT SUPPORTED FOR TIME DATA TYPE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0006¶
숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있습니다
설명¶
이 기능적 차이 메시지는 NUMBER 유형 열이 테이블 내에 생성된 경우에 표시됩니다. 그 이유는 Snowflake에서 중간 값의 소수 자릿수와 관련된 연산을 수행할 때 산술 차이로 인해 일부 연산이 실패할 수 있기 때문입니다. 자세한 내용은 Snowflake의 중간 값에 대한 Snowflake 게시물 및 표현 가능한 범위를 벗어난 값을 참조하세요.
이러한 산술 문제를 방지하기 위해 데이터 샘플링을 실행하여 이러한 연산에 필요한 전체 자릿수와 소수 자릿수를 확인할 수 있습니다.
코드 예시¶
숫자 열이 있는 간단한 테이블¶
입력 코드(Oracle):¶
CREATE TABLE table1
(
column1 NUMBER,
column2 NUMBER (20, 4)
);
생성된 코드:¶
CREATE OR REPLACE TABLE table1
(
column1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
column2 NUMBER(20, 4) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
산술 문제의 예¶
다음 예는 숫자 열을 사용할 때 산술 문제가 어떻게 발생할 수 있는지 보여줍니다.
분할 오류가 있는 Snowflake 코드:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 19) );
INSERT INTO number_table VALUES (1);
SELECT column1 / column1 FROM number_table;
곱셈 오류가 있는 Snowflake 코드:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 20) );
INSERT INTO number_table VALUES (1);
SELECT column1 * column1 FROM number_table;
SELECT 문을 실행할 때 Snowflake는 다음의 오류를 반환합니다.
Number out of representable range: type FIXEDSB16{nullable}, value 1.0000000000000000000
이는 중간 작업의 결과가 Snowflake의 최대 용량을 초과했기 때문입니다. 각 예에서 숫자 소수 자릿수를 1씩 줄이면 오류가 수정되고 정상적으로 작동합니다.
Division이 있는 Snowflake 코드:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 18) );
INSERT INTO number_table VALUES (1);
SELECT column1 / column1 FROM number_table;
곱셈이 있는 Snowflake 코드:¶
CREATE OR REPLACE TABLE numbertable( column1 NUMBER(38, 19) );
INSERT INTO number_table VALUES (1);
SELECT column1 * column1 FROM number_table;
이러한 이유로, SnowConvert AI는 숫자의 기본 소수 자릿수를 18로 설정하여 마이그레이션 시 오류 수를 최소화합니다.
모범 사례¶
작업의 중간 값이 Snowflake의 최대값인 소수 자릿수 37을 초과하지 않는지 확인합니다.
데이터에서 데이터 샘플링을 실행하여 작업을 실행하기 전에 필요한 전체 자릿수와 소수 자릿수가 있는지 확인합니다.
대부분의 경우, 일부 데이터 샘플링을 수행하거나 비즈니스 담당자와 논의한 후 전체 자릿수가 다를 수 있다는 결론에 도달할 수 있습니다. 예를 들어,
MONEY열의 일반적인 전체 자릿수는NUMBER(20,4)입니다. Snowflake에서는 열 데이터 타입을 쉽게 변경할 수 없습니다. 이 포럼의 게시물에서 열 데이터 타입을 변경하고 데이터를 보존하는 방법에 대한 몇 가지 지침을 확인할 수 있습니다.추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0007¶
종속성이 누락된 요소
참고
명확성을 위해 출력 코드의 일부가 생략되었습니다
설명¶
오브젝트에 대한 종속성이 누락되어 Snow Converter가 일부 데이터 타입을 확인할 수 없습니다. 또한 종속성이 소스 코드에 없는 경우 배포 오류가 발생할 가능성도 있습니다.
코드 예시¶
입력 코드:¶
CREATE VIEW VIEW01 AS SELECT * FROM TABLE1;
생성된 코드:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
* FROM
TABLE1;
참고
TABLE1 정의가 누락되었음에 유의합니다.
모범 사례¶
오브젝트의 모든 종속성이 소스 코드에 있는지 확인합니다.
그렇지 않은 경우 코드에서 오브젝트에 대한 참조를 찾아 작업이 제대로 관리되고 있는지 확인합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0008¶
On Commit이 지원되지 않습니다
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명 ¶
CREATE TABLE 문의 ON COMMIT 절이 주석 처리되었습니다. ON COMMIT 절은 일반적으로 다른 SQL 언어의 임시 테이블에 사용되므로 Snowflake는 해당 절을 지원하지 않습니다. 트랜잭션별로 동작을 관리해야 하는 경우 명시적 TRUNCATE 또는 DROP 문 대신 Snowflake의 트랜잭션 또는 임시 테이블을 사용하는 것이 좋습니다.
코드 예시¶
입력 코드¶
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
생성된 코드¶
CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT (DELETE ROWS) IS NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "09/22/2025", "domain": "no-domain-provided" }}'
;
SSC-FDM-0009¶
GLOBAL TEMPORARY TABLE 기능이 지원되지 않습니다.
설명 ¶
전역 임시 테이블은 Snowflake 설명서에 나와 있듯이 여러 가지 변형이 있을 수 있으므로 복잡한 패턴으로 간주됩니다.
코드 예시¶
입력 코드¶
CREATE OR REPLACE GLOBAL TEMPORARY TABLE GLOBAL_TEMP_TABLE
(
col3 INTEGER,
col4 VARCHAR(50)
);
생성된 코드¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE GLOBAL_TEMP_TABLE
(
col3 INTEGER,
col4 VARCHAR(50)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0010¶
유형이 날짜로 변경되었습니다.
설명 ¶
이 메시지는 SnowConvert AI가 DEFAULT SYSDATE를 찾았지만 데이터 타입이 DATE 또는 TIMESTAMP 데이터 타입이 아닌 경우에 표시됩니다. 이 경우 데이터 타입은 DATE로 변경됩니다.
코드 예시¶
입력 코드¶
CREATE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1"(
"COLUMN1" VARCHAR2(30 BYTE) DEFAULT SYSDATE
);
생성된 코드¶
CREATE OR REPLACE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1" (
"COLUMN1" TIMESTAMP DEFAULT CURRENT_TIMESTAMP() /*** SSC-FDM-0010 - CONVERTED FROM VARCHAR2 TO DATE FOR CURRENT_DATE DEFAULT ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0011¶
열 이름이 Snowflake 예약 키워드입니다.
참고
이 FDM는 더 이상 사용되지 않습니다. SSC-EWI-0045 설명서를 참조하세요.
설명 ¶
소스 언어에서는 유효하지만 Snowflake에서는 예약 키워드인 열 이름입니다.
코드 예시¶
입력 코드(Oracle):¶
CREATE TABLE T1
(
LOCALTIME VARCHAR,
CURRENT_USER VARCHAR
);
생성된 코드:¶
CREATE OR REPLACE TABLE T1
(
--** SSC-FDM-0011 - COLUMN NAME 'LOCALTIME' IS A SNOWFLAKE RESERVED KEYWORD **
"LOCALTIME" VARCHAR,
--** SSC-FDM-0011 - COLUMN NAME 'CURRENT_USER' IS A SNOWFLAKE RESERVED KEYWORD **
"CURRENT_USER" VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
모범 사례¶
Snowflake에서 지원되지 않는 이름을 사용하는 열의 이름을 바꾸는 것이 좋습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0012¶
일부 제약 조건에서 제약 조건 이름이 지원되지 않습니다.
설명 ¶
이 메시지는 제약 조건이 Null, Not Null 또는 기본값 유형이고 이름으로 정의된 경우에 추가됩니다. Snowflake는 이러한 제약 조건의 이름을 지원하지 않습니다. 따라서 SnowConvert AI는 이를 제거하고 주석을 추가합니다.
코드 예시¶
입력 코드¶
CREATE TABLE TABLE1 (
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL
);
생성된 코드¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10) DEFAULT ('0') /*** SSC-FDM-0012 - CONSTRAINT NAME 'constraintName' IN DEFAULT EXPRESSION CONSTRAINT IS NOT SUPPORTED IN SNOWFLAKE ***/ NOT NULL
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0013¶
타임존 식을 매핑할 수 없습니다
설명 ¶
이 FMD 메시지는 타임존 식의 실제 값을 확인할 수 없어 변환된 결과가 다를 수 있는 상황을 나타내기 위해 추가됩니다. 사용된 타임존 값이 리터럴 문자열인 경우, SnowConvert AI는 이를 가져와 Snowflake의 해당 타임존 값으로 매핑할 수 있습니다. 그러나 이 값이 식으로 지정된 경우 SnowConvert AI는 런타임에 사용될 타임존 값을 가져올 수 없으므로, 이 값을 Snowflake의 해당 타임존 값으로 매핑할 수 없습니다.
코드 예시¶
입력 코드(Oracle)¶
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE FROM DUAL;
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE Expression FROM DUAL;
생성된 코드¶
SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
CONVERT_TIMEZONE(Expression, TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
입력 코드(Teradata)¶
select TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE;
select current_timestamp at time zone CONCAT(' America ', ' Pacific');
select current_timestamp at time zone (SELECT COL1 FROM TABLE1 WHERE COL2 = 2);
생성된 코드¶
SELECT
CONVERT_TIMEZONE(SESSIONTIMEZONE, TIMESTAMP '1998-12-25 09:26:50.12') /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
SELECT
CONVERT_TIMEZONE(CONCAT(' America ', ' Pacific'), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
SELECT
CONVERT_TIMEZONE((
SELECT
COL1 FROM
TABLE1
WHERE COL2 = 2), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
¶
참고
Oracle의 타임존 호환성
Oracle의 타임존 이름 식은 대부분 Snowflake에서 직접 지원되며, 따라서 마이그레이션이 문제 없이 실행됩니다. 또한, 다음은 현재 Snowflake에서 지원되지 않아 기능적 차이 메시지가 표시되는 리전의 목록은 다음과 같습니다.
아프리카 및 둘라
아시아 및 울란바토르
아시아 및 예타테린부르크
캐나다 및 이스트-서스캐처원
CST
PST
US 및 태평양-뉴질랜드
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0014¶
Check 문이 지원되지 않습니다.
참고
이 FDM는 더 이상 사용되지 않습니다. SSC-EWI-0035 설명서를 참조하세요.
설명¶
CHECK 제약 조건은 Snowflake에서 지원되지 않지만 기능적으로는 영향을 미치지 않습니다.
코드 예시¶
입력 코드 Oracle:¶
CREATE TABLE "Schema"."BaseTable"(
"COLUMN1" VARCHAR2(255),
CHECK ( COLUMN1 IS NOT NULL )
);
생성된 코드: ¶
CREATE OR REPLACE TABLE "Schema"."BaseTable" (
"COLUMN1" VARCHAR(255)
-- ,
-- --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
-- CHECK ( COLUMN1 IS NOT NULL )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
입력 코드 Teradata: ¶
CREATE TABLE TABLE1,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL
(
COL0 BYTEINT,
CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
생성된 코드: ¶
CREATE TABLE TABLE1
(
COL0 BYTEINT
-- ,
-- --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
-- CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
입력 코드 SqlServer¶
ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
생성된 코드:¶
ALTER TABLE IF EXISTS table_name2
ADD column_name VARCHAR(255)
----** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
--CONSTRAINT constraint_name
--CHECK NOT FOR REPLICATION (column_name > 1)
;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0015¶
쿼리에서 참조된 사용자 지정 유형을 찾을 수 없습니다.
설명 ¶
이 오류는 사용자 지정 유형에 대한 정의를 찾을 수 없거나 SnowConvert에서 Oracle 기본 제공 데이터 타입을 인식하지 못한 경우에 발생합니다.
코드 예시¶
입력 코드(Oracle):¶
--Type was never defined
--CREATE TYPE type1;
CREATE TABLE table1
(
column1 type1
);
생성된 코드:¶
--Type was never defined
--CREATE TYPE type1;
CREATE OR REPLACE TABLE table1
(
column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/!!! NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}}'
;
모범 사례¶
참조된 데이터 타입이 입력 코드에 정의되었는지 확인합니다.
Snowflake 데이터 타입 설명서에서 해당 데이터 타입에 해당하는 항목을 찾습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0016¶
상수는 Snowflake Scripting에서 지원되지 않습니다. 변수로 변환되었습니다.
설명 ¶
Snowflake Scripting은 상수를 지원하지 않습니다. 따라서 Snowflake Scripting 플래그가 활성화되면 프로시저 내의 모든 상수가 변수로 변환됩니다.
코드 예시¶
Oracle:¶
CREATE OR REPLACE PROCEDURE p_constants
AS
my_const1 CONSTANT NUMBER := 40;
my_const2 CONSTANT NUMBER NOT NULL := 40;
BEGIN
NULL;
END;
Snowflake Scripting:¶
CREATE OR REPLACE PROCEDURE p_constants ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
my_const1 NUMBER(38, 18) := 40;
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
--** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE **
my_const2 NUMBER(38, 18) := 40;
BEGIN
NULL;
END;
$$;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0017¶
WITH SYSTEM VERSIONING 절은 Snowflake에서 지원되지 않습니다.
설명¶
ANSI SQL의 WITH SYSTEM VERSIONING 절은 테이블에 시스템 버전 관리를 활성화하여 시간 경과에 따른 테이블 데이터 변경 기록을 유지할 수 있도록 합니다. 이 절은 Snowflake에서 지원되지 않습니다.
코드 예제¶
입력 코드:¶
CREATE TABLE t1 (
ID INT PRIMARY KEY,
Name VARCHAR(50),
SysStartTime TIMESTAMP,
SysEndTime TIMESTAMP
) WITH SYSTEM VERSIONING;
생성된 코드:¶
CREATE TABLE t1 (
ID INT PRIMARY KEY,
Name VARCHAR(50),
SysStartTime TIMESTAMP,
SysEndTime TIMESTAMP
)
----** SSC-FDM-0017 - WITH SYSTEM VERSIONING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
--WITH SYSTEM VERSIONING
;
모범 사례¶
Snowflake에서 Time Travel을 사용할 수 있습니다. Time Travel을 사용하면 정의된 기간 내의 모든 시점에서 과거 데이터(즉, 변경 또는 삭제된 데이터)에 액세스할 수 있습니다. Snowflake Time Travel은 다음과 같은 작업을 수행하기 위한 강력한 도구의 역할을 합니다.
실수로 또는 의도적으로 삭제한 데이터 관련 오브젝트(테이블, 스키마, 데이터베이스) 복원.
과거의 주요 시점에서 데이터 복제 및 백업.
지정된 기간 동안의 데이터 사용/조작 분석.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0018¶
CHARACTER SET 절은 Snowflake에서 지원되지 않습니다.
설명¶
CHARACTER SET 열 옵션은 열에 저장할 수 있는 허용되는 문자 세트를 결정하지만, 이 절은 Snowflake에서 지원되지 않습니다.
코드 예제¶
입력 코드:¶
CREATE TABLE TABLE01(
COLNAME VARCHAR(20) CHARACTER SET character_specification
);
생성된 코드:¶
CREATE TABLE TABLE01 (
COLNAME VARCHAR(20)
-- --** SSC-FDM-0018 - CHARACTER SET CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
-- CHARACTER SET character_specification
);
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0019¶
의미 체계 정보를 로드할 수 없습니다.
설명¶
이 경고는 SnowConvert AI가 특정 오브젝트에 대한 의미 체계 정보를 로드할 수 없음을 알립니다. 이름이 동일한 중복된 오브젝트가 있는 경우, SnowConvert AI가 이 오브젝트의 의미 체계 정보를 로드하여 분석을 완료할 수 없기 때문일 가능성이 높습니다.
코드 예시¶
입력 코드:¶
CREATE TABLE T1
(
COL1 INTEGER
);
CREATE TABLE T1
(
COL2 INTEGER
);
생성된 코드: ¶
CREATE OR REPLACE TABLE T1
(
COL1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR T1. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE TABLE T1
(
COL2 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
모범 사례¶
의미 체계 정보 로딩에 영향을 미칠 수 있으므로 입력 코드에 중복 오브젝트가 있는지 확인합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0020¶
임시 테이블에 여러 결과 세트가 반환됩니다
설명¶
Snowflake Scripting 프로시저에서는 프로시저당 1개의 결과 세트만 반환할 수 있습니다.
Teradata 동작을 복제하려면 반환할 결과 세트가 2개 이상 있는 경우 임시 테이블에 저장됩니다. Snowflake Scripting 프로시저는 임시 테이블의 이름이 포함된 배열을 반환합니다.
코드 예시¶
입력 코드(Teradata):¶
REPLACE MACRO sampleMacro AS
(
SELECT CURRENT_DATE AS DT;
SELECT CURRENT_DATE AS DT_TWO;
);
생성된 코드:¶
CREATE OR REPLACE PROCEDURE sampleMacro ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
return_arr ARRAY := array_construct();
tbl_nm VARCHAR;
BEGIN
tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
SELECT
CURRENT_DATE() AS DT;
return_arr := array_append(return_arr, :tbl_nm);
tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
SELECT
CURRENT_DATE() AS DT_TWO;
return_arr := array_append(return_arr, :tbl_nm);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
모범 사례¶
결과 세트를 얻으려면 프로시저에서 반환된 임시 테이블의 이름으로 SELECT 쿼리를 실행해야 합니다.
여러 결과 세트를 반환하는 프로시저를 최대한 피하고, 더 직접적인 결과를 위해 단일 책임 원칙을 적용합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0021¶
인덱스 생성이 지원되지 않습니다
설명¶
아키텍처상의 이유로 Snowflake는 인덱스를 지원하지 않으므로, SnowConvert AI는 인덱스 생성과 관련된 모든 코드를 주석 처리합니다. Snowflake는 모든 테이블에 대해 DML 작업의 성능 속도를 높이는 데 도움이 되는 마이크로 파티션을 자동으로 생성하므로 사용자는 이러한 마이크로 파티션의 생성 및 관리에 대해 걱정할 필요가 없습니다.
일반적으로는 이 정도만으로도 쿼리 성능이 매우 우수하지만, 데이터 클러스터링 키를 생성하여 성능을 향상시킬 수 있는 방법이 있습니다. 마이크로 파티션과 데이터 클러스터링에 대한 자세한 내용은 Snowflake의 공식 페이지에서 확인할 수 있습니다.
코드 예시¶
입력 코드(Oracle):¶
CREATE INDEX index1
ON table1(column1);
생성된 코드:¶
----** SSC-FDM-0021 - CREATE INDEX IS NOT SUPPORTED BY SNOWFLAKE **
----** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
--CREATE INDEX index1
--ON table1(column1)
;
모범 사례¶
데이터 클러스터링은 테이블에서 쿼리 성능 속도를 높이는 방법일 수 있습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0022¶
윈도우 프레임 단위가 행으로 변경되었습니다
심각도¶
낮음
설명¶
이 경고는 지원되지 않는 윈도우 프레임 단위가 행으로 변경되어 출력 차이가 발생하는 경우에 추가됩니다. 예를 들어, GROUPS 단위는 Snowflake에서 지원하지 않습니다.
이 메시지는 RANGE 단위처럼 윈도우 프레임 단위가 부분적으로 지원되지 않아 변경되는 경우에도 사용됩니다.
코드 예시¶
이를 설명하기 위해 다음 데이터를 예로 들어보겠습니다.
C_NAME |
C_BIRTH_DAY |
|---|---|
USA |
1 |
USA |
4 |
폴란드 |
9 |
캐나다 |
10 |
USA |
5 |
캐나다 |
12 |
코스타리카 |
3 |
폴란드 |
4 |
USA |
2 |
코스타리카 |
7 |
코스타리카 |
10 |
Oracle:¶
코드¶
SELECT
C_NAME,
SUM(C_BIRTH_DAY)
OVER (ORDER BY C_BIRTH_DAY
RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1
FROM WINDOW_TABLE;
결과¶
C_NAME |
MAX1 |
|---|---|
USA |
- |
USA |
1 |
코스타리카 |
3 |
USA |
6 |
폴란드 |
6 |
USA |
14 |
코스타리카 |
19 |
폴란드 |
26 |
캐나다 |
35 |
코스타리카 |
35 |
캐나다 |
55 |
Snowflake:¶
코드¶
SELECT
C_NAME,
SUM(C_BIRTH_DAY)
OVER (ORDER BY C_BIRTH_DAY ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING /*** SSC-FDM-0022 - WINDOW FRAME UNIT 'RANGE' WAS CHANGED TO ROWS ***/) AS MAX1
FROM
WINDOW_TABLE;
결과¶
C_NAME |
MAX1 |
|---|---|
USA |
- |
USA |
1 |
코스타리카 |
3 |
USA |
6 |
폴란드 |
10 |
USA |
14 |
코스타리카 |
19 |
폴란드 |
26 |
캐나다 |
35 |
코스타리카 |
45 |
캐나다 |
55 |
모범 사례¶
행의 결정론적 순서를 따르도록 하여 Snowflake에서 실행할 때 결정론적 출력을 보장합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0023¶
전역 임시 테이블이 참조되고 있습니다.
심각도¶
Medium
설명¶
SnowConvert AI는 전역 임시 테이블을 일반 테이블 만들기로 변환합니다. 이러한 테이블에 대한 참조는 예상과 다르게 동작할 수 있습니다.
코드 예제¶
입력¶
create global temporary table t1
(col1 varchar);
create view view1 as
select col1 from t1;
출력¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE t1
(col1 varchar)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE VIEW view1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
select col1 from
--** SSC-FDM-0023 - A Global Temporary Table is being referenced **
t1;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0024¶
이 기능은 현재 Snowflake Scripting에서 지원되지 않습니다.
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-0058 설명서를 참조하세요.
설명¶
이 오류는 create 프로시저에 사용된 문이 현재 Snowflake Scripting에서 지원되지 않는 경우에 발생합니다.
코드 예시¶
입력 코드(Oracle):¶
CREATE OR REPLACE PROCEDURE PROC01
IS
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL'
-- --** SSC-FDM-0024 - FUNCTIONALITY FOR 'EXECUTE IMMEDIATE RETURNING CLAUSE' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING **
-- INTO number_variable
;
END;
$$;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0026¶
유형이 Snowflake에서 지원되지 않습니다
참고
이 FDM은 더 이상 사용되지 않습니다. SSC-EWI-0028 설명서를 참조하세요.
설명¶
이 메시지는 유형이 Snowflake에서 지원되지 않는 경우에 표시됩니다.
예¶
입력 코드(Oracle):¶
CREATE TABLE MYTABLE
(
COL1 SYS.ANYDATASET
);
생성된 코드:¶
CREATE OR REPLACE TABLE MYTABLE
(
--** SSC-FDM-0026 - TYPE NOT SUPPORTED BY SNOWFLAKE **
COL1 SYS.ANYDATASET
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0027¶
SnowFlake에서 사용할 수 없는 다음 문이 제거되었습니다.
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
설명¶
이 메시지는 특정 문을 Snowflake에서 사용할 수 없는 경우에 표시됩니다. 즉, Snowflake에 상응하는 문이 없어 더 이상 필요하지 않으므로 소스 코드에서 제거되었음을 의미합니다. 그러나 SnowConvert AI는 원래 문을 마지막에 주석의 일부로 유지합니다.
코드 예시¶
입력 코드: ¶
.LOGTABLE tduser.Employee_log;
.BEGIN MLOAD TABLES Employee_Stg;
.LAYOUT Employee;
.FIELD in_EmployeeNo * VARCHAR(10);
.FIELD in_FirstName * VARCHAR(30);
.FIELD in_LastName * VARCHAR(30);
.FIELD in_BirthDate * VARCHAR(10);
.FIELD in_JoinedDate * VARCHAR(10);
.FIELD in_DepartmentNo * VARCHAR(02);
.dml label EmpLabel
IGNORE DUPLICATE INSERT ROWS;
INSERT INTO Employee_Stg (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
VALUES (
:in_EmployeeNo,
:in_FirstName,
:in_Lastname,
:in_BirthDate,
:in_JoinedDate,
:in_DepartmentNo
);
.IMPORT INFILE employee.txt
FORMAT VARTEXT ','
LAYOUT Employee
APPLY EmpLabel;
.END MLOAD;
LOGOFF;
생성된 코드: ¶
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
// SnowConvert AI Helpers Code section is omitted.
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
con = None
def main():
snowconvert.helpers.configure_log()
con = snowconvert.helpers.log_on()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#.LOGTABLE tduser.Employee_log
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#.BEGIN MLOAD TABLES Employee_Stg
Employee_TableName = "Employee_TEMP_TABLE"
Employee_Columns = """in_EmployeeNo VARCHAR(10),
in_FirstName VARCHAR(30),
in_LastName VARCHAR(30),
in_BirthDate VARCHAR(10),
in_JoinedDate VARCHAR(10),
in_DepartmentNo VARCHAR(02)"""
Employee_Conditions = """in_EmployeeNo AS in_EmployeeNo, in_FirstName AS in_FirstName, in_LastName AS in_LastName, in_BirthDate AS in_BirthDate, in_JoinedDate AS in_JoinedDate, in_DepartmentNo AS in_DepartmentNo"""
def EmpLabel(tempTableName, queryConditions = ""):
exec(f"""INSERT INTO Employee_Stg (EmployeeNo, FirstName, LastName, BirthDate, JoinedDate, DepartmentNo)
SELECT
SRC.in_EmployeeNo,
SRC.in_FirstName,
:in_Lastname,
SRC.in_BirthDate,
SRC.in_JoinedDate,
SRC.in_DepartmentNo
FROM {tempTableName} SRC {queryConditions}""")
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
#.IMPORT INFILE employee.txt FORMAT VARTEXT ',' LAYOUT Employee APPLY EmpLabel
snowconvert.helpers.import_file_to_temptable(fr"employee.txt", Employee_TableName, Employee_Columns, Employee_Conditions, ',')
EmpLabel(Employee_TableName)
exec(f"""DROP TABLE {Employee_TableName}""")
if con is not None:
con.close()
con = None
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0028¶
지원 안 됨.
참고
이 FDM는 더 이상 사용되지 않습니다. SSC-EWI-0021 설명서를 참조하세요.
설명¶
이 메시지는 소스 코드의 특정 노드 또는 문이 Snowflake에서 지원되지 않는 경우에 표시됩니다.
코드 예시¶
입력 코드: ¶
WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
SELECT aValue from my_av;
생성된 코드:¶
----** SSC-FDM-0028 - SubavFactoring NOT SUPPORTED IN SNOWFLAKE **
--WITH my_av ANALYTIC VIEW AS
--(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
--SELECT aValue from my_av
;
모범 사례¶
이 오류가 발생하는 이유는 변환 중인 노드에 Snowflake에 상응하는 항목이 없기 때문입니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0029¶
사용자 정의 함수가 Snowflake 프로시저로 변환되었습니다.
경고
이 EWI는 더 이상 사용되지 않습니다. SSC-EWI-0068 설명서를 참조하세요.
심각도¶
낮음
설명¶
Snowflake 사용자 정의 함수는 Oracle 또는 SQL Server와 동일한 기능을 지원하지 않습니다. 기능적 동등성을 유지하기 위해 이 함수는 Snowflake 저장 프로시저로 변환됩니다. 이는 쿼리에서 사용되는 방식에 영향을 미칩니다.
코드 예시¶
SQL 서버:¶
입력 코드¶
CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
DECLARE @i int = 0, @p int;
Select @p = COUNT(*) FROM PURCHASING.VENDOR
WHILE (@p < 1000)
BEGIN
SET @i = @i + 1
SET @p = @p + @i
END
IF (@i = 6)
RETURN 1
RETURN @p
END;
생성된 코드¶
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
I INT := 0;
P INT;
BEGIN
Select
COUNT(*)
INTO
:P
FROM
PURCHASING.VENDOR;
WHILE (:P < 1000) LOOP
I := :I + 1;
P := :P + :I;
END LOOP;
IF ((:I = 6)) THEN
RETURN 1;
END IF;
RETURN :P;
END;
$$;
Oracle:¶
입력 코드¶
CREATE FUNCTION employee_function (param1 in NUMBER) RETURN NUMBER is
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO var1, var2, var3
FROM employees
START WITH manager_ID = param1
CONNECT BY manager_ID = PRIOR employee_id;
RETURN var1;
EXCEPTION
WHEN no_data_found THEN RETURN param1;
END employee_function;
생성된 코드¶
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE employee_function (param1 NUMBER(38, 18))
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "11/14/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO
:var1,
:var2,
:var3
FROM
employees
START WITH manager_ID = :param1
CONNECT BY
manager_ID = PRIOR employee_id;
RETURN :var1;
EXCEPTION
WHEN no_data_found THEN
RETURN :param1;
END;
$$;
모범 사례¶
동일한 논리를 유지하려면 내부 쿼리를 분리합니다.
Snowflake 사용자 정의 함수 접근 방식에 맞게 소스 코드를 재구성해야 할 수 있습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0030¶
새 식별자의 유효하지 않은 문자가 대체되었습니다
설명¶
지정된 식별자에 출력 언어에 대해 유효하지 않은 문자가 있습니다. 해당 문자가 UTF-8 코드로 대체되었습니다.
코드 예시¶
입력 코드(Oracle):¶
CREATE PROCEDURE PROC1
AS
"VAR0" INT;
"VAR`/1ͷ" VARCHAR(20);
"o*/o" FLOAT;
" . " INT;
". ." INT;
"123Name" INT;
"return" INT;
yield INT;
ident#10 INT;
BEGIN
NULL;
END;
생성된 코드:¶
CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
"VAR0" INT;
--** SSC-FDM-0030 - IDENTIFIER '"VAR`/1ͷ"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
VAR_u60_u2F1_uCD_B7 VARCHAR(20);
--** SSC-FDM-0030 - IDENTIFIER '"o*/o"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
o_u2A_u2Fo FLOAT;
--** SSC-FDM-0030 - IDENTIFIER '" . "' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
_u20_u2E_u20 INT;
--** SSC-FDM-0030 - IDENTIFIER '". ."' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
_u2E_u20_u2E INT;
"123Name" INT;
"return" INT;
yield INT;
IDENT_HASHTAG_10 INT;
BEGIN
NULL;
END;
$$;
모범 사례¶
최종 사용자 작업이 필요하지 않습니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0031¶
동적 테이블 필수 매개 변수가 기본값으로 설정되었습니다
설명¶
구체화된 뷰(및 Teradata의 경우 조인 인덱스)는 Snowflake의 동적 테이블로 마이그레이션됩니다. 동적 테이블의 두 매개 변수 TARGET_LAG 및 WAREHOUSE를 설정해야 합니다.
이러한 매개 변수가 구성 옵션에 설정되어 있지 않으면 변환 중에 기본값으로 설정됩니다.
여기에서 필수 동적 테이블 매개 변수에 대해 자세히 알아보세요.
코드 예시¶
입력 코드(Oracle):¶
CREATE MATERIALIZED VIEW mv1
AS SELECT * FROM table1;
생성된 코드:¶
CREATE OR REPLACE DYNAMIC TABLE mv1
--** SSC-FDM-0031 - DYNAMIC TABLE REQUIRED PARAMETERS SET BY DEFAULT **
TARGET_LAG='1 day'
WAREHOUSE=UPDATE_DUMMY_WAREHOUSE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT * FROM
table1;
모범 사례¶
필요에 따라 동적 테이블 필수 매개 변수를 구성합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0032¶
매개 변수가 리터럴 값이 아니므로 변환을 완전히 적용할 수 없습니다
설명¶
여러 변환을 할 때 SnowConvert AI는 매개 변수 내용의 유효성을 검사해야 할 때가 있습니다. 이는 매개 변수가 리터럴 값일 때만 가능합니다.
이 메시지는 매개 변수가 참조로 전달되어 함수 또는 문의 변환이 완료되지 못했기 때문에 SnowConvert AI가 이 매개 변수의 값을 검색할 수 없음을 경고하기 위해 생성됩니다.
코드 예시¶
입력 코드(Redshift):¶
SELECT TO_CHAR(DATE '2001-01-01', 'YYY/MM/DD'),
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
생성된 코드:¶
SELECT
PUBLIC.YEAR_PART_UDF(DATE '2001-01-01', 3) || TO_CHAR(DATE '2001-01-01', '/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
모범 사례¶
지정된 매개 변수를 리터럴 값으로 제공합니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0033¶
Sample 절이 Snowflake에서 다르게 동작합니다.
설명¶
이 메시지는 Snowflake에서 행을 샘플링하는 동안 기능적 차이가 있음을 보여주기 위해 생성됩니다. 기능적 차이는 검색된 행 수와 관련이 있습니다. Teradata에서 비결정론적 출력에 동일한 수의 행이 있는 경우 Snowflake에서 변경되어 몇 개의 행을 더 많거나 적게 반환할 수 있습니다. 이는 확률과 관련된 내용이며 Snowflake에서도 이와 같이 동작할 것으로 예상되기 때문입니다.
동일한 값과 동일한 수량(결정론적 출력)을 검색해야 하는 요구 사항이 있는 경우 Snowflake 쿼리의 시드를 사용하는 것이 좋습니다.
코드 예시¶
입력 코드(Teradata):¶
SELECT * FROM Employee SAMPLE 2;
SELECT * FROM Employee SAMPLE 0.25;
생성된 코드:¶
SELECT
* FROM
Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(2 ROWS);
SELECT
* FROM
Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(25);
모범 사례¶
결정론적 출력이 필요한 경우 쿼리의 시드 부분을 사용해 봅니다.
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0034¶
Struct가 VARIANT로 변환되었습니다. 일부 사용법에 기능적 차이가 있을 수 있습니다.
설명¶
Snowflake는 기본적으로 STRUCT 데이터 타입을 지원하지 않습니다. SnowConvert AI는 STRUCT를 VARIANT로 자동 변환합니다. INSERT 문에서 사용할 때 STRUCT 데이터는 OBJECT_CONSTRUCT를 사용하여 처리됩니다. 일부 사용 사례에서는 이 변환으로 인해 기능적 차이가 발생할 수 있습니다.
코드 예제¶
입력 코드:¶
BigQuery¶
CREATE OR REPLACE TABLE test.structTypes
(
COL1 STRUCT<sc1 INT64>,
COL2 STRUCT<sc2 STRING(10)>,
COL3 STRUCT<sc3 STRUCT<sc31 INT64, sc32 INT64>>,
COL4 STRUCT<sc4 ARRAY<INT64>>,
COL5 STRUCT<sc5 INT64, sc51 INT64>,
COL7 STRUCT<sc7 INT64 OPTIONS(description = "A repeated STRING field"), sc71 BOOL>,
COL8 STRUCT<sc8 INT64 NOT NULL, sc81 BOOL NOT NULL OPTIONS(description = "A repeated STRING field")>
);
생성된 코드:¶
Snowflake¶
CREATE OR REPLACE TABLE test.structTypes
(
COL1 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL2 VARIANT /*** SSC-FDM-0034 - STRUCT<STRING(10)> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL3 VARIANT /*** SSC-FDM-0034 - STRUCT<STRUCT<INT64, INT64>> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL4 VARIANT /*** SSC-FDM-0034 - STRUCT<ARRAY<INT64>> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL5 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64, INT64> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL7 VARIANT /*** SSC-FDM-0034 - STRUCT<INT, BOOL> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL8 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64, BOOLEAN> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "05/30/2025", "domain": "no-domain-provided" }}';
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0035¶
INFER_SCHEMA 함수는 테이블 템플릿을 생성하고 FILE_PATH 자리 표시자로 교체하기 위해 와일드카드가 없는 파일 경로가 필요합니다.
설명¶
INFER_SCHEMA 함수는 Snowflake에서 파일 구조를 기반으로 테이블의 열 정의를 생성하는 데 사용되며, 테이블 열을 구성하는 데 사용할 파일 또는 폴더의 경로를 지정하는 LOCATION 매개 변수가 필요합니다. 그러나 이 경로는 정규식을 지원하지 않으므로 와일드카드 * 문자는 지원되지 않습니다.
테이블에 열이 없는 경우, SnowConvert AI는 모든 URIS를 확인하여 와일드카드를 사용하지 않는 항목을 찾아 INFER_SCHEMA 함수에 사용합니다. 이러한 기준을 충족하는 URI가 없는 경우 FDM 및 FILE_PATH 자리 표시자가 생성됩니다. 이 자리 표시자는 테이블 열을 생성하기 위해 외부 테이블에서 참조하는 파일 중 하나의 경로로 바꿔야 합니다.
코드 예제¶
입력 코드:¶
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json2
OPTIONS(
FORMAT='JSON',
URIS=['gs://sc_external_table_bucket/folder_with_json/*']
);
생성된 코드:¶
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_JSON2_FORMAT
TYPE = JSON;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json2 USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
--** SSC-FDM-0035 - THE INFER_SCHEMA FUNCTION REQUIRES A FILE PATH WITHOUT WILDCARDS TO GENERATE THE TABLE TEMPLATE, REPLACE THE FILE_PATH PLACEHOLDER WITH IT **
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/FILE_PATH', FILE_FORMAT => 'SC_TEST_MY_EXTERNAL_TABLE_JSON2_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_json/.*'
FILE_FORMAT = (TYPE = JSON);
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0036¶
변환된 숫자 및 날짜 형식이 Snowflake에서 다르게 동작할 수 있습니다.
설명¶
Snowflake로 변환된 숫자 형식은 고정 위치 형식을 사용합니다. 변환된 형식은 형식의 자릿수 위치보다 숫자의 정수 부분에 더 많은 자릿수가 있는 경우 실패하고 다른 출력을 생성할 수 있습니다. 모든 자릿수는 오버플로를 나타내기 위해 #으로 인쇄됩니다.
코드 예제¶
입력 코드:¶
Sql Server¶
SELECT
FORMAT(value, '00.00') as formatted,
FORMAT(value, '#,##0') as formatSource
FROM MY_TABLE;
생성된 코드:¶
Snowflake¶
SELECT
TO_CHAR(value, 'FM9999999999900.00') /*** SSC-FDM-0036 - TRANSFORMATION OF '00.00' FORMAT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/ as formatted,
TO_CHAR(value, 'FM9,999,999,999,990') /*** SSC-FDM-0036 - TRANSFORMATION OF '#,##0' FORMAT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/ as formatSource
FROM
MY_TABLE;
결과¶
#############
모범 사례¶
숫자 자릿수가 형식과 맞지 않는 경우 가능한 입력 데이터 값에 따라 더 많은 자릿수를 추가하여 형식을 업데이트합니다.
SSC-FDM-0037¶
Snowflake에는 통계 함수가 필요하지 않습니다.
설명¶
Snowflake에는 DROP, COLLECT 또는 HELP 통계가 필요하지 않습니다. Snowflake는 자동 쿼리 최적화에 사용되는 통계를 이미 수집하고 있습니다.
코드 예시¶
입력 코드:¶
HELP STATISTICS TestName;
생성된 코드¶
----** SSC-FDM-0037 - HELP STATISTICS NOT NEEDED. SNOWFLAKE AUTOMATICALLY COLLECTS STATISTICS. **
--HELP STATISTICS TestName
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
SSC-FDM-0038¶
마이크로 파티셔닝은 모든 Snowflake 테이블에서 자동으로 수행됩니다.
설명¶
이 메시지는 PARTITION BY 절이 있는 경우 CREATE TABLE 문에 추가됩니다. PARTITION BY 절은 일부 데이터베이스에서 테이블 파티셔닝을 제어하며, Snowflake에서 지원되지 않습니다.
Snowflake에서 모든 테이블은 50MB에서 500MB 범위의 압축되지 않은 데이터로 구성된 연속 저장소 단위인 마이크로 파티션으로 자동 분할됩니다. 이 아키텍처를 사용하면 수백만 개의 마이크로 파티션으로 구성될 수 있는 대규모 테이블을 매우 세분적으로 정리할 수 있습니다.
Snowflake는 다음을 포함하여 각 마이크로 파티션에 대한 메타데이터를 자동으로 저장합니다.
마이크로 파티션의 각 열에 대한 값 범위입니다.
고유 값의 수입니다.
최적화 및 효율적인 쿼리 처리에 사용되는 추가 속성입니다.
테이블은 데이터가 삽입되거나 로드되는 순서에 따라 투명하게 분할됩니다. 자세한 내용은 마이크로 파티셔닝의 이점을 참조하세요.
코드 예시¶
입력 코드:¶
CREATE TABLE orders
(
storeid INTEGER NOT NULL,
productid INTEGER NOT NULL,
orderdate DATE FORMAT 'yyyy-mm-dd' NOT NULL,
totalorders INTEGER NOT NULL)
PRIMARY INDEX (storeid, productid)
PARTITION BY (RANGE_N(totalorders BETWEEN *, 100, 1000 AND *),RANGE_N(orderdate BETWEEN *, '2005-12-31' AND *) );
생성된 코드¶
CREATE OR REPLACE TABLE orders
(
storeid INTEGER NOT NULL,
productid INTEGER NOT NULL,
orderdate DATE NOT NULL,
totalorders INTEGER NOT NULL)
-- --** SSC-FDM-0038 - MICRO-PARTITIONING IS AUTOMATICALLY HANDLED ON ALL SNOWFLAKE TABLES **
-- PARTITION BY (RANGE_N(totalorders BETWEEN *, 100, 1000 AND *)
-- ,RANGE_N(orderdate BETWEEN *, '2005-12-31' AND *) )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "09/17/2025", "domain": "no-domain-provided" }}'
;
모범 사례¶
추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.