SnowConvert AI - Problemas do RedShift

SSC-EWI-RS0002

A definição do “parâmetro de configuração” não é compatível com o Snowflake.

Gravidade

Medium

Descrição

O uso do parâmetro de configuração SET não é compatível com o Snowflake. Para obter mais informações, consulte a documentação de CREATE PROCEDURE.

Exemplos de código

Código de entrada:
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
Código gerado:
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

Práticas recomendadas

SSC-EWI-RS0003

A exibição sem vinculação de esquema não pode ser removida devido à ausência de referências.

Gravidade

Medium

Descrição

A documentação do RedShift para CREATE VIEW inclui uma cláusula opcional que especifica que a exibição específica não está vinculada aos objetos do banco de dados, tais como tabelas ou funções, nem aos objetos que está referenciando. A documentação também esclarece que, nos casos em que esta cláusula é utilizada, os objetos referenciados devem ser qualificados com um nome de esquema. Esta cláusula permite criar uma exibição e referenciar objetos que talvez ainda não existam. Sua existência será verificada uma vez que a exibição seja consultada, mas não em sua definição.

Entretanto, não há comando equivalente nem solução alternativa óbvia para implementar essa funcionalidade no Snowflake. Além disso, a documentação do Snowflake sugere que as exibições estão vinculadas a um esquema específico, assim como os objetos referenciados na exibição.

Se as referências vinculadas à exibição estiverem presentes no código de entrada, a instrução será removida sem problemas. Entretanto, se as referências necessárias estiverem ausentes, uma mensagem de aviso será adicionada para informar ao usuário que a instrução não pode ser removida devido às referências ausentes.

O SnowConvert AI executa análise somente no código de entrada e não leva em conta objetos já implantados no Snowflake. Portanto, a saída pode ter alguns problemas ao apontar para referências ausentes. Se as referências já estiverem presentes no banco de dados do Snowflake, o usuário poderá remover a instrução com segurança sem problemas.

Exemplos de código

Código de entrada:
Redshift
 CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Copy
Código gerado:
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

Práticas recomendadas

  • Para resolver este problema, é sugerida a adição das referências ausentes ao código de entrada. Se o objeto já estiver implementado no banco de dados do Snowflake, a instrução poderá ser removida sem problemas.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com

SSC-EWI-RS0004

Tipo de dados HLLSKETCH incompatível com o Snowflake.

Gravidade

High

Descrição

Este problema de conversão é adicionado porque o tipo de dados HLLSKETCH não é compatível com o Snowflake.

Exemplo de código

Código de entrada:
 CREATE TABLE table1
(
    col_hllsketch HLLSKETCH
);
Copy
Código gerado:
 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

Práticas recomendadas

SSC-EWI-RS0005

Os aliases de coluna não podem ser usados na cláusula IN.

Gravidade

High

Descrição

Este problema de conversão é adicionado porque os aliases das colunas não podem ser usados na cláusula IN da consulta PIVOT/UNPIVOT no Snowflake.

Exemplo de código

Código de entrada:
 SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
Copy
Código gerado:
 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

Práticas recomendadas

SSC-EWI-RS0006

O comportamento da função SUBSTRING pode ser diferente quando aplicada a dados binários.

Gravidade

Medium

Descrição

O comportamento da função SUBSTRING pode ser diferente quando aplicada a dados binários. Como o RedShift e o Snowflake tratam dados binários de forma diferente, os resultados podem variar entre as duas plataformas.

Exemplo de código

Código de entrada:
 SELECT SUBSTRING('12345'::varbyte, 2, 4) AS substring_binary;
SELECT SUBSTRING('abc'::varbyte, 2, 4) AS substring_binary;
Copy
Código gerado:
 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

Práticas recomendadas

SSC-EWI-RS0007

O literal de data não é compatível com o Snowflake.

Gravidade

High

Descrição

Alguns formatos DATE, TIME ou TIMESTAMP não são compatível com o Snowflake. Esses formatos podem exigir manipulação manual.

Exemplo de código

Código de entrada:
 select datediff(century, '2000-Jan-31', 'Jan-31-2000');
Copy
Código gerado:
  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

Práticas recomendadas

SSC-EWI-RS0008

O literal de data não é compatível com o Snowflake.

Gravidade

High

Descrição

Este problema de conversão é adicionado desde que, no RedShift, você possa aplicar a instrução DELETE a exibições materializadas usadas para ingestão de streaming. No Snowflake, essas exibições são transformadas em tabelas dinâmicas, e a instrução DELETE não pode ser usada em tabelas dinâmicas.

Exemplo de código

Código de entrada:
 CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department_id FROM employees WHERE department_id = 101;

DELETE FROM mv
WHERE id = 2;
Copy
Código gerado:
 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

Práticas recomendadas

  • Como as tabelas dinâmicas não podem ser excluídas diretamente, você pode obter o mesmo resultado substituindo a definição da tabela dinâmica.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com

SSC-EWI-RS0009

Informações semânticas não encontradas para a tabela de origem.

Gravidade

Low

Descrição

No Snowflake, a cláusula MERGE com REMOVE DUPLICATES não é compatível. Para compatibilizar totalmente o código original, é necessária uma solução alternativa. Uma cláusula INSERT WHEN NOT MATCHED precisa ser gerada no código de saída e requer as colunas da tabela de origem. Se a tabela de origem não foi encontrada durante a migração, nenhuma coluna será gerada e um erro será emitido.

Exemplo de código

Código de entrada:
Redshift
 MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Copy
Código gerado:
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

Práticas recomendadas

  • Pesquise para ver se a tabela de origem está presente no código migrado e adicione manualmente as colunas na operação de inserção.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com

SSC-EWI-RS0010

Parâmetros de saída não compatíveis com a unidade de nível superior CALL.

Gravidade

Low

Descrição

O RedShift permite o uso de instruções CALL dentro de parâmetros como unidades de código de nível superior sem definir uma variável que seria atribuída como saída. O Snowflake impõe o uso de uma variável para definir o valor de saída em algum lugar.

Exemplo de código

Código de entrada:
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
Código gerado:
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

Práticas recomendadas

  • Mova a chamada em um bloco anônimo e declare uma variável a ser passada como parâmetro de saída.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com