SnowConvert: 일반적인 함수 차이점¶
SSC-FDM-0001¶
참고
가독성을 높이기 위해 가장 관련성이 높은 부분만 표시하여 코드 예제를 간소화했습니다.
설명¶
필터링 조건 없이 단일 테이블의 모든 열을 선택하는 뷰(WHERE 절)는 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¶
설명¶
이 경고는 지정된 평가 필드의 변환율이 불일치하는 경우 표시됩니다. SC 는 이러한 불일치를 자동으로 해결하므로 이 메시지는 정보 제공 목적으로만 사용됩니다.
참고
이 경고 메시지는 평가 문서에만 표시되며 출력 코드에는 표시되지 않습니다.
모범 사례¶
문제가 발생하면 SnowConvert 에서 자동으로 수정할 수 있지만, SnowConvert 지원팀에 snowconvert-support@Snowflake.com으로 문의하여 도움을 받을 수 있습니다.
SSC-FDM-0004¶
설명¶
이 경고는 외부 처리와 관련된 절에 표시되는데, 이는 Snowflake가 데이터 저장소를 다르게 관리하기 때문입니다. 다른 데이터베이스와 달리, 모든 데이터는 Snowflake의 내부 저장소 시스템 내에 저장되어야 하므로 외부 테이블이 필요하지 않습니다. 이 항목에 대한 자세한 내용은 데이터 저장소 고려 사항을 참조하십시오.
코드 예제¶
입력 코드:¶
CREATE OR REPLACE EXTERNAL TABLE external_table_test1
(
col1 INTEGER
)
OPTIONS (
format = 'CSV',
uris = ['gs://my_bucket/file.csv']
);
생성된 코드:¶
--** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE OR REPLACE TABLE external_table_test1 (
col1 INTEGER
)
-- OPTIONS (
-- format = 'CSV',
-- uris = ['gs://my_bucket/file.csv']
-- )
;
모범 사례¶
외부 테이블 파일의 데이터를 Snowflake 데이터베이스로 가져와야 합니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-0005¶
설명¶
Snowflake의 TIME 데이터 타입은 시간대 정보 없이 시간 구성 요소만 저장합니다.
TIME 은 시계 시간 값을 저장하고 타임존을 고려하지 않고 모든 작업을 수행합니다. 자세한 내용은 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¶
설명¶
이 메시지는 테이블에 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;
Snowflake에서 SELECT
문을 실행하면 오류 메시지가 표시됩니다.
숫자가 데이터 타입 FIXEDSB16 (null 가능)에 허용된 범위를 초과합니다. 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 에서는 숫자의 기본 스케일을 18로 자동 설정합니다.
모범 사례¶
작업의 중간 값이 Snowflake의 최대 스케일인 37을 초과하지 않는지 확인하십시오.
데이터 샘플을 분석하여 작업을 실행하기 전에 필수 전체 자릿수 및 스케일 설정을 확인하십시오.
데이터 샘플링이나 비즈니스 논의를 통해 다른 전체 자릿수 설정이 더 적합하다는 것을 알게 되는 경우가 종종 있습니다. 예를 들어,
MONEY
열은 일반적으로NUMBER(20,4)
를 사용합니다. Snowflake에서 열 데이터 타입을 변경하는 것은 간단하지 않으므로 데이터를 보존하면서 열 데이터 타입을 수정하는 방법에 대한 안내는 포럼의 게시물 을 참조하십시오.추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-0007¶
참고
코드 스니펫이 핵심 개념에 집중하도록 간소화되었습니다
설명¶
SnowConvert 에서 필수인 종속성을 찾지 못하거나 특정 데이터 타입을 해결할 수 없는 경우 배포 오류가 발생할 수 있습니다. 이는 종속성 오브젝트가 소스 코드에서 누락된 경우 발생할 수 있습니다.
코드 예시¶
입력 코드:¶
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¶
참고
가독성을 높이기 위해 이 예제에서는 코드의 일부 섹션을 간소화했습니다.
설명 ¶
Snowflake에서 테이블을 생성할 때 ON COMMIT 절은 임시 테이블에만 사용할 수 있습니다. 임시 테이블이 아닌 테이블 정의에 ON COMMIT 절을 포함하면 변환된 코드에서 설명이 생략됩니다. 또한 Snowflake는 ON COMMIT DELETE 를 지원하지 않으므로 이 옵션도 변환 중에 설명이 추가됩니다.
코드 예시¶
입력 코드¶
CREATE TABLE TABLE01 (COLNAME VARCHAR(20)) ON COMMIT PRESERVE ROWS
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
생성된 코드¶
CREATE OR REPLACE TABLE TABLE01 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT PRESERVE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
모범 사례¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-0009¶
설명 ¶
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 가 열의 데이터 타입이 DATE 또는 TIMESTAMP 가 아닌 DEFAULT SYSDATE 절을 감지할 때 표시됩니다. 이러한 경우 SnowConvert 는 데이터 타입을 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¶
참고
이 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¶
설명 ¶
이 경고는 열의 기본 식에 제약 조건 제약 조건 이름 이 사용될 때 표시됩니다. Snowflake는 기본 식에서 제약 조건을 지원하지 않으므로 제약 조건과 해당 제약 조건 이름 이 자동으로 제거되고 경고 메시지가 생성됩니다.
코드 예시¶
입력 코드¶
CREATE TABLE TABLE1 (
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL
);
생성된 코드¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10)
--** SSC-FDM-0012 - CONSTRAINT IN DEFAULT EXPRESSION IS NOT SUPPORTED IN SNOWFLAKE **
DEFAULT ('0') NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
모범 사례¶
사용자의 작업이 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-0013¶
설명 ¶
변환 중에 시간대 식을 평가할 수 없는 경우를 강조하기 위해 경고 메시지가 추가되었습니다. SnowConvert 는 리터럴 시간대 문자열을 해당 Snowflake에 해당하는 시간대 값으로 성공적으로 매핑할 수 있지만, 식을 통해 지정된 시간대 값은 확인할 수 없습니다. 이 제한은 동적 시간대 식을 사용할 때 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¶
참고
이 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 /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
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 기능을 활성화하면 프로시저 내의 모든 상수가 자동으로 변수로 변환됩니다.
코드 예시¶
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¶
설명¶
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 기능을 사용하면 지정된 기간 내에 변경되거나 삭제된 데이터를 포함한 과거 데이터에 액세스할 수 있습니다. 이 기능을 사용하면 가능합니다.
실수로 또는 의도적으로 삭제된 데이터 오브젝트(테이블, 스키마 및 데이터베이스) 복구
특정 시점의 데이터 복사본 및 백업 생성하기
시간이 지남에 따라 데이터가 어떻게 사용되거나 수정되었는지 추적하고 분석하십시오
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-0018¶
설명¶
열에 저장할 수 있는 허용 문자를 정의하는 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 가 특정 오브젝트의 의미 체계 정보에 액세스할 수 없음을 나타냅니다. 이는 일반적으로 코드에 동일한 이름을 가진 오브젝트가 여러 개 있을 때 발생합니다. 이 경우 SnowConvert 는 오브젝트의 의미 체계 정보를 제대로 분석할 수 없습니다.
코드 예시¶
입력 코드:¶
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의 동작과 유사), 결과는 임시 테이블에 저장됩니다. 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 를 사용할 때 인덱스 생성과 관련된 코드는 Snowflake에서 필요하지 않으므로 설명이 생략됩니다. 이러한 마이크로 파티션은 수동 관리 없이 DML 작업 속도를 자동으로 개선합니다.
이 구성은 일반적으로 좋은 쿼리 성능을 제공하지만, 데이터 클러스터링 키를 구현하여 성능을 더욱 최적화할 수 있습니다. 마이크로 파티션 및 데이터 클러스터링에 대한 자세한 내용은 마이크로 파티션 & 데이터 클러스터링)을 참조하십시오.
코드 예시¶
입력 코드(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¶
심각도¶
불량
설명¶
지원되지 않는 윈도우 프레임 단위가 행으로 변환되어 출력에 차이가 발생할 수 있는 경우 경고가 표시됩니다. 예를 들어, Snowflake는 GROUPS 단위를 지원하지 않으므로 행으로 변환해야 합니다.
이 메시지는 윈도우 프레임 유닛이 완전히 지원되지 않거나 수정이 필요한 경우에 표시됩니다. 여기에는 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에서 실행할 때 일관된 행 순서를 유지하려면 쿼리에 ORDER BY 절을 추가하십시오.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-FDM-0023¶
심각도¶
중급
설명¶
SnowConvert 는 글로벌 임시 테이블을 표준 Create Table 문으로 변환합니다. 이러한 변환된 테이블에 대한 참조는 원래 의도한 대로 작동하지 않을 수 있습니다.
코드 예제¶
입력¶
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¶
참고
이 FDM
기능은 더 이상 지원되지 않습니다. 자세한 내용은 SSC-EWI-0058을 참조하십시오.
설명¶
이 오류는 Snowflake Scripting에서 CREATE PROCEDURE 명령 내에서 지원되지 않는 문을 사용하려고 할 때 발생합니다.
코드 예시¶
입력 코드(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¶
참고
이 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로 변환될 수 없음을 나타냅니다. 이 문은 더 이상 필요하지 않으며 변환된 코드에서 제거됩니다. 단, SC 에는 참조를 위해 원래 문을 설명으로 보존합니다.
코드 예시¶
입력 코드:¶
.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 Python Helpers version 2.0.6 ***
// SnowConvert 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의 사용자 정의 함수는 Oracle 또는 SQL 서버와 다른 함수를 가지고 있습니다. 이러한 기능을 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¶
설명¶
Snowflake는 구체화된 뷰(및 Teradata의 조인 인덱스)를 동적 테이블로 변환합니다. Snowflake에서 동적 테이블을 만들 때는 2개의 필수 매개 변수를 지정해야 합니다.
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 는 매개 변수 값을 확인해야 합니다. 이 검증 프로세스는 매개 변수에 변수나 식이 아닌 실제 값(리터럴)이 포함되어 있을 때만 완료할 수 있습니다.
이 경고는 SnowConvert 매개 변수가 참조로 전달되었기 때문에 값을 확인할 수 없을 때 표시됩니다. 결과적으로 함수나 문을 완전히 변환할 수 없습니다.
코드 예시¶
입력 코드(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¶
설명¶
이 메시지는 Teradata와 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으로 문의해 주십시오.