SnowConvert AI - Redshift 문제

SSC-EWI-RS0002

SET “구성 매개 변수”는 Snowflake에서 지원되지 않습니다.

심각도

Medium

설명

SET 구성 매개 변수의 사용은 Snowflake에서 지원되지 않습니다. 자세한 내용은 CREATE PROCEDURE 설명서를 참조하세요.

코드 예제

입력 코드:
Redshift
 CREATE OR REPLACE PROCEDURE procedure2(
    IN input_param INTEGER,
    OUT output_param NUMERIC
)
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$
LANGUAGE plpgsql
SET enable_numeric_rounding to ON;
Copy
생성된 코드:
Snowflake
 CREATE OR REPLACE PROCEDURE procedure2 (input_param INTEGER, output_param OUT NUMERIC)
RETURNS VARCHAR
LANGUAGE SQL
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0002 - SET CONFIGURATION PARAMETER 'enable_numeric_rounding' IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
SET enable_numeric_rounding to ON
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$;
Copy

모범 사례

SSC-EWI-RS0003

스키마 바인딩이 없는 뷰는 참조 누락으로 인해 제거할 수 없습니다.

심각도

Medium

설명

CREATE VIEW용 Redshift 설명서에는 특정 뷰가 테이블이나 함수와 같은 데이터베이스 오브젝트 또는 참조하는 오브젝트에 바인딩되지 않음을 명시하는 선택적 절이 포함되어 있습니다. 또한 이 설명서에는 이 절이 사용되는 경우 참조된 오브젝트를 스키마 이름으로 정규화해야 한다는 점이 명시되어 있습니다. 이 절을 사용하면 아직 존재하지 않을 수 있는 뷰 및 참조 오브젝트를 생성할 수 있습니다. 뷰가 쿼리되면 존재가 확인되지만, 정의될 때는 확인되지 않습니다.

그러나 Snowflake에는 이 기능을 구현하기 위한 동등한 명령이나 명확한 해결 방법은 없습니다. 더욱이 Snowflake 설명서에 따르면 뷰는 특정 스키마에 연결되어 있으며 뷰에서 참조되는 오브젝트도 마찬가지입니다.

뷰에 연결된 참조가 입력 코드에 있는 경우 해당 문은 문제 없이 제거됩니다. 그러나 필요한 참조가 누락된 경우, 누락된 참조로 인해 해당 문을 제거할 수 없다는 경고 메시지가 사용자에게 추가됩니다.

SnowConvert AI는 입력 코드에 대해서만 분석을 수행하며 Snowflake에 이미 배포된 오브젝트를 고려하지 않습니다. 따라서 출력에 누락된 참조를 지정하는 몇 가지 문제가 있을 수 있습니다. Snowflake 데이터베이스에 참조가 이미 있는 경우 사용자는 문제 없이 해당 문을 안전하게 제거할 수 있습니다.

코드 예제

입력 코드:
Redshift
 CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Copy
생성된 코드:
Snowflake
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "public.missingTable" **
CREATE VIEW myView
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}'
AS SELECT col1 FROM
public.missingTable
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0003 - WITH NO SCHEMA BINDING STATEMENT CAN NOT BE REMOVED DUE TO MISSING REFERENCES. ***/!!!
WITH NO SCHEMA BINDING;
Copy

모범 사례

  • 이 문제를 해결하려면 누락된 참조를 입력 코드에 추가하는 것이 좋습니다. 오브젝트가 Snowflake 데이터베이스에 이미 배포된 경우 해당 문을 문제 없이 제거할 수 있습니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-EWI-RS0004

HLLSKETCH 데이터 타입은 Snowflake에서 지원되지 않습니다.

심각도

높음

설명

이 변환 문제는 HLLSKETCH 데이터 타입이 Snowflake에서 지원되지 않기 때문에 추가됩니다.

코드 예제

입력 코드:
 CREATE TABLE table1
(
    col_hllsketch HLLSKETCH
);
Copy
생성된 코드:
 CREATE TABLE table1
