SnowConvert para Redshift: Uma especificação de conversão

O SnowConvert para Redshift está em fase preliminar, oferecendo recursos de avaliação e conversão para TABLES e VIEWS. Embora o SnowConvert possa reconhecer outros tipos de instrução, o suporte completo ainda está em desenvolvimento.

Este documento descreve a especificação de conversão para migrar o Redshift SQL para o Snowflake usando o SnowConvert, detalhando como vários elementos são transformados e fornecendo exemplos para maior clareza.

Declaração de variáveis

  • A palavra-chave CONSTANT do Redshift, que impede a reatribuição de variáveis, é removida durante a conversão, pois o Snowflake não a suporta.

  • A restrição NOT NULL também é removida, mas o valor padrão é mantido para manter a funcionalidade.

Transações

  • TRUNCATE ROLLBACK e COMMIT são tratadas com considerações específicas sobre o comportamento do Redshift e possíveis problemas no Snowflake.

  • As chamadas de procedimento aninhadas com COMMIT ou ROLLBACK podem resultar em diferenças funcionais devido ao modelo de transação do Snowflake.

Cursores

  • DECLARE CURSOR, OPEN CURSOR, FETCH CURSOR e CLOSE CURSOR são totalmente compatíveis com o Snowflake.

Tipos de dados

  • A maioria dos tipos de dados SQL básicos é suportada com algumas restrições.

  • Os tipos de dados numéricos, de caracteres, binários, de data/hora e outros são mapeados com notas detalhadas sobre possíveis problemas.

  • Tipos de dados INTERVAL são atualmente transformados em VARCHAR devido às limitações do Snowflake.

Modelos de formato numérico

  • Vários modelos de formato numérico são compatíveis com equivalentes no Snowflake.

  • Alguns formatos como CC, PR, RN e TH não têm equivalentes diretos e podem exigir ajustes manuais.

Instruções e funções SQL

  • CREATE MATERIALIZED VIEW: Transformado em tabelas dinâmicas Snowflake com parâmetros específicos.

  • CREATE EXTERNAL TABLE: Atualmente convertido em tabelas regulares, o que exige a transferência de dados.

  • CREATE VIEW: Geralmente convertido diretamente, mas a cláusula WITH NO SCHEMA BINDING pode apresentar problemas.

  • CREATE DATABASE: Várias cláusulas são tratadas com considerações específicas para a arquitetura do Snowflake.

  • Outras instruções, como SELECT INTO, WITH, HAVING, WHERE, TOP, JOIN, GROUP BY, DISTINCT, UNION, INTERSECT, EXCEPT e várias instruções DDL e DML são geralmente suportadas com possíveis nuances.

  • As funções matemáticas e de cadeia de caracteres são, em sua maioria, convertidas diretamente, com algumas exceções e possíveis diferenças de comportamento.

  • Funções de janela como RANK, DENSE_RANK e ROW_NUMBER são totalmente compatíveis.

  • Funções de sistema como LOWER, SUBSTRING, REPLACE, SPLIT_PART e outras são geralmente convertidas com notas sobre possíveis problemas.

  • IF: o SnowConvert adicionará o parêntese nas condições e alterará a palavra-chave ELSIF por ELSEIF, pois o Redshift não exige o parêntese nas condições e ELSIF é a palavra-chave.

  • SELECT INTO: o Redshift também permite variáveis SELECT INTO quando a instrução é executada dentro de procedimentos armazenados; o Snowflake não oferece suporte a essa gramática para SELECT INTO, as expressões são movidas para a esquerda de INTO.

  • Declare Refcursor: Como o Snowflake não é compatível com o tipo de dados REFCURSOR, sua funcionalidade é replicada pela conversão da variável REFCURSOR em um tipo RESULTSET.

  • RAISE:No Snowflake, essa funcionalidade pode ser emulada usando uma função definida pelo usuário (UDF) que faz uma chamada para o console dependendo do nível especificado.

  • Open Cursor: Os argumentos do cursor devem ser vinculados a cada um de seus usos; o SnowConvert gerará as vinculações, além de reordenar e repetir os valores passados para a instrução OPEN conforme necessário para satisfazer as vinculações.

  • RETURN:A conversão da instrução de retorno do Amazon Redshift para o Snowflake é direta, considerando apenas a adição de um NULL à instrução de retorno no Snowflake.

Principais considerações

  • Este documento é um trabalho em andamento, e o suporte completo para todos os elementos do Redshift ainda está em desenvolvimento.

  • Teste minuciosamente o código convertido para garantir a precisão e solucionar quaisquer diferenças funcionais.

  • Considere as implicações de desempenho e otimize as consultas após a conversão.

Essa especificação de conversão fornece uma visão geral abrangente de como o SnowConvert lida com a migração do Redshift SQL para o Snowflake. Compreender essas transformações é fundamental para uma migração bem-sucedida e pode ajudá-lo a prever e resolver possíveis problemas durante o processo.