SnowConvert: SQLServer 문제¶
SSC-EWI-TS0060¶
심각도¶
Medium
설명¶
이 경고는 지원되지 않는 시간 구성 요소를 Snowflake의 날짜 관련 함수에서 매개 변수로 사용할 때 표시됩니다. 지원되는 날짜 및 시간 구성 요소의 전체 목록은 날짜 & 시간 함수 | Snowflake 설명서 를 참조하십시오.
코드 예제¶
입력 코드¶
SELECT
-- Supported
DATEPART(second, getdate()),
-- Not supported
DATEPART(millisecond, getdate()),
DATEPART(microsecond, getdate());
출력 코드:¶
SELECT
-- Supported
DATE_PART(second, CURRENT_TIMESTAMP() :: TIMESTAMP),
-- Not supported
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0060 - TIME PART 'millisecond' NOT SUPPORTED AS A FUNCTION PARAMETER ***/!!!
DATEPART(millisecond, CURRENT_TIMESTAMP() :: TIMESTAMP),
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0060 - TIME PART 'microsecond' NOT SUPPORTED AS A FUNCTION PARAMETER ***/!!!
DATEPART(microsecond, CURRENT_TIMESTAMP() :: TIMESTAMP);
권장 사항¶
사용자 정의 함수(UDF)를 생성하여 Snowflake에서 직접 지원되지 않는 시간 구성 요소를 수동으로 추출할 수 있습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0070¶
EWI
기능은 더 이상 사용되지 않습니다. 최신 정보는 SSC-FDM-TS0024 설명서를 참조하십시오.
설명¶
AT TIME ZONE 절과 함께 CURRENT_TIMESTAMP 를 사용할 때 이 경고가 표시됩니다. 이 경고는 CURRENT_TIMESTAMP 의 동적 특성으로 인해 여러 시나리오에서 결과가 일관되지 않을 수 있음을 나타냅니다.
Microsoft SQL 서버와 Snowflake CURRENT_TIMESTAMP 함수의 핵심적인 차이점은 타임존 처리입니다.
SQL 서버: 서버: 서버의 현지 타임존을 기준으로 시스템 날짜 및 시간을 반환합니다
Snowflake: UTC (협정 세계시)의 날짜와 시간을 반환합니다
¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:52:55.317 -10:00
¶
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', CURRENT_TIMESTAMP() !!!RESOLVE EWI!!! /*** SSC-EWI-TS0070 - CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases ***/!!!);
2024-02-08 06:53:46.994 -1000
권장 사항¶
다음은 Snowflake에서 일관된 형식을 유지하는 방법의 예입니다.
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:33:49.143 -10:00
Snowflake에서는 ALTERSESSION 명령을 사용하여 기본 타임존을 수정할 수 있습니다. 예:
ALTER SESSION SET TIMEZONE = 'Pacific/Honolulu';
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', 'UTC', CURRENT_TIMESTAMP());
2024-02-08 16:33:49.143
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0044¶
심각도¶
중요
예제를 명확하고 간결하게 하기 위해 코드의 일부가 생략되었습니다.
설명¶
이 경고는 Snowflake SQL 에서 사용할 수 없는 FORXML 절을 사용할 때 표시됩니다.
코드 예제¶
입력 코드:¶
SELECT TOP 1 LastName
FROM AdventureWorks2019.Person.Person
FOR XML AUTO;
출력 코드:¶
SELECT TOP 1
LastName
FROM
AdventureWorks2019.Person.Person
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML AUTO CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML AUTO;
권장 사항¶
사용자 정의 함수(UDFs)를 사용하여 소스 코드의 기능을 복제하는 것도 고려해 보십시오. 다음은 원래 동작을 재현하는 데 도움이 될 수 있는 UDFs 의 예시입니다.
SQL 서버
CREATE TABLE TEMPTABLE (Ref INT, Des NVARCHAR(100), Qty INT)
INSERT INTO tempTable VALUES (100001, 'Normal', 1), (100002, 'Foobar', 1), (100003, 'Hello World', 2)
GO
-- FOR XML
SELECT *
FROM TempTable
FOR XML AUTO
GO
-- FOR XML RAW
SELECT *
FROM TempTable
FOR XML RAW
-- FOR XML
<TempTable Ref="100001" Des="Normal" Qty="1"/><TempTable Ref="100002" Des="Foobar" Qty="1"/><TempTable Ref="100003" Des="Hello World" Qty="2"/>
-- FOR XML RAW
<row Ref="100001" Des="Normal" Qty="1"/><row Ref="100002" Des="Foobar" Qty="1"/><row Ref="100003" Des="Hello World" Qty="2"/>
Snowflake¶
CREATE OR REPLACE TABLE TEMPTABLE (
Ref INT,
Des VARCHAR(100),
Qty INT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
INSERT INTO tempTable VALUES (100001, 'Normal', 1), (100002, 'Foobar', 1), (100003, 'Hello World', 2);
-- FOR XML
SELECT
*
FROM
TempTable
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML AUTO CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML AUTO;
-- FOR XML RAW
SELECT
*
FROM
TempTable
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW;
-- FOR XML
<TempTable DES="Normal" QTY="1" REF="100001" /><TempTable DES="Foobar" QTY="1" REF="100002" /><TempTable DES="Hello World" QTY="2" REF="100003" />
-- FOR XML RAW
<row DES="Normal" QTY="1" REF="100001" /><row DES="Foobar" QTY="1" REF="100002" /><row DES="Hello World" QTY="2" REF="100003" />
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0035¶
심각도¶
Medium
예제를 더 명확하고 이해하기 쉽게 하기 위해 코드의 일부가 제거되었습니다.
설명¶
현재 Snowflake는 선언되었지만 초기화되지 않은 커서 변수를 지원하지 않습니다. 그 결과 조기 경고 표시기(EWI)가 추가되었으며 관련 코드에 대한 설명이 추가되었습니다.
코드 예제¶
입력 코드:¶
CREATE OR ALTER PROCEDURE notInitializedCursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0035
DECLARE @MyCursor CURSOR, @MyCursor2 CURSOR;
-- Should not be marked
DECLARE cursorVar CURSOR FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT someCol
FROM someTable;
RETURN 'DONE';
END;
출력 코드:¶
CREATE OR REPLACE PROCEDURE notInitializedCursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-EWI-TS0035
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0035 - CURSOR VARIABLE DECLARED BUT NEVER INITIALIZED, THIS IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
MYCURSOR CURSOR;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0035 - CURSOR VARIABLE DECLARED BUT NEVER INITIALIZED, THIS IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
MYCURSOR2 CURSOR;
-- Should not be marked
cursorVar CURSOR
FOR
SELECT
someCol
FROM
someTable;
BEGIN
RETURN 'DONE';
END;
$$;
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0001¶
심각도¶
중요
예제를 더 명확하고 쉽게 따라할 수 있도록 출력 코드의 일부가 제거되었습니다.
설명¶
이 오류 경고 표시기(EWI)는 SnowConvert 변환 중에 함수 본문을 생성할 수 없는 심각한 오류가 발생하면 표시됩니다.
코드 예시¶
SQL 서버¶
CREATE FUNCTION func1 ()
RETURNS VARCHAR
SELECT
*
FROM
TABLE1
Snowflake¶
CREATE OR REPLACE FUNCTION func1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0001 - THE BODY WAS NOT GENERATED FOR FUNCTION 'func1' ***/!!!
AS
$$
$$;
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0025¶
심각도¶
낮음
-t JavaScript
또는 --PLTargetLanguage JavaScript
플래그를 명령에 추가하여 JavaScript 에서 프로시저 및 매크로를 생성합니다.
예제를 더 명확하고 쉽게 따라할 수 있도록 출력 코드의 일부가 제거되었습니다.
설명¶
이 조기 경고 표시기(EWI)는 ERROR_SEVERITY 기본 제공 함수를 변환할 때 나타납니다. 이 함수는 SQL 서버에서 가장 일반적인 심각도 수준을 나타내는 기본값 16을 반환합니다. 생성된 사용자 정의 함수(UDF)에서 이 값을 검색해야 합니다.
코드 예제¶
입력 코드:¶
-- Additional Params: -t JavaScript
CREATE procedure proc1()
as
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0 from table1;
END TRY
BEGIN CATCH
return ERROR_SEVERITY();
END CATCH;
GO
출력 코드:¶
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
try {
EXEC(` -- Generate a divide-by-zero error.
SELECT
TRUNC( 1/0) from
table1`);
} catch(error) {
return SELECT(` !!!RESOLVE EWI!!! /*** SSC-EWI-TS0025 - CUSTOM UDF 'ERROR_SEVERITY_UDF' INSERTED FOR ERROR_SEVERITY FUNCTION. ***/!!!
ERROR_SEVERITY_UDF()`);
}
$$;
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0074¶
심각도¶
낮음
예제를 명확하고 간결하게 하기 위해 코드의 일부가 생략되었습니다.
설명¶
이 경고는 TRY_CAST 및 TRY_CONVERT 함수를 변환하는 동안 표시됩니다. 일부 데이터 타입 종속성을 해결할 수 없기 때문에 Snowflake의 결과가 원본과 다를 수 있습니다. 이는 일반적으로 필수가 소스 코드에 없는 종속성이 있을 때 발생합니다.
입력 코드:¶
SELECT TRY_CONVERT( INT, col1) FROM TABLE1;
SELECT TRY_CAST(COL1 AS FLOAT) FROM TABLE1
출력 코드¶
SELECT
CAST(col1 AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/!!!RESOLVE EWI!!! /*** SSC-EWI-TS0074 - CAST RESULT MAY BE DIFFERENT FROM TRY_CONVERT FUNCTION DUE TO MISSING DEPENDENCIES ***/!!!
FROM
TABLE1;
SELECT
CAST(COL1 AS FLOAT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/!!!RESOLVE EWI!!! /*** SSC-EWI-TS0074 - CAST RESULT MAY BE DIFFERENT FROM TRY_CAST FUNCTION DUE TO MISSING DEPENDENCIES ***/!!!
FROM
TABLE1;
권장 사항¶
기술 지원이 필요한 경우 지원팀에 snowconvert-support@Snowflake.com으로 문의하시기 바랍니다.
SSC-EWI-TS0034¶
심각도¶
높음
설명¶
이 경고는 코드 변환 중에 SnowConvert 에서 함수의 RETURNS TABLE
절에 대한 열 구조를 자동으로 확인할 수 없을 때 표시됩니다. 결과적으로 생성된 코드에서 RETURNS TABLE
절은 비어 있습니다. 이는 일반적으로 원본 소스 코드에서 열 정보를 유추할 수 없는 경우에 발생합니다.
코드 예제¶
입력 코드:¶
CREATE FUNCTION Sales.ufn_SalesByStore2()
RETURNS TABLE
AS
RETURN
(
WITH CTE AS (
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
)
SELECT tab.* FROM CTE tab
);
GO
SELECT * FROM GetDepartmentInfo();
출력 코드:¶
CREATE OR REPLACE FUNCTION Sales.ufn_SalesByStore2 ()
RETURNS TABLE(
DepartmentID STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN DepartmentID WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
Name STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN Name WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
GroupName STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN GroupName WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
AS
$$
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH CTE AS (
SELECT
DepartmentID,
Name,
GroupName
FROM
HumanResources.Department
)
SELECT tab.* FROM
CTE tab
$$;
SELECT
*
FROM GetDepartmentInfo() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'TableValuedFunctionCall' NODE ***/!!!;
권장 사항¶
이 문제를 해결하려면 코드에서 모든 필수 오브젝트에 액세스할 수 있는지 확인하십시오. 필요한 모든 오브젝트가 사용 가능한지 확인한 후에도 문제가 계속되면, 당사에 문의하여 구체적인 사용 사례에 대한 세부 사항을 알아보십시오.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 이메일을 보내주십시오.
SSC-EWI-TS0041¶
심각도¶
Medium
설명¶
이 조기 경고 표시기(EWI)는 현재 Snowflake SQL에서 사용할 수 없는 다음 XML 데이터 타입 메서드 에 적용됩니다.
Value: 변수 또는 필드에 저장된 실제 데이터 또는 내용입니다
Query: 데이터베이스에서 특정 정보를 검색하는 요청입니다
Exist: 특정 요소 또는 조건이 있는지 확인합니다
Modify: 기존 데이터 또는 설정을 변경하거나 업데이트하려면 다음과 같이 하십시오
Nodes: 데이터 구조 내의 개별 요소 또는 연결 지점
코드 예제¶
입력 코드:¶
CREATE PROCEDURE xml_procedure
@inUserGroupsXML XML
AS
BEGIN
SELECT entities.entity.value('TypeID[1]', 'VARCHAR(100)') AS TypeID
,entities.entity.value('Name[1]', 'VARCHAR(100)') AS Name
INTO #tmpUserGroups
FROM @inUserGroupsXML.nodes('/entities/entity') entities(entity)
END;
출력 코드:¶
CREATE OR REPLACE PROCEDURE xml_procedure (INUSERGROUPSXML TEXT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
CREATE OR REPLACE TEMPORARY TABLE T_tmpUserGroups AS
SELECT
XMLGET(entity, '$') :: VARCHAR(100) AS TypeID
,
XMLGET(entity, '$') :: VARCHAR(100) AS Name
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0041 - XML TYPE METHOD nodes IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
T_inUserGroupsXML('/entities/entity') entities (
entity
);
END;
$$;
권장 사항¶
사용자 정의 함수(UDFs)를 사용하여 원본 소스 코드의 기능을 복제합니다
Snowflake에서 XML 데이터 타입을 처리하는 방법에 대한 지침은 이 설명서를 검토 하십시오.
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0010¶
예제를 더 명확하고 쉽게 따라할 수 있도록 출력 코드의 일부가 제거되었습니다.
심각도¶
높음
설명¶
이 오류는 뷰 내에서 공통 테이블 식(CTE)을 잘못 사용할 때 발생합니다. 뷰는 데이터를 수정하는 방법보다는 데이터를 검색하고 표시하는 방법을 정의하는 쿼리의 읽기 전용 표현입니다.
코드 예제¶
입력 코드:¶
Create View viewName
as
with commonTableExpressionName (
columnName
) as
(
select
1
)
((select
1 as col2)
union
(
select
1 as col3
));
출력 코드:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0010 - COMMON TABLE EXPRESSION IN VIEW NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE VIEW viewName
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
AS
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH CTE NOT SUPPORTED IN SNOWFLAKE ***/!!!
with commonTableExpressionName (
columnName
) as
(
select
1
)
((select
1 as col2)
union
(
select
1 as col3
));
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0024¶
심각도¶
낮음
설명¶
이 경고는 저장 프로시저 내에서 BULK INSERT
작업을 감지할 수 없을 때 표시됩니다. 결과적으로 전체 변환의 필수 종속성이 생성되지 않습니다. 또한 변환된 COPY INTO
명령은 사용자가 수동으로 생성해야 하는 tempStage
에서 파일을 검색하려고 시도합니다.
코드 예제¶
입력 코드:¶
CREATE PROCEDURE BULK_PROC2
AS
BULK INSERT dbo.table1 FROM 'E:\test.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n'
);
GO
출력 코드:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638461207064166040
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n';
CREATE OR REPLACE STAGE STAGE_638461207064166040
FILE_FORMAT = FILE_FORMAT_638461207064166040;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://E:\test.txt @STAGE_638461207064166040 AUTO_COMPRESS = FALSE;
CREATE OR REPLACE PROCEDURE BULK_PROC2 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// REGION SnowConvert Helpers Code
// END REGION
EXEC(`COPY INTO dbo.table1 FROM @STAGE_638461207064166040/test.txt`);
$$
권장 사항¶
먼저 STAGE 및 FILE FORMAT 을 생성하여 파일에 액세스합니다.
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0075¶
심각도¶
Medium
설명¶
기본 제공 프로시저 변환은 현재 사용할 수 없습니다.
코드 예시¶
입력 코드:¶
EXEC sp_column_privileges_rowset_rmt 'Caption';
출력 코드:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0075 - TRANSLATION FOR BUILT-IN PROCEDURE 'sp_column_privileges_rowset_rmt' IS NOT CURRENTLY SUPPORTED. ***/!!!
EXEC sp_column_privileges_rowset_rmt 'Caption';
권장 사항¶
사용자의 작업이 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0055¶
이 조기 경고 표시기(EWI)는 더 이상 사용되지 않습니다. 업데이트된 정보는 SSC-FDM-TS0020에서 확인할 수 있습니다.
심각도¶
Medium
설명¶
이 경고는 테이블 변경 문에서 기본 제약 조건이 발견될 때 표시됩니다.
현재 이 제약 조건 유형은 지원되지 않습니다. 그러나 테이블이 테이블 변경 문 앞에 정의된 경우 참조를 식별하고 기본 제약 조건을 테이블 정의와 결합할 수 있는 해결 방법이 있습니다. 이것이 가능하지 않은 경우 변환된 코드에서 제약 조건이 설명됩니다.
코드 예제¶
입력 코드:¶
CREATE TABLE table1(
col1 integer,
col2 varchar collate Latin1_General_CS,
col3 date
);
ALTER TABLE table1
ADD col4 integer,
CONSTRAINT col1_constraint DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint DEFAULT 30 FOR col1;
출력 코드:¶
CREATE OR REPLACE TABLE table1 (
col1 INTEGER DEFAULT 50,
col2 VARCHAR COLLATE 'EN-CS',
col3 DATE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
ALTER TABLE table1
ADD col4 INTEGER,
CONSTRAINT col1_constraint
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0055 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION ***/!!!
DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0055 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION ***/!!!
DEFAULT 30 FOR col1;
테이블 변경 명령 내의 모든 문이 유효하지 않은 경우 변환된 코드에서 전체 테이블 변경 명령이 설명됩니다.
Known Issues¶
동일한 열에 대해 여러 기본 제약 조건이 정의된 경우 첫 번째 제약 조건만 Create Table 문에 포함됩니다.
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0061¶
심각도¶
Medium
예제를 더 명확하고 이해하기 쉽게 하기 위해 코드의 일부가 제거되었습니다.
설명¶
이 경고는 지원되지 않는 ALTER COLUMN 문이 감지되면 표시됩니다.
코드 예제¶
입력 코드:¶
ALTER TABLE SampleTable
ALTER COLUMN SampleColumn INT NULL SPARSE;
출력 코드:¶
ALTER TABLE IF EXISTS SampleTable
ALTER COLUMN SampleColumn
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0061 - ALTER COLUMN COMMENTED OUT BECAUSE SPARSE COLUMN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
INT NULL SPARSE;
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0045¶
심각도¶
낮음
예제를 명확하고 간결하게 유지하기 위해 코드 출력의 일부가 제거되었습니다.
설명¶
이 조기 경고 문제(EWI)는 SQL Server의 GOTO 문에 의해 참조되는 모든 레이블 이름에 대해 생성됩니다.
코드 예제¶
입력 코드:¶
CREATE PROCEDURE GoToProcedure
AS
BEGIN
DECLARE @TotalMaarks INT
SET @TotalMaarks = 49
IF @TotalMaarks >= 50
GOTO Pass
IF @TotalMaarks < 50
GOTO Fail
Pass:
SELECT 1;
SELECT * FROM TABLE1;
RETURN 1;
Fail:
SELECT 2;
SELECT * FROM TABLE2;
RETURN 2;
END
출력 코드:¶
CREATE OR REPLACE PROCEDURE GoToProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
TOTALMAARKS INT;
BEGIN
TOTALMAARKS := 49;
IF (:TOTALMAARKS >= 50) THEN
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'GOTO' NODE ***/!!!
GOTO Pass
END IF;
IF (:TOTALMAARKS < 50) THEN
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'GOTO' NODE ***/!!!
GOTO Fail
END IF;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0045 - LABELED STATEMENT IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
Pass:
SELECT 1;
SELECT
*
FROM
TABLE1;
RETURN 1;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0045 - LABELED STATEMENT IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
Fail:
SELECT 2;
SELECT
*
FROM
TABLE2;
RETURN 2;
END;
$$;
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
관련 EWI¶
SSC-EWI-0073: 이 코드는 기능적 동등성을 보장하기 위해 검토가 필요합니다.
SSC-EWI-TS0009¶
예제를 더 명확하고 쉽게 따라할 수 있도록 출력 코드의 일부가 제거되었습니다.
심각도¶
높음
설명¶
이 오류는 SQL 서버의 기존 트랜잭션 내에서 새 트랜잭션이 시작될 때 발생하는 중첩된 트랜잭션이 있음을 나타냅니다. 첫 번째 문에 이어 BEGIN 문을 추가로 실행하면 새 트랜잭션이 생성되고 트랜잭션 카운터가 1개씩 증가합니다.
Snowflake는 중첩 트랜잭션을 지원하지 않습니다. 두 번째 BEGIN 문을 사용하면 이 문은 무시되고 1개의 트랜잭션만 유지됩니다. SQL 서버 트랜잭션 동작에 대한 자세한 내용은 SQL 서버 트랜잭션 을 참조하십시오.
코드 예제¶
입력 코드:¶
CREATE PROC transactionsTest
AS
BEGIN TRANSACTION
SELECT @@TRANCOUNT AS TransactionCount_AfterFirstTransaction
INSERT INTO TESTSCHEMA.TESTTABLE(ID) VALUES (1), (2)
BEGIN TRANSACTION
SELECT @@TRANCOUNT AS TransactionCount_AfterSecondTransaction
INSERT INTO TESTSCHEMA.TESTTABLE(ID) VALUES (3), (4)
COMMIT;
SELECT @@TRANCOUNT AS TransactionCount_AfterFirstCommit
COMMIT;
END;
출력 코드:¶
CREATE OR REPLACE PROCEDURE transactionsTest ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
ProcedureResultSet3 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0009 - THE FOLLOWING TRANSACTION MAY CONTAIN NESTED TRANSACTIONS WHICH ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
BEGIN TRANSACTION;
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterFirstTransaction;
return_arr := array_append(return_arr, :ProcedureResultSet1);
INSERT INTO TESTSCHEMA.TESTTABLE (ID) VALUES (1), (2);
BEGIN TRANSACTION;
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterSecondTransaction;
return_arr := array_append(return_arr, :ProcedureResultSet2);
INSERT INTO TESTSCHEMA.TESTTABLE (ID) VALUES (3), (4);
COMMIT;
ProcedureResultSet3 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet3) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterFirstCommit;
return_arr := array_append(return_arr, :ProcedureResultSet3);
COMMIT;
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '12' COLUMN '1' OF THE SOURCE CODE STARTING AT 'END'. EXPECTED 'BATCH' GRAMMAR. CODE '80'. **
--END
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
;
권장 사항¶
Snowflake는 컴파일 오류를 생성하는 대신 중첩된 트랜잭션을 무시합니다. 평가 보고서를 검토하여 코드에서 중첩된 트랜잭션을 식별할 수 있습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
관련 EWI¶
SSC-FDM-0020: 여러 쿼리 결과가 임시 테이블에 저장됩니다
SSC-EWI-0001: 소스 코드 라인에서 알 수 없거나 잘못된 토큰을 발견했습니다
SSC-EWI-0040: 문이 지원되지 않습니다
SSC-EWI-TS0039¶
심각도¶
Medium
설명¶
이 경고는 동일한 커서에 대해 여러 개의 SET 문이 발견되면 표시됩니다. Snowflake Scripting에서는 커서 1개당 1개의 SET 문만 가질 수 있습니다. 동일한 커서에 대한 추가 SET 문은 변환 중에 자동으로 설명이 생략됩니다.
코드 예시:¶
입력 코드:¶
CREATE OR ALTER PROCEDURE multipleSetExample
AS
BEGIN
DECLARE @MyCursor CURSOR;
DECLARE @MyCursor2 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
DECLARE @MyCursor3 CURSOR;
SET @MyCursor = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
SET @MyCursor3 = CURSOR STATIC READ_ONLY
FOR
SELECT *
FROM someTable;
SET @MyCursor = CURSOR DYNAMIC
FOR
SELECT col2
FROM exampleTable;
SET @MyCursor2 = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
RETURN 'DONE';
END;
출력 코드:¶
CREATE OR REPLACE PROCEDURE multipleSetExample ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
MYCURSOR CURSOR
FOR
SELECT col3
FROM defaultTable;
MYCURSOR2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
MYCURSOR3 CURSOR
FOR
SELECT *
FROM someTable;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TS0039 - CURSOR VARIABLE MYCURSOR SET MULTIPLE TIMES, THIS IS NOT VALID IN SNOWFLAKE SCRIPTING ***/!!!
SET @MyCursor = CURSOR DYNAMIC
FOR
SELECT col2
FROM exampleTable;
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TS0039 - CURSOR VARIABLE MYCURSOR2 SET MULTIPLE TIMES, THIS IS NOT VALID IN SNOWFLAKE SCRIPTING ***/!!!
SET @MyCursor2 = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
RETURN 'DONE';
END;
$$;
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0078¶
심각도¶
Medium
설명¶
이 오류는 함수 호출, 변수 이름 또는 명명된 상수와 같은 식이 스위치 문에서 기본 대소문 뒤에 위치할 때 발생합니다.
Snowflake는 숫자나 문자열과 같은 명시적 상수 값만 입력으로 허용합니다.
코드 예제¶
입력 코드:¶
ALTER TABLE
T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER DEFAULT RANDOM(10);
출력 코드:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "T_ALTERTABLETEST", "RANDOM" **
ALTER TABLE IF EXISTS T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0078 - DEFAULT OPTION NOT ALLOWED IN SNOWFLAKE ***/!!!
DEFAULT RANDOM(10);
¶
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0079¶
심각도¶
Medium
설명¶
이 경고는 SnowConvert 가 소스 코드에서 DBCC (데이터베이스 콘솔 명령) 문을 감지하면 표시됩니다. DBCC 문은 일반적으로 Snowflake의 아키텍처와 호환되지 않는 데이터베이스 유지 관리 명령어입니다.
코드 예제¶
입력 코드:¶
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
출력 코드:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0079 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. ***/!!!
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS;
권장 사항¶
이 메시지는 사용자의 작업이 필요하지 않은 정보 제공 메시지입니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0049¶
이해하기 쉽도록 코드의 일부가 제거되었습니다.
심각도¶
Medium
설명¶
Begin ... End
블록이 포함된 대부분의 IF
문은 지원되며 SSC-EWI-TS0049 오류가 발생하지 않고 성공적으로 실행됩니다.
코드 예제¶
입력 코드:¶
CREATE OR ALTER FUNCTION [PURCHASING].[FOO](@status INT)
Returns INT
As
Begin
declare @result as int = 10;
SELECT @result = quantity FROM TABLE1 WHERE COL1 = @status;
IF @result = 3
BEGIN
IF @result>0 SELECT @result=0 ELSE SELECT @result=1
SELECT @result = 1
END
return @result;
End
출력 코드:¶
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO (STATUS INT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
RESULT INT := 10;
BEGIN
SELECT
quantity
INTO
:RESULT
FROM
TABLE1
WHERE
COL1 = :STATUS;
IF (:RESULT = 3) THEN
BEGIN
IF (:RESULT >0) THEN SELECT
0
INTO
:RESULT;
ELSE
SELECT
1
INTO
:RESULT;
END IF;
SELECT
1
INTO
:RESULT;
END;
END IF;
RETURN :RESULT;
END;
$$;
위와 같은 기본 코드 예시를 사용하면 변환이 올바르게 작동합니다. 그러나 특정 엣지의 경우 “IF” 문이 올바르게 변환되지 않아 EWI (오류, 경고 또는 정보) 메시지가 생성됩니다.
수동 지원¶
케이스 1: 단일 문¶
이러한 시나리오에서는 변환된 문이 SELECT 절의 일부가 되므로 변환이 간단합니다.
IF @result = 0
BEGIN
SET @result =1
END
CASE WHEN (SELECT RESULT FROM CTE2)= 0 THEN
( SELECT 1 AS RESULT )
케이스 2: 여러 개의 문¶
여러 개의 SQL 문을 변환할 때는 순차적으로 변환하십시오. 첫 번째 문 (N)부터 시작하여 그 출력을 다음 문 (N+1)의 소스 테이블로 사용합니다.
IF @result = 0
BEGIN
Statement1
Statement2
Statement3
END
CASE WHEN (SELECT RESULT FROM CTE2)= 0 THEN
(
SELECT TransformedStatement3
FROM (
SELECT TransformedStatement2
FROM (
SELECT TransformedStatement1
) T1
) T2
)
케이스 3: 여러 세트 문¶
이러한 상황에서는 각 SET 문에 대해 별도의 변환을 생성해야 합니다.
IF @result = 0
BEGIN
SET @var1 = 1
SET @var2 = 3
SET @var3 = @var2
END
WITH CTE1 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0) = 0 THEN
(SELECT 1) AS VAR1)
WITH CTE2 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0)= 0 THEN
(SELECT 3) AS VAR2)
WITH CTE3 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0)= 0 THEN
(SELECT T1.VAR2
FROM ((SELECT 3) AS VAR2) AS T1) AS VAR3)
...
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0037¶
심각도¶
Medium
예제를 더 명확하고 쉽게 따라할 수 있도록 코드의 일부가 제거되었습니다.
설명¶
Snowflake Scripting의 커서는 결과 세트를 통해서만 앞으로 이동할 수 있습니다(스크롤 불가). FETCH NEXT 에서만 레코드를 한 번에 1개씩 검색할 수 있습니다.
코드 예제¶
입력 코드:¶
CREATE OR ALTER PROCEDURE scrollablecursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0037
DECLARE CursorVar CURSOR SCROLL STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
-- Should not be marked
DECLARE CursorVar2 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar3 CURSOR FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
RETURN 'DONE';
END;
출력 코드:¶
CREATE OR REPLACE PROCEDURE scrollablecursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-EWI-TS0037
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0037 - SNOWFLAKE SCRIPTING CURSORS ARE NON-SCROLLABLE, ONLY FETCH NEXT IS SUPPORTED ***/!!!
CursorVar CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
-- Should not be marked
CursorVar2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
CursorVar3 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
BEGIN
RETURN 'DONE';
END;
$$;
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0013¶
이 경고는 더 이상 유효하지 않습니다. 최신 설명서는 SSC-FDM-TS0013를 참조하십시오.
심각도¶
낮음
설명¶
이 경고는 SQL 서버 계산 열을 Snowflake로 변환할 때 표시됩니다. 변환 후 기능이 정확히 동일하지 않을 수 있음을 경고합니다.
코드 예제¶
입력 코드:¶
CREATE TABLE [TestTable](
[Col1] AS (CONVERT ([REAL], ExpressionValue))
);
출력 코드:¶
CREATE OR REPLACE TABLE TestTable (
Col1 REAL AS (CAST(ExpressionValue AS REAL)) /*** SSC-FDM-TS0014 - COMPUTED COLUMN WAS TRANSFORMED TO ITS SNOWFLAKE EQUIVALENT, FUNCTIONAL EQUIVALENCE VERIFICATION PENDING. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
권장 사항¶
이 메시지는 정보 제공만을 위한 것입니다. 별도의 작업이 필요하지 않습니다.
자동으로 변환되지 않은 식에 수동으로 수정할 사항이 있으면 추가하십시오.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0076¶
이 경고 메시지는 더 이상 사용되지 않습니다. 최신 설명서는 SSC-EWI-0002를 참조하십시오.
심각도¶
Medium
설명¶
기본 매개 변수는 Snowflake 저장 프로시저 및 함수에서 매개 변수 목록의 끝에 배치해야 합니다. 기본값이 있는 매개 변수는 매개 변수 선언 시퀀스의 끝으로 이동해야 합니다.
코드 예시¶
입력 코드:¶
CREATE PROCEDURE MySampleProc
@Param1 NVARCHAR(50) = NULL,
@Param2 NVARCHAR(10),
@Param3 NVARCHAR(10) = NULL,
@Param4 NVARCHAR(10)
AS
SELECT 1;
출력 코드:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0076 - DEFAULT PARAMETERS MAY NEED TO BE REORDERED. SNOWFLAKE ONLY SUPPORTS DEFAULT PARAMETERS AT THE END OF THE PARAMETERS DECLARATIONS. ***/!!!
CREATE OR REPLACE PROCEDURE MySampleProc (PARAM1 STRING DEFAULT NULL, PARAM2 STRING, PARAM3 STRING DEFAULT NULL, PARAM4 STRING)
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT 1);
RETURN TABLE(ProcedureResultSet);
END;
$$;
권장 사항¶
최종 사용자의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0056¶
이 경고는 더 이상 유효하지 않습니다. 최신 설명서는 SSC-FDM-TS0021를 참조하십시오.
심각도¶
낮음
예제를 더 명확하고 이해하기 쉽게 하기 위해 코드의 일부가 제거되었습니다.
설명¶
이 조기 경고 표시기(EWI)는 테이블 변경 문에 MASKED WITH 절이 포함된 경우에 표시됩니다. 이는 시스템이 MASKED WITH 함수를 대체하기 위해 대략적인 MASKING POLICY 를 생성했음을 나타냅니다.
코드 예제¶
입력 코드:¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
출력 코드:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0057 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER ***/!!!
CREATE OR REPLACE MASKING POLICY "default" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE 'xxxxx'
END;
ALTER TABLE IF EXISTS table_name MODIFY COLUMN column_name!!!RESOLVE EWI!!! /*** SSC-EWI-TS0056 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/!!! SET MASKING POLICY "default";
ALTER TABLE 문을 실행하기 전에 MASKING POLICY 를 생성해야 합니다. 정책의 동작은 근사치일 수 있으며 역할 및 사용자 권한을 조정해야 할 수도 있다는 점에 유의하십시오.
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0023¶
심각도¶
낮음
예제를 명확하고 간결하게 유지하기 위해 코드 출력의 일부가 제거되었습니다.
설명¶
BULK INSERT
옵션을 변환할 수 없는 경우 이 경고가 표시됩니다. 해당 옵션은 Snowflake에서 FILE FORMAT
옵션으로 지정해야 합니다.
코드 예제¶
입력 코드:¶
BULK INSERT #PCE FROM 'E:\PCE_Look-up_table.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n',
FIRE_TRIGGERS
);
출력 코드:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638461199649565070
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n'
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0023 - 'FIRE_TRIGGERS' BULK OPTION COULD NOT BE TRANSFORMED TO ANY OF THE EXISTING FILE FORMAT OPTIONS ***/!!!
FIRE_TRIGGERS;
CREATE OR REPLACE STAGE STAGE_638461199649565070
FILE_FORMAT = FILE_FORMAT_638461199649565070;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://E:\PCE_Look-up_table.txt @STAGE_638461199649565070 AUTO_COMPRESS = FALSE;
COPY INTO T_PCE FROM @STAGE_638461199649565070/PCE_Look-up_table.txt;
권장 사항¶
SnowSQL 명령줄 인터페이스(CLI) 사용자 가이드 를 참조하십시오.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
관련 EWI¶
SSC-FDM-TS0004: PUT 문은 사용자 인터페이스를 통해 실행할 수 없습니다.
SSC-EWI-TS0072¶
심각도¶
낮음
예제를 더 명확하고 쉽게 따라할 수 있도록 출력 코드의 일부가 제거되었습니다.
설명¶
이 경고는 SELECT 문과 OUTPUT 매개 변수를 모두 반환해야 할 때 나타납니다. 이러한 경우 SELECT 문의 결과가 OUTPUT 매개 변수보다 우선합니다.
입력 코드:¶
CREATE PROCEDURE SOMEPROC(@product_count INT OUTPUT, @123 INT OUTPUT)
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Employee;
END
출력 코드:¶
CREATE OR REPLACE PROCEDURE SOMEPROC (PRODUCT_COUNT INT, _123 INT)
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
*
from
AdventureWorks.HumanResources.Department;
return_arr := array_append(return_arr, :ProcedureResultSet1);
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
*
from
AdventureWorks.HumanResources.Employee;
return_arr := array_append(return_arr, :ProcedureResultSet2);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0072 - RETURN statement will be ignored due to previous RETURN statement ***/!!!
RETURN OBJECT_CONSTRUCT('PRODUCT_COUNT', :PRODUCT_COUNT, '_123', :_123);
END;
$$;
권장 사항¶
무시해야 하는 RETURN 문을 삭제합니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
관련 EWI¶
SSC-FDM-0020: 여러 결과 세트가 반환되면 임시 테이블에 저장됩니다.
SSC-EWI-TS0046¶
심각도¶
Medium
설명¶
이 경고는 코드가 SQL 해당하는 Snowflake가 없거나 Snowflake에서 지원되지 않는 SQL 서버 시스템 테이블 을 참조할 때 표시됩니다.
코드 예제¶
입력 코드:¶
SELECT *
FROM
sys.all_sql_modules
WHERE
[STATE] = 0; -- state must be ONLINE
출력 코드:¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0046 - SYSTEM TABLE sys.all_sql_modules IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
sys.all_sql_modules
WHERE
STATE = 0; -- state must be ONLINE
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0017¶
심각도¶
낮음
설명¶
이 경고는 SnowConvert 가 CREATE TABLE
문에서 마스킹된 열을 감지할 때 표시됩니다. Snowflake에서는 열 정의에 옵션을 추가하는 것만으로는 열 마스킹을 구현할 수 없습니다. SQL 서버와 동일한 데이터 마스킹 기능을 사용하려면 마스킹 논리를 수작업으로 구현해야 합니다.
코드 예제¶
입력 코드:¶
CREATE TABLE TABLE1
(
[COL1] nvarchar MASKED WITH (FUNCTION = 'default()') NULL,
[COL2] varchar(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
[COL3] varchar(100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
[COL4] smallint MASKED WITH (FUNCTION = 'random(1, 100)') NULL
);
출력 코드:¶
CREATE OR REPLACE TABLE TABLE1
(
COL1 VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'default()') NULL,
COL2 VARCHAR(100)
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
COL3 VARCHAR(100)
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'email()') NOT NULL,
COL4 SMALLINT
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'random(1, 100)') NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
권장 사항¶
SnowConvert 는 현재 MASKING POLICIES
의 자동 생성을 지원하지 않습니다. 이러한 정책은 수동으로 생성해야 합니다.
먼저 마스킹 정책을 관리할 역할을 생성합니다.
create role masking_admin;
그런 다음 새로 생성한 역할에 필수 권한을 충족하는 권한을 부여합니다.
grant create masking policy on schema PUBLIC to role masking_admin;
allow table_owner role to set or unset the ssn_mask masking policy -- (optional)
grant apply on masking policy ssn_mask to role table_owner;
다음 단계에서 마스킹 정책 함수를 생성합니다.
-- default mask
create or replace masking policy default_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else 'xxxx'
end;
-- partial mask
create or replace masking policy partial_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else LEFT(val,1) || 'xxxxx' || RIGHT(val,1)
end;
-- email mask
create or replace masking policy email_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else LEFT(val,1) || 'XXX@XXX.com'
end;
-- random mask
create or replace masking policy random_mask as (val smallint) returns smallint ->
case
when current_role() in ('ANALYST') then val
else UNIFORM(1,100,RANDOM())::SMALLINT
end;
마스킹 함수를 시연하기 위해 SQL 서버 마스킹 함수와 그에 상응하는 구현을 Snowflake에서 보여주는 예제를 보여드리겠습니다.
SQL 서버에서 이전에 마스킹이 활성화되어 있던 열에 마스킹 정책을 적용합니다.
alter table if exists TABLE1 modify column COL1 set masking policy default_mask;
alter table if exists TABLE1 modify column COL2 set masking policy partial_mask;
alter table if exists TABLE1 modify column COL3 set masking policy email_mask;
alter table if exists TABLE1 modify column COL4 set masking policy random_mask;
추가 지원이 필요한 경우 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0057¶
이 조기 경고 표시기(EWI)는 더 이상 사용되지 않습니다. 최신 내용은 SSC-FDM-TS0022 설명서를 참조하십시오.
심각도¶
낮음
예제를 더 명확하고 이해하기 쉽게 하기 위해 코드의 일부가 제거되었습니다.
설명¶
이 오류는 MASKING POLICY 가 올바르게 기능하려면 역할 또는 권한 할당이 필요한 경우에 발생합니다. 적절한 권한이 없으면 데이터 마스킹이 작동하지 않습니다.
코드 예제¶
입력 코드¶
ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
출력 코드:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0057 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER ***/!!!
CREATE OR REPLACE MASKING POLICY "partial_1_xxxxx_1" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE LEFT(val, 1) || 'xxxxx' || RIGHT(val, 1)
END;
ALTER TABLE IF EXISTS tableName MODIFY COLUMN columnName!!!RESOLVE EWI!!! /*** SSC-EWI-TS0056 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/!!! SET MASKING POLICY "partial_1_xxxxx_1";
6라인에 표시된 것처럼 쉼표로 구분하여 자리 표시자에 1개 이상의 역할 값을 추가할 수 있습니다. 각 역할 값은 작은따옴표로 묶어야 한다는 점을 기억하십시오.
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0063¶
심각도¶
중요
설명¶
이 경고는 코드에 Snowflake가 지원하지 않는 타임존이 포함된 경우 표시됩니다.
코드 예제¶
입력 코드:¶
SELECT current_timestamp at time zone 'Turks And Caicos Standard Time';
출력 코드:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0063 - TIME ZONE NOT SUPPORTED IN SNOWFLAKE ***/!!!
CURRENT_TIMESTAMP() at time zone 'Turks And Caicos Standard Time'
;
권장 사항¶
사용자 정의 함수를 생성하여 다양한 타임존을 처리할 수 있습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0032¶
외부 웹 인터페이스(EWI)는 저장 프로시저를 JavaScript 로 변환할 때만 생성됩니다. 그러나 이제 저장 프로시저에 선호되는 언어가 Snowflake Scripting이므로 이 기능은 더 이상 권장되지 않습니다.
심각도¶
높음
-t JavaScript
또는 --PLTargetLanguage JavaScript
플래그를 명령에 추가하여 JavaScript 에서 프로시저 및 매크로를 생성합니다.
예제를 더 명확하게 하기 위해 코드 출력의 일부가 제거되었습니다.
설명¶
이 경고는 BULK INSERT
문이 포함된 연결된 리터럴을 변환할 때 표시됩니다. 변환 프로세스는 BULK INSERT
를 Snowflake PUT
명령으로 변환합니다. 그러나 이 PUT
명령은 동적 SQL 에서 시작된 경우 실행할 수 없습니다.
BULK INSERT
문을 올바르게 처리하려면 프로시저와 별도로 PUT
명령을 실행해야 합니다. 프로시저에 여러 개의 BULK INSERT
문이 포함된 경우 동적 SQL 을 사용하는 것이 좋습니다.
프로시저를 더 작은 부분으로 나누기
각
BULK INSERT
문에 해당하는PUT
명령을 수동으로 실행합니다
이 접근법은 적절한 데이터 로딩과 데이터 삽입을 보장합니다.
코드 예제¶
입력 코드:¶
-- Additional Params: -t JavaScript
CREATE PROCEDURE [dbo].[Load_FuelMgtMasterData]
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@SQLString VARCHAR(500)
, @ImportName VARCHAR(200)
, @Today DATE
, @Yesterday DATE
, @SourceAffiliates VARCHAR(200);
SET @Today = GETDATE();
SET @Yesterday = DATEADD(DAY, -1, @Today);
TRUNCATE TABLE dbo.SourceFM_Affiliates;
SET @ImportName = '\\' + +@@ServerName
+ '\WorkA\merchantportal\affiliates.txt';
SET @SQLString = 'BULK INSERT ' + @SourceAffiliates + ' FROM '''
+ @ImportName + '''';
EXEC (@SQLString);
END;
출력 코드:¶
CREATE OR REPLACE PROCEDURE dbo.Load_FuelMgtMasterData ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
/*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/
/* SET NOCOUNT ON*/
;
let SQLSTRING;
let IMPORTNAME;
let TODAY;
let YESTERDAY;
let SOURCEAFFILIATES;
TODAY = SELECT(` CURRENT_TIMESTAMP() :: TIMESTAMP`);
YESTERDAY = SELECT(` DATEADD(DAY, -1, ?)`,[TODAY]);
EXEC(`TRUNCATE TABLE dbo.SourceFM_Affiliates`);
IMPORTNAME = `\\` + SERVERNAME + `\WorkA\merchantportal\affiliates.txt`;
SQLSTRING =
// ** SSC-EWI-TS0032 - THE BULK INSERT WAS PART OF A DYNAMIC SQL, WHICH MAKES SOME OF THE TRANSLATED ELEMENTS INVALID UNLESS EXECUTED OUTSIDE DYNAMIC CODE. **
`CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638461213351333410;
CREATE OR REPLACE STAGE STAGE_638461213351333410
FILE_FORMAT = FILE_FORMAT_638461213351333410;
PUT file://${IMPORTNAME} @STAGE_638461213351333410 AUTO_COMPRESS = FALSE;
COPY INTO ${SOURCEAFFILIATES} FROM @STAGE_638461213351333410/${IMPORTNAME}`;
EXEC(`${SQLSTRING}`);
$$;
권장 사항¶
프로시저를 실행하기 전에 동적
BULK INSERT
문에 의해 생성된PUT
명령을 추출하여 실행합니다.추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0073¶
이 조기 경고 문제는 더 이상 지원되지 않습니다. 최신 설명서는 SSC-FDM-TS0023를 참조하십시오.
심각도¶
낮음
설명¶
이 경고는 ERROR_MESSAGE() 함수를 변환하는 동안 표시됩니다. 정확한 오류 메시지는 Snowflake에서 다를 수 있습니다.
입력 코드:¶
SET @varErrorMessage = ERROR_MESSAGE()
출력 코드¶
BEGIN
VARERRORMESSAGE := SQLERRM !!!RESOLVE EWI!!! /*** SSC-EWI-TS0073 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/!!!;
END;
권장 사항¶
지원이 필요한 경우 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0080¶
심각도¶
높음
설명¶
SQL 서버의 EXECUTE AS
명령을 사용하면 사용자가 일시적으로 실행 컨텍스트를 변환할 수 있습니다. 이 변경 사항은 실행 권한과 USER_NAME()
같은 상황에 맞는 함수의 출력에 모두 영향을 미칩니다. 원래 컨텍스트로 돌아가려면 사용자는 작업을 완료한 후 REVERT
명령을 사용하면 됩니다.
Snowflake의 프로시저에는 실행 컨텍스트가 필요하며, 이 컨텍스트는 CREATE PROCEDURE
또는 ALTER PROCEDURE
문을 사용하여 프로시저를 생성하거나 수정할 때만 설정할 수 있습니다. 프로시저가 실행되는 동안에는 이 컨텍스트를 변경할 수 없습니다.
코드 예제¶
입력 코드:
CREATE PROCEDURE proc1()
WITH EXECUTE AS OWNER
AS
BEGIN
SELECT USER_NAME();
EXECUTE AS CALLER;
SELECT USER_NAME();
REVERT;
SELECT USER_NAME();
END
GO
출력 코드:
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/05/2024" }}'
EXECUTE AS OWNER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
ProcedureResultSet3 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet1);
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0080 - CHANGING THE EXECUTION CONTEXT AT RUNTIME IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
EXECUTE AS CALLER;
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet2);
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0080 - CHANGING THE EXECUTION CONTEXT AT RUNTIME IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
REVERT;
ProcedureResultSet3 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet3) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet3);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
권장 사항¶
컨텍스트 변환 없이 작동하도록 코드를 수정했습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0047¶
이 경고는 더 이상 유효하지 않습니다. 최신 설명서는 SSC-FDM-TS0019를 참조하십시오.
심각도¶
낮음
설명¶
이 경고는 SQL 서버의 문자열 형식 규칙으로 인해 RAISERROR 오류 메시지가 다를 수 있음을 나타냅니다.
코드 예제¶
입력 코드:¶
CREATE PROCEDURE RAISERROR_PROCEDURE
AS
BEGIN
RAISERROR ('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1,
123,
7,
7,
'param2');
END
출력 코드:¶
CREATE OR REPLACE PROCEDURE RAISERROR_PROCEDURE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0047 - RAISERROR ERROR MESSAGE MAY DIFFER BECAUSE OF THE SQL SERVER STRING FORMAT ***/!!!
SELECT
RAISERROR_UDF('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1, array_construct(
123,
7,
7,
'param2'));
END;
$$;
권장 사항¶
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0016¶
예제를 더 명확하고 쉽게 따라할 수 있도록 코드의 일부가 제거되었습니다.
설명¶
이 경고는 SnowConvert 가 소스 코드에서 ODBC Scalar 함수를 감지하면 표시됩니다. ODBC Scalar 함수는 Snowflake에서 사용자 정의 함수로 변환할 수 없습니다.
코드 예제¶
입력 코드:¶
SELECT {fn CURRENT_DATE_UDF()};
출력 코드:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'CURRENT_DATE_UDF' NODE ***/!!!
CURRENT_DATE_UDF() !!!RESOLVE EWI!!! /*** SSC-EWI-TS0016 - USER DEFINED FUNCTIONS ARE NOT SUPPORTED IN ODBC SCALAR FUNCTION. ***/!!!;
관련 EWI¶
SSC-EWI-0073: 함수 동등성 검토가 필요합니다.
권장 사항¶
이는 정보 제공만을 위한 것입니다. 별도의 작업이 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0036¶
심각도¶
Medium
예제를 명확하고 간결하게 하기 위해 코드의 일부가 생략되었습니다.
설명¶
이 경고는 코드에 로컬 커서가 아닌 커서 유형이 포함된 경우에 표시됩니다. 현재 Snowflake Scripting은 로컬 커서만 지원하므로 모든 커서 유형은 변환 중에 자동으로 로컬 커서로 변환됩니다.
코드 예제¶
입력 코드:¶
CREATE OR ALTER PROCEDURE globalCursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0036
DECLARE MyCursor CURSOR GLOBAL STATIC READ_ONLY
FOR
SELECT *
FROM exampleTable;
-- Should not be marked
DECLARE MyCursor2 CURSOR LOCAL STATIC READ_ONLY
FOR
SELECT testCol
FROM myTable;
RETURN 'DONE';
END;
CREATE OR REPLACE PROCEDURE globalCursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-EWI-TS0036
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0036 - SNOWFLAKE SCRIPTING ONLY SUPPORTS LOCAL CURSORS ***/!!!
MyCursor CURSOR
FOR
SELECT
*
FROM
exampleTable;
-- Should not be marked
MyCursor2 CURSOR
FOR
SELECT
testCol
FROM
myTable;
BEGIN
RETURN 'DONE';
END;
$$;
권장 사항¶
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0067¶
심각도¶
중요
예제를 명확하고 간결하게 유지하기 위해 코드 출력의 일부가 제거되었습니다.
설명¶
이 경고는 OPENXML 에 잘못된 매개 변수가 포함된 경우, 특히 지정된 XML 경로에 액세스할 수 없는 경우에 표시됩니다.
이 조기 경고 표시기(EWI)를 해결하려면 매개 변수에 전체 노드 경로를 제공해야 합니다.
입력 코드:¶
SELECT
*
FROM
OPENXML (@idoc, @path, 1) WITH (
CustomerID VARCHAR(10),
ContactName VARCHAR(20)
);
출력 코드:¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0067 - INVALID PARAMETERS IN OPENXML TABLE-VALUED FUNCTION ***/!!!
OPENXML(@idoc, @path, 1);
입력 코드(명시적 매개 변수)¶
SELECT
*
FROM
OPENXML (@idoc, '/ROOT/Customer', 1) WITH(
CustomerID VARCHAR(10),
ContactName VARCHAR(20)
);
출력 코드(명시적 매개 변수)¶
SELECT
Left(value:Customer['@CustomerID'], '10') AS 'CustomerID',
Left(value:Customer['@ContactName'], '20') AS 'ContactName'
FROM
OPENXML_UDF($idoc, ':ROOT:Customer');
권장 사항¶
코드에서 경로를 매개 변수로 직접 전달할 수 있는지 확인하십시오.
추가 지원이 필요하면 지원 팀에 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0043¶
심각도¶
Medium
예제를 명확하고 간결하게 유지하기 위해 코드 출력의 일부가 제거되었습니다.
설명¶
이 경고는 Snowflake SQL 에서 사용할 수 있는 WITH XMLNAMESPACES 절에서 사용할 수 없습니다.
코드 예제¶
입력 코드:¶
WITH XMLNAMESPACES ('uri' as ns1)
SELECT ProductID as 'ns1:ProductID',
Name as 'ns1:Name',
Color as 'ns1:Color'
FROM Production.Product
WHERE ProductID = 316
FOR XML RAW, ELEMENTS XSINIL
출력 코드:¶
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0043 - WITH XMLNAMESPACES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
XMLNAMESPACES ('uri' as VARIANT /*** SSC-FDM-TS0015 - DATA TYPE NS1 IS NOT SUPPORTED IN SNOWFLAKE ***/)
SELECT
ProductID AS "ns1:ProductID",
Name AS "ns1:Name",
Color AS "ns1:Color"
FROM
Production.Product
WHERE
ProductID = 316
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW, ELEMENTS XSINIL;
권장 사항¶
사용자 정의 함수(UDFs)를 사용하여 소스 코드의 기능을 복제하는 것도 고려해 보십시오. 아래에서 원래 동작을 재현하는 데 도움이 되는 UDFs 의 예를 확인할 수 있습니다.
CREATE TABLE PRODUCT (ProductID INTEGER, Name VarChar(20), Color VarChar(20));
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(1,'UMBRELLA','RED');
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(2,'SHORTS','BLUE');
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(3,'BALL','YELLOW');
WITH XMLNAMESPACES ('uri' as ns1)
SELECT ProductID as 'ns1:ProductID',
Name as 'ns1:Name',
Color as 'ns1:Color'
FROM Product
FOR XML RAW
CREATE OR REPLACE TABLE PRODUCT (
ProductID INTEGER,
Name VARCHAR(20),
Color VARCHAR(20))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/12/2024" }}'
;
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(1,'UMBRELLA','RED');
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(2,'SHORTS','BLUE');
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(3,'BALL','YELLOW');
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0043 - WITH XMLNAMESPACES IS NOT SUPPORTED IN SNOWFLAKE ***/!!! XMLNAMESPACES ('uri' as ns1)
SELECT
ProductID AS "ns1:ProductID",
Name AS "ns1:Name",
Color AS "ns1:Color"
FROM
Product
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW;
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
관련 EWI¶
SSC-PRF-TS0001: 성능 경고 - 코드에 재귀적일 수 있는 공통 테이블 식(CTE)이 포함되어 있습니다. ‘RECURSIVE’ 키워드를 추가해야 하는지 확인하십시오.
SSC-EWI-TS0044: ‘FOR XML’ 절은 지원되지 않으므로 Snowflake에서 사용할 수 없습니다.
SSC-FDM-TS0015: Snowflake의 Regexp_Substr 함수는 POSIX 정규식에서만 작동한다는 점에 유의하십시오.
SSC-EWI-TS0077¶
심각도¶
낮음
설명¶
이 오류는 Snowflake가 지원하지 않는 데이터 정렬 절을 사용할 때 표시됩니다.
코드 예제¶
입력 코드:¶
SELECT 'a' COLLATE Albanian_BIN;
SELECT 'a' COLLATE Albanian_CI_AI;
CREATE TABLE ExampleTable (
ID INT,
Name VARCHAR(50) COLLATE collateName
);
출력 코드:¶
SELECT 'a'
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - COLLATION Albanian_BIN NOT SUPPORTED ***/!!!
-- COLLATE Albanian_BIN
;
SELECT 'a'
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - COLLATION Albanian_CI_AI NOT SUPPORTED ***/!!!
-- COLLATE Albanian_CI_AI
;
CREATE OR REPLACE TABLE ExampleTable (
ID INT,
Name VARCHAR(50)
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - COLLATION collateName NOT SUPPORTED ***/!!!
-- COLLATE collateName
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
권장 사항¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.
SSC-EWI-TS0026¶
심각도¶
낮음
설명¶
이 경고는 DELETE FROM 문이 포함된 공통 테이블 식(CTE)이 CREATE OR REPLACE TABLE 문으로 변환될 때 표시됩니다.
코드 예제¶
입력 코드:¶
WITH Duplicated AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS RN
FROM WithQueryTest
)
DELETE FROM Duplicated
WHERE Duplicated.RN > 1
출력 코드:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0026 - WITH DELETE QUERY TURNED TO CREATE TABLE ***/!!!
CREATE OR REPLACE TABLE WithQueryTest AS
SELECT
*
FROM
WithQueryTest
QUALIFY
ROW_NUMBER()
OVER (PARTITION BY
ID
ORDER BY ID) = 1;
권장 사항¶
사용자 측의 작업은 필요하지 않습니다.
추가 지원이 필요하면 snowconvert-support@Snowflake.com으로 문의해 주십시오.