SnowConvert: Problemas do Redshift

SSC-EWI-RS0008

Gravidade

High

Descrição

Esse problema ocorre porque o Redshift permite instruções DELETE em exibições materializadas que são usadas para ingestão de streaming. Ao converter para o Snowflake, essas exibições materializadas se tornam tabelas dinâmicas, que não são compatíveis com as operações DELETE.

Exemplo de código

Código de entrada:

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

DELETE FROM mv
WHERE id = 2;
Copy

Código de saída:

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

Recomendações

  • Para excluir registros de uma tabela dinâmica, é necessário substituir toda a definição da tabela dinâmica por uma nova.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-EWI-RS0009

Gravidade

Low

Descrição

No Snowflake, ao usar a instrução MERGE, a cláusula REMOVE DUPLICATES não está disponível. Para obter a mesma funcionalidade, você precisará implementar uma solução alternativa. Isso envolve adicionar uma cláusula INSERT WHEN NOT MATCHED ao seu código. Essa cláusula requer informações de coluna da tabela de origem. Se o processo de migração não puder localizar a tabela de origem, as colunas necessárias não poderão ser geradas, o que resultará em um erro.

Exemplo de código

Código de entrada:

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

Código de saída:

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

Recomendações

  • Verifique se a tabela de origem existe no código migrado e, em seguida, adicione manualmente as colunas ausentes à instrução de inserção.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-EWI-RS0002

Gravidade

Medium

Descrição

O recurso SET configuration parameter, que está disponível no Redshift, não é compatível com o Snowflake. Para obter mais detalhes, consulte a documentação deCREATE PROCEDURE.

Exemplos de código

Código de entrada:

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 de saída:

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

Recomendações

SSC-EWI-RS0003

Gravidade

Medium

Descrição

O comando CREATE VIEW no Redshift inclui uma cláusula opcional que torna as visualizações independentes de seus objetos de banco de dados referenciados (como tabelas ou funções). Ao usar essa cláusula, você deve incluir nomes de esquemas para todos os objetos referenciados. Esse recurso permite que você crie exibições que fazem referência a objetos que ainda não existem. O sistema só verifica se esses objetos referenciados existem quando a exibição é consultada, não quando é criada.

Atualmente, o Snowflake não oferece um comando equivalente ou uma alternativa clara para implementar essa funcionalidade. De acordo com a documentação do Snowflake, as exibições são especificamente vinculadas a um esquema, assim como os objetos referenciados na exibição.

Ao tentar remover uma instrução View, o sistema verifica todos os objetos referenciados no código de entrada. Se todas as referências forem encontradas, a instrução View será removida com sucesso. Se alguma referência estiver faltando, o sistema exibirá uma mensagem de aviso indicando que a exibição não pode ser removida devido à falta de dependências.

O SnowConvert analisa somente o código-fonte fornecido e não verifica os objetos que já existem no ambiente do Snowflake. Como resultado, você poderá ver mensagens de erro sobre referências ausentes. Se esses objetos já existirem no banco de dados do Snowflake, você pode ignorar esses erros com segurança e remover os comandos correspondentes.

Exemplos de código

Código de entrada:

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

Código de saída:

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

Recomendações

  • Para corrigir esse problema, adicione as referências que faltam em seu código. Se o objeto já existir no banco de dados do Snowflake, você poderá remover a instrução com segurança.

  • Para obter ajuda adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-EWI-RS0004

Gravidade

High

Descrição

Esse problema ocorre porque o Snowflake não é compatível com o tipo de dados HLLSKETCH.

Exemplo de código

Código de entrada:

CREATE TABLE table1
(
    col_hllsketch HLLSKETCH
);
Copy

Código de saída:

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

Recomendações

SSC-EWI-RS0005

Gravidade

High

Descrição

Esse problema ocorre porque o Snowflake não permite que aliases de coluna sejam usados na cláusula IN das operações PIVOT/UNPIVOT. Para obter mais detalhes, consulte a documentação do 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 de saída:

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

Recomendações

SSC-EWI-RS0001

Gravidade

Medium

Descrição

A instrução CREATE PROCEDURE do Redshift inclui uma cláusula opcional do modo de transação NONATOMIC. Como o Snowflake não tem um equivalente direto para esse recurso, o SMA tenta replicar uma funcionalidade semelhante, modificando o código convertido sempre que possível.

O comportamento do procedimento NONATOMIC, que confirma automaticamente as instruções dentro do procedimento, precisa ser verificado manualmente. O Snowflake fornece um parâmetro de conta «autocommit» para replicar essa funcionalidade. Para obter mais detalhes sobre o autocommit, consulte a documentação do Snowflake.

Exemplos de código

Código de entrada:

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

Código de saída:

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

Recomendações