SnowConvert: Redshift 문제

SSC-EWI-RS0008

심각도

높음

설명

이 문제는 Redshift가 스트림 수집 에 사용되는 구체화된 뷰에 대해 DELETE 문을 허용하기 때문에 발생합니다. Snowflake로 변환할 때 이러한 구체화된 뷰는 DELETE 작업을 지원하지 않는 동적 테이블이 됩니다.

코드 예제

입력 코드:

CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department FROM employees WHERE department = 'Engineering';

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": "02/11/2025",  "domain": "test" }}'
AS
SELECT id, name, department FROM
        employees
WHERE
        RTRIM( department) = RTRIM( 'Engineering');


!!!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에서 MERGE 문을 사용하는 경우 REMOVE DUPLICATES 절을 사용할 수 없습니다. 동일한 기능을 사용하려면 해결 방법을 구현해야 합니다. 여기에는 코드에 INSERT WHEN NOT MATCHED 절을 추가하는 것이 포함됩니다. 이 절에는 소스 테이블의 열 정보가 필요합니다. 마이그레이션 프로세스에서 소스 테이블의 위치를 찾을 수 없는 경우 필수 열을 생성할 수 없으므로 오류가 발생합니다.

코드 예제

입력 코드:

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Copy

출력 코드:

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. ***/!!!
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-RS0002

심각도

Medium

설명

Redshift에서 사용할 수 있는 SET 구성 매개 변수 기능은 Snowflake에서 지원되지 않습니다. 자세한 내용은 CREATE PROCEDURE 설명서 를 참조하십시오.

코드 예제

입력 코드:

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

출력 코드:

CREATE OR REPLACE PROCEDURE procedure2 (
    IN !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'InParameterMode' NODE ***/!!! input_param INTEGER,
    OUT output_param 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": "09/17/2024" }}'
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$;
Copy

권장 사항

SSC-EWI-RS0003

심각도

Medium

설명

Redshift의 CREATE VIEW 명령에는 뷰를 참조된 데이터베이스 오브젝트(예: 테이블 또는 함수)와 독립적으로 만드는 선택적 절이 포함되어 있습니다. 이 절을 사용할 때는 참조된 모든 오브젝트에 대한 스키마 이름을 포함해야 합니다. 이 기능을 사용하면 아직 존재하지 않는 오브젝트를 참조하는 뷰를 생성할 수 있습니다. 시스템은 뷰가 생성될 때가 아니라 뷰가 쿼리될 때만 참조된 오브젝트가 존재하는지 확인합니다.

현재 Snowflake는 이 기능을 구현할 수 있는 동등한 명령이나 명확한 대안을 제공하지 않습니다. Snowflake의 문서에 따르면, 뷰는 뷰 내에서 참조되는 오브젝트와 마찬가지로 스키마에 특별히 연결되어 있습니다.

뷰 문을 제거하려고 할 때 시스템은 입력 코드에서 참조된 모든 오브젝트를 확인합니다. 모든 참조가 발견되면 뷰 문이 성공적으로 제거됩니다. 참조가 누락된 경우 시스템은 누락된 종속성으로 인해 뷰를 제거할 수 없다는 경고 메시지를 표시합니다.

SnowConvert 는 공급자가 제공한 소스 코드만 분석하며, Snowflake 환경에 이미 존재하는 오브젝트는 확인하지 않습니다. 결과적으로 누락된 참조에 대한 오류 메시지가 표시될 수 있습니다. 이러한 오브젝트가 Snowflake 데이터베이스에 이미 존재하는 경우 이러한 오류를 무시하고 해당 문을 제거하면 됩니다.

코드 예제

입력 코드:

CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Copy

출력 코드:

--** 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

심각도

높음

설명

이 문제는 Snowflake가 HLLSKETCH 데이터 타입을 지원하지 않기 때문에 발생합니다.

코드 예제

입력 코드:

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

심각도

높음

설명

이 문제는 Snowflake에서 PIVOT/UNPIVOT 작업의 IN 절에서 열 별칭을 사용할 수 없기 때문에 발생합니다. 자세한 내용은 Snowflake 설명서 를 참조하십시오.

코드 예제

입력 코드:

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-RS0001

심각도

Medium

설명

Redshift의 CREATE PROCEDURE 문은 선택 사항인 NONATOMIC 트랜잭션 모드 절을 포함합니다. Snowflake에는 이 기능에 대한 직접적인 대응 기능이 없으므로 SMA 는 가능한 경우 변환된 코드를 수정하여 유사한 기능을 복제하려고 시도합니다.

프로시저 내에서 문을 자동으로 커밋하는 NONATOMIC 프로시저 동작은 수동으로 확인해야 합니다. Snowflake는 이 기능을 복제하기 위해 “자동 커밋”계정 매개 변수를 제공합니다. 자동 커밋에 대한 자세한 내용은 Snowflake 설명서 를 참조하십시오.

코드 예제

입력 코드:

CREATE OR REPLACE PROCEDURE procedure1(parameter int)
Nonatomic
AS
   $$
      SELECT * from my_table;
   $$
LANGUAGE plpgsql;
Copy

출력 코드:

CREATE OR REPLACE PROCEDURE procedure1 (parameter int)
RETURNS VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0001 - THE NONATOMIC OPTION IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
Nonatomic
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}'
AS
   $$
      SELECT * from
         my_table;
   $$;
Copy

권장 사항