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;
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;
$$;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
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;
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;
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
);
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" }}';
Meilleures pratiques¶
Veuillez vérifier toutes les fonctions d’agrégation fournies par Snowflake pour estimer la cardinalité en utilisant HyperLogLog.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
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)
);
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)
);
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
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;
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;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
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');
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;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
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;
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;
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;
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;
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');
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');
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.