SnowConvert for Redshift : une spécification de traduction

SnowConvert for Redshift est actuellement en aperçu, offrant des capacités d’évaluation et de traduction pour les TABLES et les VIEWS. Bien que SnowConvert puisse reconnaître d’autres types d’instruction, la prise en charge complète est encore en cours de développement.

Ce document décrit la spécification de traduction pour la migration de Redshift SQL vers Snowflake à l’aide de SnowConvert, en détaillant la façon dont les différents éléments sont transformés et en fournissant des exemples pour plus de clarté.

Déclaration de variables

  • Le mot-clé CONSTANT de Redshift, empêchant la réaffectation des variables, est supprimé lors de la traduction, car Snowflake ne le prend pas en charge.

  • La contrainte NOT NULL est également supprimée, mais la valeur par défaut est conservée pour maintenir la fonctionnalité.

Transactions

  • Les instructions TRUNCATE, ROLLBACK et COMMIT sont traitées avec des considérations spécifiques pour le comportement de Redshift et les problèmes potentiels dans Snowflake.

  • Les appels de procédure imbriqués avec COMMIT ou ROLLBACK peuvent entraîner des différences fonctionnelles en raison du modèle de transaction de Snowflake.

Curseurs

  • DECLARE CURSOR, OPEN CURSOR, FETCH CURSOR et CLOSE CURSOR sont entièrement pris en charge par Snowflake.

Types de données

  • La plupart des types de données de base de SQL sont pris en charge avec certaines restrictions.

  • Les types de données numériques, caractères, binaires, date/heure et autres sont mappés avec des notes détaillées sur les problèmes potentiels.

  • Les types de données INTERVAL sont actuellement transformés en VARCHAR en raison des limites de Snowflake.

Modèles de format numérique

  • Différents modèles de formats numériques sont pris en charge avec des équivalents dans Snowflake.

  • Certains formats comme CC, PR, RN et TH n’ont pas d’équivalents directs et peuvent nécessiter des ajustements manuels.

Instructions et fonction sSQL

  • CREATE MATERIALIZED VIEW : transformé en tables dynamiques Snowflake avec des paramètres spécifiques.

  • CREATE EXTERNAL TABLE : actuellement converti en tables régulières, ce qui nécessite un transfert de données.

  • CREATE VIEW : généralement traduit directement, mais la clause WITH NO SCHEMA BINDING peut poser problème.

  • CREATE DATABASE : diverses clauses sont traitées avec des considérations spécifiques à l’architecture de Snowflake.

  • D’autres instructions telles que SELECT INTO, WITH, HAVING, WHERE, TOP, JOIN, GROUP BY, DISTINCT, UNION, INTERSECT, EXCEPT et diverses instructions DDL et DML sont généralement prises en charge avec des nuances potentielles.

  • Les fonctions mathématiques et de chaîne sont pour la plupart traduites directement, à quelques exceptions près et avec des différences de comportement potentielles.

  • Les fonctions de fenêtre telles que RANK, DENSE_RANK et ROW_NUMBER sont entièrement prises en charge.

  • Les fonctions du système telles que LOWER, SUBSTRING, REPLACE, SPLIT_PART et d’autres sont généralement traduites avec des notes sur les problèmes potentiels.

  • IF : SnowConvert ajoutera la parenthèse dans les conditions et remplacera le mot-clé ELSIF par ELSEIF puisque Redshift ne requiert pas la parenthèse dans les conditions et que ELSIF est le mot-clé.

  • SELECT INTO : Redshift autorise également les variables SELECT INTO lorsque l’instruction est exécutée à l’intérieur de procédures stockées, Snowflake ne prend pas en charge cette grammaire pour SELECT INTO, les expressions sont déplacées à gauche de INTO.

  • Declare Refcursor: Étant donné que Snowflake ne prend pas en charge le type de données REFCURSOR, sa fonctionnalité est répliquée en convertissant la variable REFCURSOR en un type RESULTSET.

  • RAISE:Dans Snowflake, cette fonctionnalité peut être émulée à l’aide d’une fonction définie par l’utilisateur (UDF) qui lance un appel à la console en fonction du niveau spécifié.

  • Open Cursor: Les arguments du curseur doivent être liés pour chacune de leurs utilisations, SnowConvert générera les liaisons, et réordonnera et répétera les valeurs passées à l’instruction OPEN si nécessaire pour satisfaire les liaisons.

  • RETURN:La conversion de l’instruction return d’Amazon Redshift vers Snowflake est simple, il suffit d’envisager l’ajout d’un NULL à l’instruction return sur Snowflake.

Considérations clés

  • Ce document est un travail en cours, et la prise en charge complète de tous les éléments de Redshift est encore en cours de développement.

  • Testez minutieusement le code converti afin d’en garantir l’exactitude et de remédier aux éventuelles différences fonctionnelles.

  • Tenez compte des implications en termes de performance et optimisez les requêtes après la conversion.

Cette spécification de traduction donne un aperçu complet de la manière dont SnowConvert gère la migration de Redshift SQL vers Snowflake. La compréhension de ces transformations est cruciale pour une migration réussie et peut vous aider à anticiper et à résoudre les problèmes potentiels au cours du processus.