SnowConvert AI - Problèmes Redshift

SSC-EWI-RS0002

Le « paramètre de configuration » Set n’est pas pris en charge dans Snowflake.

Gravité

Medium

Description

L’utilisation du paramètre de configuration SET n’est pas prise en charge par Snowflake. Pour plus d’informations, veuillez vous référer à la documentation CREATE PROCEDURE.

Exemples de code

Code d’entrée :
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
Code généré :
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

Meilleures pratiques

SSC-EWI-RS0003

La vue sans liaison de schéma ne peut pas être supprimée, car des références sont manquantes.

Gravité

Medium

Description

La documentation Redshift pour CREATE VIEW inclut une clause facultative qui spécifie que la vue particulière n’est pas liée aux objets de la base de données tels que les tables ou les fonctions, ni aux objets auxquels elle fait référence. La documentation précise également que dans les cas où cette clause est utilisée, les objets référencés doivent être qualifiés avec un nom de schéma. Cette clause permet de créer une vue et de référencer des objets qui n’existent peut-être pas encore. Leur présence sera vérifiée une fois la vue interrogée, mais pas lors de sa définition.

Cependant, il n’existe pas de commande équivalente ni de solution de contournement évidente pour implémenter cette fonctionnalité dans Snowflake. De plus, la documentation Snowflake suggère que les vues sont liées à un schéma spécifique, tout comme les objets référencés dans la vue.

Si les références liées à la vue sont présentes dans le code d’entrée, l’instruction sera supprimée sans problème. Toutefois, s’il manque les références nécessaires, un message d’avertissement sera ajouté pour informer l’utilisateur que l’instruction ne peut pas être supprimée en raison des références manquantes.

SnowConvert AI effectue une analyse uniquement sur le code d’entrée et ne tient pas compte des objets déjà déployés dans Snowflake. Par conséquent, la sortie peut présenter quelques problèmes pointant vers des références manquantes. Si les références sont déjà présentes dans la base de données Snowflake, l’utilisateur peut supprimer l’instruction en toute sécurité et sans problème.

Exemples de code

Code d’entrée :
Redshift
 CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Copy
Code généré :
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

Meilleures pratiques

  • Pour résoudre ce problème, il est suggéré d’ajouter les références manquantes au code d’entrée. Si l’objet est déjà déployé dans la base de données Snowflake, l’instruction peut être supprimée sans problème.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-EWI-RS0004

Type de données HLLSKETCH non pris en charge dans Snowflake.

Gravité

Élevé

Description

Ce problème de conversion est ajouté, car le type de données HLLSKETCH n’est pas pris en charge dans Snowflake.

Exemple de code

Code d’entrée :
 CREATE TABLE table1
(
    col_hllsketch HLLSKETCH
);
Copy
Code généré :
 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

Meilleures pratiques

SSC-EWI-RS0005

Les alias de colonnes ne peuvent pas être utilisés dans la clause IN.

Gravité

Élevé

Description

Ce problème de conversion est ajouté, car les alias de colonnes ne peuvent pas être utilisés dans la clause IN de la requête PIVOT/UNPIVOT dans Snowflake.

Exemple de code

Code d’entrée :
 SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
Copy
Code généré :
 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

Meilleures pratiques

SSC-EWI-RS0006

Le comportement de la fonction SUBSTRING peut différer lorsqu’elle est appliquée à des données binaires.

Gravité

Medium

Description

Le comportement de la fonction SUBSTRING peut différer lorsqu’elle est appliquée à des données binaires. Étant donné que Redshift et Snowflake traitent les données binaires différemment, les résultats peuvent varier entre les deux plateformes.

Exemple de code

Code d’entrée :
 SELECT SUBSTRING('12345'::varbyte, 2, 4) AS substring_binary;
SELECT SUBSTRING('abc'::varbyte, 2, 4) AS substring_binary;
Copy
Code généré :
 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

Meilleures pratiques

SSC-EWI-RS0007

Le littéral de date n’est pas pris en charge dans Snowflake.

Gravité

Élevé

Description

Certains formats DATE, TIME ou TIMESTAMP ne sont pas pris en charge dans Snowflake. Ces formats peuvent nécessiter une manipulation manuelle.

Exemple de code

Code d’entrée :
 select datediff(century, '2000-Jan-31', 'Jan-31-2000');
Copy
Code généré :
  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

Meilleures pratiques

SSC-EWI-RS0008

Le littéral de date n’est pas pris en charge dans Snowflake.

Gravité

Élevé

Description

Ce problème de conversion est ajouté, car dans Redshift, vous pouvez appliquer l’instruction DELETE aux vues matérialisées utilisées pour l’ingestion de flux. Dans Snowflake, ces vues sont transformées en tables dynamiques, et l’instruction DELETE ne peut pas être utilisée sur les tables dynamiques.

Exemple de code

Code d’entrée :
 CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department_id FROM employees WHERE department_id = 101;

DELETE FROM mv
WHERE id = 2;
Copy
Code généré :
 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

Meilleures pratiques

  • Étant donné que les tables dynamiques ne peuvent pas être directement supprimées, vous pouvez obtenir le même résultat en remplaçant la définition des tables dynamiques.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-EWI-RS0009

Informations sémantiques introuvables pour la table source.

Gravité

Faible

Description

Dans Snowflake, la clause MERGE avec REMOVE DUPLICATES n’est pas prise en charge. Pour prendre entièrement en charge le code d’origine, une solution de contournement est nécessaire. Une clause INSERT WHEN NOT MATCHED doit être générée dans le code de sortie, et elle nécessite les colonnes de la table source. Si la table source n’a pas été trouvée lors de la migration, aucune colonne ne sera générée, et une erreur sera générée.

Exemple de code

Code d’entrée :
Redshift
 MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Copy
Code généré :
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

Meilleures pratiques

  • Recherchez si la table source est présente dans le code migré et ajoutez manuellement les colonnes dans l’opération d’insertion.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-EWI-RS0010

Paramètres de sortie non pris en charge sur l’unité CALL de niveau supérieur.

Gravité

Faible

Description

Redshift permet d’utiliser des instructions CALL au sein des paramètres de sortie en tant qu’unités de code de niveau supérieur, sans définir de variable qui serait attribuée en sortie. Snowflake impose l’utilisation d’une variable pour définir la valeur de sortie quelque part.

Exemple de code

Code d’entrée :
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
Code généré :
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

Meilleures pratiques

  • Déplacez l’appel dans un bloc anonyme et déclarez une variable à transmettre en tant que paramètre de sortie.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.