(
    col_hllsketch HLLSKETCH !!!RESOLVE EWI!!! /*** SSC-EWI-RS0004 - HLLSKETCH DATA TYPE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}';
Copy

모범 사례

SSC-EWI-RS0005

열 별칭은 IN 절에서 사용할 수 없습니다.

심각도

높음

설명

이 변환 문제는 Snowflake에서 PIVOT UNPIVOT 쿼리의 IN 절에 열 별칭을 사용할 수 없기 때문에 추가됩니다.

코드 예제

입력 코드:
 SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
Copy
생성된 코드:
 SELECT *
FROM
    count_by_color UNPIVOT (
    cnt FOR color IN (red
                          !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS r, green
                                                                                                                                                                              !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS g, blue
                                                                                                                                                                                                                                                                                                                                 !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS b)
);
Copy

모범 사례

SSC-EWI-RS0006

SUBSTRING 함수의 동작은 바이너리 데이터에 적용될 때 다를 수 있습니다.

심각도

Medium

설명

SUBSTRING 함수의 동작은 바이너리 데이터에 적용될 때 다를 수 있습니다. Redshift와 Snowflake는 바이너리 데이터를 다르게 처리하므로 두 플랫폼 간에 결과가 다를 수 있습니다.

코드 예제

입력 코드:
 SELECT SUBSTRING('12345'::varbyte, 2, 4) AS substring_binary;
SELECT SUBSTRING('abc'::varbyte, 2, 4) AS substring_binary;
Copy
생성된 코드:
 SELECT SUBSTRING('12345':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_binary;
SELECT SUBSTRING('abc':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_binary;
Copy

모범 사례

SSC-EWI-RS0007

Snowflake에서는 날짜 리터럴이 지원되지 않습니다.

심각도

높음

설명

일부 DATE, TIME 또는 TIMESTAMP 형식은 Snowflake에서 지원되지 않습니다. 이러한 형식은 수동 조작이 필요할 수 있습니다.

코드 예제

입력 코드:
 select datediff(century, '2000-Jan-31', 'Jan-31-2000');
Copy
생성된 코드:
  select
 DATEDIFF(YEAR,
                !!!RESOLVE EWI!!! /*** SSC-EWI-RS0007 - '2000-Jan-31' DATE LITERAL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
                '2000-Jan-31',
                               !!!RESOLVE EWI!!! /*** SSC-EWI-RS0007 - 'Jan-31-2000' DATE LITERAL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
                               'Jan-31-2000') / 100;
Copy

모범 사례

SSC-EWI-RS0008

Snowflake에서는 날짜 리터럴이 지원되지 않습니다.

심각도

높음

설명

이 변환 문제는 Redshift에서는 DELETE 문을 스트림 수집에 사용되는 구체화된 뷰에 적용할 수 있기 때문에 추가됩니다. Snowflake에서는 이러한 뷰가 동적 테이블로 변환되며 DELETE 문은 동적 테이블에서 사용할 수 없습니다.

코드 예제

입력 코드:
 CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department_id FROM employees WHERE department_id = 101;

DELETE FROM mv
WHERE id = 2;
Copy
생성된 코드:
 CREATE DYNAMIC TABLE mv
--** 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": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "03/03/2025",  "domain": "test" }}'
AS
SELECT id, name, department_id FROM
employees
WHERE department_id = 101;


!!!RESOLVE EWI!!! /*** SSC-EWI-RS0008 - MATERIALIZED VIEW IS TRANSFORMED INTO A DYNAMIC TABLE, AND THE DELETE STATEMENT CANNOT BE USED ON DYNAMIC TABLES. ***/!!!
DELETE FROM
mv
WHERE id = 2;
Copy

모범 사례

  • 동적 테이블은 직접 삭제할 수 없으므로 동적 테이블 정의를 바꿔도 동일한 결과를 얻을 수 있습니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-EWI-RS0009

소스 테이블에 대한 의미 체계 정보를 찾을 수 없습니다.

심각도

낮음

설명

Snowflake에서는 REMOVE DUPLICATES 절이 있는 MERGE가 지원되지 않습니다. 원본 코드를 완전히 지원하려면 해결 방법이 필요합니다. INSERT WHEN NOT MATCHED 절은 출력 코드에서 생성해야 하며 소스 테이블 열이 필요합니다. 마이그레이션 중에 소스 테이블을 찾을 수 없으면 열이 생성되지 않으며 오류가 발생합니다.

코드 예제

입력 코드:
Redshift
 MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Copy
생성된 코드:
Snowflake
 CREATE TEMPORARY TABLE source_duplicates AS
SELECT DISTINCT
source.*
FROM
source
INNER JOIN
target
ON target.id = source.id;
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0009 - SEMANTIC INFORMATION NOT FOUND FOR THE SOURCE TABLE. COLUMNS TO BE INSERTED MAY BE ADDED MANUALLY. ***/!!!
--** SSC-FDM-RS0005 - REDSHIFT MERGE STATEMENT DOESN'T ALLOW DUPLICATES IN THE SOURCE TABLE. SNOWFLAKE BEHAVIOR MAY DIFFER IF THERE ARE DUPLICATE VALUES. **
MERGE INTO target
USING source ON target.id = source.id
WHEN MATCHED THEN
DELETE
WHEN NOT MATCHED THEN
INSERT
VALUES ();
INSERT INTO target
SELECT
*
FROM
source_duplicates;
DROP TABLE IF EXISTS source_duplicates CASCADE;
Copy

모범 사례

  • 마이그레이션된 코드에 소스 테이블이 있는지 검색하고 삽입 작업에서 열을 수동으로 추가합니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-EWI-RS0010

최상위 CALL 단위에서는 출력 매개 변수가 지원되지 않습니다.

심각도

낮음

설명

Redshift에서는 출력으로 할당될 변수를 정의하지 않고 매개 변수 내의 CALL 문을 최상위 코드 단위로 사용할 수 있습니다. Snowflake는 변수를 사용하여 출력 값을 어딘가에 설정합니다.

코드 예제

입력 코드:
Redshift
 CREATE OR REPLACE PROCEDURE get_total_sales_by_product(
    IN p_product_name VARCHAR(100),
    OUT p_total_sales DECIMAL(18, 2)
)
AS $$
BEGIN
    NULL;
END;
$$ LANGUAGE plpgsql;

CALL get_total_sales_by_product('Laptop');
Copy
생성된 코드:
Snowflake
 CREATE OR REPLACE PROCEDURE get_total_sales_by_product (p_product_name VARCHAR(100), p_total_sales OUT DECIMAL(18, 2))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "07/10/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
NULL;
END;
$$;
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0010 - Top-level Procedure Call with out parameters is not supported. ***/!!!
CALL get_total_sales_by_product('Laptop');
Copy

모범 사례

  • 호출을 익명 블록으로 이동하고 출력 매개 변수로 전달할 변수를 선언합니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.