SnowConvert:Redshift 问题

SSC-EWI-RS0008

严重性

描述

之所以出现此问题,是因为 Redshift 允许对用于 流式引入 (https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html) 的物化视图执行 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

严重性

描述

Snowflake 不支持 Redshift 中提供的 SET configuration parameter 功能。如需了解更多详情,请查阅 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

严重性

描述

Redshift 中的 CREATE VIEW 命令包含一个可选子句,该子句使视图独立于其引用的数据库对象(例如表或函数)。使用此子句时,您必须包括所有引用对象的架构名称。此功能允许您创建视图,用于引用尚不存在的对象。系统仅在查询视图时检查这些引用对象是否存在,而不是在创建视图时检查。

目前,Snowflake 不提供实现此功能的等效命令或明确的替代方案。根据 Snowflake 的文档,视图专门与架构关联,视图中引用的对象也是如此。

尝试移除 View 语句时,系统会检查输入代码中是否有所有引用对象。如果找到了所有引用,则 View 语句将被成功移除。如果缺少任何引用,系统将显示一条警告消息,指出由于缺少依赖项而无法移除 View。

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

严重性

描述

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

建议

语言: 中文