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;
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;
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;
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;
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;
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;
$$;
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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;
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;
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
);
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" }}';
Recomendações¶
Analise todas as funções agregadas que o Snowflake oferece para estimar a cardinalidade usando HyperLogLog.
Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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)
);
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)
);
Recomendações¶
Para obter suporte adicional, entre em contato com nossa equipe de suporte pelo e-mail snowconvert-support@snowflake.com
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;
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;
$$;
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com