SnowConvert : problèmes liés à Redshift¶
SSC-EWI-RS0008¶
Gravité¶
Élevé
Description¶
Ce problème se pose parce que Redshift autorise les instructions DELETE sur les vues matérialisées qui sont utilisées pour l”ingestion en flux. Lors de la conversion vers Snowflake, ces vues matérialisées deviennent des tables dynamiques, qui ne prennent pas en charge les opérations DELETE.
Exemple de code¶
Code d’entrée :¶
CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department FROM employees WHERE department = 'Engineering';
DELETE FROM mv
WHERE id = 2;
Code de sortie :¶
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;
Recommandations¶
Pour supprimer des enregistrements d’une table dynamique, vous devez remplacer toute la définition de la table dynamique par une nouvelle.
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-EWI-RS0009¶
Gravité¶
Faible
Description¶
Dans Snowflake, lorsque vous utilisez l’instruction MERGE, la clause REMOVE DUPLICATES n’est pas disponible. Pour obtenir la même fonctionnalité, vous devrez mettre en œuvre une solution de contournement. Il s’agit d’ajouter une clause INSERT WHEN NOT MATCHED à votre code. Cette clause exige des informations sur les colonnes de la table source. Si le processus de migration ne parvient pas à localiser la table source, les colonnes requises ne pourront pas être générées, ce qui entraînera une erreur.
Exemple de code¶
Code d’entrée :¶
MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Code de sortie :¶
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;
Recommandations¶
Vérifiez si la table source existe dans le code migré, puis ajoutez manuellement les colonnes manquantes à l’instruction d’insertion.
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-EWI-RS0002¶
Gravité¶
Medium
Description¶
La fonction SET configuration parameter
, qui est disponible dans Redshift, n’est pas prise en charge dans Snowflake. Pour plus de détails, veuillez consulter la documentation de CREATE PROCEDURE.
Exemples de code¶
Code d’entrée :¶
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 de sortie :¶
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;
$$;
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-EWI-RS0003¶
Gravité¶
Medium
Description¶
La commande CREATE VIEW
de Redshift comprend une clause facultative qui rend les vues indépendantes de leurs objets de base de données référencés (tels que les tables ou les fonctions). Lorsque vous utilisez cette clause, vous devez inclure les noms de schémas pour tous les objets référencés. Cette fonction vous permet de créer des vues qui font référence à des objets qui n’existent pas encore. Le système ne vérifie l’existence de ces objets référencés que lors de la requête de la vue, et non lors de sa création.
Actuellement, Snowflake ne fournit pas de commande équivalente ou d’alternative claire pour mettre en œuvre cette fonctionnalité. Selon la documentation de Snowflake, les vues sont spécifiquement liées à un schéma, tout comme les objets référencés dans la vue.
Lors de la suppression d’une instruction View, le système vérifie la présence de tous les objets référencés dans le code d’entrée. Si toutes les références sont trouvées, l’instruction View sera supprimée correctement. Si des références manquent, le système affiche un message d’avertissement indiquant que la vue ne peut pas être supprimée en raison de dépendances manquantes.
SnowConvert analyse uniquement le code source fourni et ne vérifie pas les objets qui existent déjà dans votre environnement Snowflake. En conséquence, il se peut que vous receviez des messages d’erreur concernant des références manquantes. Si ces objets existent déjà dans votre base de données Snowflake, vous pouvez ignorer ces erreurs et supprimer les instructions correspondantes.
Exemples de code¶
Code d’entrée :¶
CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Code de sortie :¶
--** 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;
Recommandations¶
Pour corriger ce problème, ajoutez les références manquantes dans votre code. Si l’objet existe déjà dans la base de données de Snowflake, vous pouvez supprimer l’instruction en toute sécurité.
Pour obtenir de l’aide supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-EWI-RS0004¶
Gravité¶
Élevé
Description¶
Ce problème survient parce que Snowflake ne prend pas en charge le type de données HLLSKETCH.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE table1
(
col_hllsketch HLLSKETCH
);
Code de sortie :¶
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" }}';
Recommandations¶
Passez en revue toutes les fonctions agrégées que Snowflake propose pour estimer la cardinalité à l’aide de HyperLogLog.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-EWI-RS0005¶
Gravité¶
Élevé
Description¶
Ce problème survient parce que Snowflake n’autorise pas l’utilisation d’alias de colonne dans la clause IN des opérations PIVOT/UNPIVOT
. Pour plus de détails, voir la documentation de 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 de sortie :¶
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)
);
Recommandations¶
Pour obtenir une assistance supplémentaire, veuillez contacter notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com
SSC-EWI-RS0001¶
Gravité¶
Medium
Description¶
L’instruction CREATE PROCEDURE
de Redshift comprend une clause facultative relative au mode de transaction NONATOMIC
. Comme Snowflake n’a pas d’équivalent direct pour cette fonction, SMA tente de répliquer une fonctionnalité similaire en modifiant le code converti dans la mesure du possible.
Le comportement de la procédure NONATOMIC
, qui valide automatiquement les instructions au sein de la procédure, doit être vérifié manuellement. Snowflake fournit un paramètre de compte « autocommit » pour répliquer cette fonctionnalité. Pour plus de détails sur la validation automatique, reportez-vous à la documentation de Snowflake.
Exemples de code¶
Code d’entrée :¶
CREATE OR REPLACE PROCEDURE procedure1(parameter int)
Nonatomic
AS
$$
SELECT * from my_table;
$$
LANGUAGE plpgsql;
Code de sortie :¶
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;
$$;
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com