SnowConvert AI - Différences fonctionnelles Redshift¶
SSC-FDM-RS0001¶
Option non prise en charge. Le stockage de données est automatiquement géré par Snowflake.
Description¶
Dans Snowflake, il n’est pas nécessaire de définir explicitement SORTKEY et DISTSTYLE lors de la migration depuis Redshift, car l’architecture de Snowflake gère de manière inhérente la distribution et l’optimisation des données. Snowflake gère automatiquement le partitionnement et l’indexation des données, optimisant les performances des requêtes sans qu’il ne soit nécessaire de configurer manuellement ces paramètres.
Exemple de code¶
Code d’entrée :¶
Redshift¶
CREATE TABLE table1 (
col1 INTEGER
)
DISTSTYLE AUTO;
CREATE TABLE table2 (
col1 INTEGER
)
SORTKEY AUTO;
Code généré :¶
Snowflake¶
CREATE TABLE table1 (
col1 INTEGER
)
----** SSC-FDM-RS0001 - DISTSTYLE AUTO OPTION NOT SUPPORTED. DATA STORAGE IS AUTOMATICALLY HANDLED BY SNOWFLAKE. **
--DISTSTYLE AUTO
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}';
CREATE TABLE table2 (
col1 INTEGER
)
----** SSC-FDM-RS0001 - SORTKEY AUTO OPTION NOT SUPPORTED. DATA STORAGE IS AUTOMATICALLY HANDLED BY SNOWFLAKE. **
--SORTKEY AUTO
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}';
Meilleures pratiques¶
Il est conseillé d’évaluer l’utilisation de
CLUSTER BYdans Snowflake lors de la migration depuis Redshift, car elle peut améliorer les performances des requêtes en optimisant la localité des données pour les colonnes fréquemment interrogées.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-RS0002¶
Les performances de CLUSTER BY peuvent varier par rapport aux performances des Sortkey.
Description¶
Les SORTKEY (à l’exception de SORTKEY AUTO) dans Amazon Redshift sont analogues à CLUSTER BY dans Snowflake. Cependant, les implications en termes de performances peuvent varier en raison des différences architecturales entre Redshift et Snowflake.
SORTKEYaméliore les performances en conservant les données dans un ordre trié en fonction de colonnes spécifiées. Cela est particulièrement avantageux pour les requêtes portant sur des intervalles et les opérations d’ordre.CLUSTER BYdans Snowflake organise les données en blocs en fonction de colonnes désignées, facilitant ainsi les tâches de filtrage et d’agrégation. Cependant, l’ordre est moins strict par rapport àSORTKEY.
La compréhension de ces mécanismes est essentielle pour optimiser les performances dans chaque plateforme respective.
Exemple de code¶
Code d’entrée :¶
Redshift¶
CREATE TABLE table1 (
col1 INTEGER
)
SORTKEY (col1);
CREATE TABLE table2 (
col1 INTEGER SORTKEY
);
Code généré :¶
Snowflake¶
CREATE TABLE table1 (
col1 INTEGER
)
--** SSC-FDM-RS0002 - THE PERFORMANCE OF THE CLUSTER BY MAY VARY COMPARED TO THE PERFORMANCE OF SORTKEY **
CLUSTER BY (col1)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}'
;
CREATE TABLE table2 (
col1 INTEGER
)
--** SSC-FDM-RS0002 - THE PERFORMANCE OF THE CLUSTER BY MAY VARY COMPARED TO THE PERFORMANCE OF SORTKEY **
CLUSTER BY (col1)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/17/2024" }}';
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-RS0003¶
La traduction des clés étrangères sera prise en charge à l’avenir.
Description¶
La traduction des clés étrangères sera transformée à l’avenir. La documentation relative aux clés étrangères dans Snowflake est accessible ici.
Note
Dans Snowflake, la contrainte de clé étrangère n’est pas appliquée et est utilisée pour l’intégrité référentielle.
Exemple de code¶
Code d’entrée :¶
Redshift¶
CREATE TABLE TABLE1 (
id INTEGER,
PRIMARY KEY (id)
);
CREATE TABLE TABLE2 (
id INTEGER,
id_table1 INTEGER,
FOREIGN KEY (id_table1) REFERENCES TABLE1 (col1)
);
Code généré :¶
Snowflake¶
CREATE TABLE TABLE1 (
id INTEGER,
PRIMARY KEY (id)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/26/2024" }}';
CREATE TABLE TABLE2 (
id INTEGER,
id_table1 INTEGER
-- ,
-- --** SSC-FDM-RS0003 - THE TRANSLATION FOR FOREIGN KEY IS NOT AVAILABLE, IT WILL BE PROVIDED IN THE FUTURE. **
-- FOREIGN KEY (id_table1) REFERENCES TABLE1 (col1)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/26/2024" }}';
Meilleures pratiques¶
Vous pouvez manuellement modifier des tables avec des clés étrangères et en ajouter.
ALTER TABLE TABLE2 ADD CONSTRAINT
FOREIGN KEY (id_table1) REFERENCES TABLE1 (col1)
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-RS0004¶
Il est possible que la date soit erronée et que Snowflake n’accepte pas les dates erronées.
Description¶
Dans Snowflake, l’utilisation de TO_DATE avec une chaîne de date non valide (comme « 20010631 ») entraîne une erreur, car elle impose une validation stricte, rejetant toute date inexistante. En revanche, TO_DATE de Redshift peut ajuster ces dates non valides à la date valide la plus proche (par exemple, en passant du 31 juin au 1er juillet) si le paramètre is_strict est défini sur faux. Cette différence met en évidence la façon dont Snowflake donne la priorité à l’intégrité des données en ne corrigeant pas automatiquement les dates non valides, tandis que Redshift permet une plus grande flexibilité dans la gestion des dates.
Exemple de code¶
Code d’entrée :¶
Redshift¶
SELECT TO_DATE('20010631', 'YYYYMMDD', FALSE);
Code généré :¶
Snowflake¶
SELECT
TRY_TO_DATE(/*** SSC-FDM-RS0004 - INVALID DATES WILL CAUSE ERRORS IN SNOWFLAKE ***/ '20010631', 'YYYYMMDD');
Meilleures pratiques¶
Vérifiez que la date est valide dans TRY_TO_DATE().
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-RS0005¶
Les doublons ne sont pas autorisés dans la table source.
Description¶
Dans Redshift, l’instruction MERGE génère une erreur lorsque la table source a des valeurs en double. Snowflake ne renvoie pas l’erreur et autorise l’exécution de la requête à la place. Le FDM avertit de ce comportement, qui pourrait modifier le résultat dans le MERGE converti.
Exemple de code¶
Code d’entrée :¶
Redshift¶
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
Code généré :¶
Snowflake¶
--** 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 (source.id, source.name);
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-RS0006¶
La procédure appelée contient des utilisations de COMMIT/ROLLBACK. La modification de la transaction actuelle dans les portées enfants n’est pas prise en charge dans Snowflake.
Description¶
Dans Redshift, il est autorisé d’utiliser les instructions COMMIT et ROLLBACK à l’intérieur d’une procédure pour rendre permanentes ou ignorer les modifications sur une transaction qui a été ouverte sur une portée extérieure.
Snowflake fonctionne avec le concept de transactions scopées, qui traite chaque appel de procédure comme une transaction distincte, ce qui limite les effets des instructions COMMIT et ROLLBACK sur la portée de la procédure dans lesquelles elles sont déclarées.
La différence fonctionnelle mentionnée ci-dessus sera signalée par ce FDM lorsque des appels à une procédure avec COMMIT ou ROLLBACK seront détectés par SnowConvert.
Exemple de code¶
Code d’entrée :¶
Redshift¶
CREATE OR REPLACE PROCEDURE inner_transaction_procedure(a int)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO transaction_values_test values (a);
ROLLBACK;
INSERT INTO transaction_values_test values (a + 1);
END
$$;
CREATE OR REPLACE PROCEDURE outer_transaction_procedure(a int)
LANGUAGE plpgsql
AS $$
BEGIN
-- This insert is also affected by the ROLLBACK in inner_transaction_procedure
INSERT INTO transaction_values_test values (a);
CALL inner_transaction_procedure(a + 3);
COMMIT;
END
$$;
CALL outer_transaction_procedure(10);
Code généré :¶
Snowflake¶
CREATE OR REPLACE PROCEDURE inner_transaction_procedure (a int)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "03/03/2025", "domain": "test" }}'
AS $$
BEGIN
BEGIN TRANSACTION;
INSERT INTO transaction_values_test
values (:a);
ROLLBACK;
BEGIN TRANSACTION;
INSERT INTO transaction_values_test
values (:a + 1);
COMMIT;
END
$$;
CREATE OR REPLACE PROCEDURE outer_transaction_procedure (a int)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "03/03/2025", "domain": "test" }}'
AS $$
BEGIN
BEGIN TRANSACTION;
-- This insert is also affected by the ROLLBACK in inner_transaction_procedure
INSERT INTO transaction_values_test
values (:a);
--** SSC-FDM-RS0006 - CALLED PROCEDURE CONTAINS USAGES OF COMMIT/ROLLBACK, MODIFYING THE CURRENT TRANSACTION IN CHILD SCOPES IS NOT SUPPORTED IN SNOWFLAKE **
CALL inner_transaction_procedure(:a + 3);
COMMIT;
END
$$;
CALL outer_transaction_procedure(10);
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-RS0007¶
Les instructions DDL effectuent une COMMIT automatique. ROLLBACK ne fonctionnera pas comme prévu.
Description¶
Dans Snowflake, [les instructions DDL effectuent une validation automatique] (https://docs.snowflake.com/fr/sql-reference/transactions#ddl) après leur exécution, rendant permanentes toutes les modifications de la transaction en cours, ce qui signifie qu’elles ne peuvent pas être écartées par un ROLLBACK.
Lorsqu’une instruction ROLLBACK sera trouvée dans une procédure qui contient également une instruction DDL, SnowConvert AI générera ce FDM pour signaler le comportement de validation automatique de la DDL.
Exemple de code¶
Code d’entrée :¶
Redshift¶
CREATE OR REPLACE PROCEDURE rollback_ddl(a int)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO transaction_values_test values (a);
CREATE TABLE someRollbackTable
(
col1 INTEGER
);
INSERT INTO someRollbackTable values (a);
ROLLBACK;
END
$$;
CALL rollback_ddl(10);
Code généré :¶
Snowflake¶
CREATE OR REPLACE PROCEDURE rollback_ddl (a int)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "03/03/2025", "domain": "test" }}'
AS $$
BEGIN
BEGIN TRANSACTION;
INSERT INTO transaction_values_test
values (:a);
CREATE TABLE someRollbackTable
(
col1 INTEGER
);
BEGIN TRANSACTION;
INSERT INTO someRollbackTable
values (:a);
--** SSC-FDM-RS0007 - DDL STATEMENTS PERFORM AN AUTOMATIC COMMIT, ROLLBACK WILL NOT WORK AS EXPECTED **
ROLLBACK;
END
$$;
CALL rollback_ddl(10);
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-RS0008¶
SNOWFLAKE USES AUTOCOMMIT BY DEFAULT.
Description¶
Les instructions Snowflake à l’intérieur des procédures sont traitées comme une validation automatique. Documentation Snowflake
Exemple de code¶
Code d’entrée :¶
Redshift¶
CREATE OR REPLACE PROCEDURE SP_NONATOMIC()
NONATOMIC
AS
$$
BEGIN
NULL;
END;
$$
LANGUAGE plpgsql;
Code généré :¶
Snowflake¶
CREATE OR REPLACE PROCEDURE SP_NONATOMIC ()
RETURNS VARCHAR
----** SSC-FDM-RS0008 - SNOWFLAKE USES AUTOCOMMIT BY DEFAULT. **
--NONATOMIC
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "02/10/2025", "domain": "test" }}'
AS
$$
BEGIN
NULL;
END;
$$;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.