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;
输出代码:¶
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;
建议¶
要从动态表中删除记录,您必须使用新的动态表定义替换整个动态表定义。
如需更多帮助,请通过 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;
输出代码:¶
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;
建议¶
检查迁移的代码中是否存在源表,然后手动将所有缺失的列添加到插入语句中。
如需更多帮助,请通过 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;
输出代码:¶
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;
$$;
建议¶
如需更多支持,请通过 snowconvert-support@snowflake.com 联系我们
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;
输出代码:¶
--** 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;
建议¶
要修复此问题,请在代码中添加所有缺失的引用。如果该对象已存在于 Snowflake 数据库中,您可以安全地移除该语句。
如需更多帮助,请通过以下方式联系我们:snowconvert-support@snowflake.com
SSC-EWI-RS0004¶
严重性¶
高
描述¶
之所以出现此问题,是因为 Snowflake 不支持 HLLSKETCH 数据类型。
代码示例¶
输入代码:¶
CREATE TABLE table1
(
col_hllsketch HLLSKETCH
);
输出代码:¶
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" }}';
建议¶
查看 Snowflake 为使用 HyperLogLog 估算基数而提供的所有 聚合函数。
如需更多帮助,请通过以下方式联系我们:snowconvert-support@snowflake.com
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)
);
输出代码:¶
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)
);
建议¶
如需更多支持,请通过以下方式联系我们的支持团队:snowconvert-support@snowflake.com
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;
输出代码:¶
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;
$$;
建议¶
如需更多支持,请通过 snowconvert-support@snowflake.com 联系我们