SnowConvert : différences fonctionnelles générales¶
SSC-FDM-0001¶
Note
Pour une meilleure lisibilité, nous avons simplifié les exemples de code en ne montrant que les parties les plus pertinentes.
Description¶
Les vues qui sélectionnent toutes les colonnes d’une seule table sans aucune condition de filtre (clause WHERE) ne sont pas nécessaires dans Snowflake et peuvent avoir un impact négatif sur les performances des requêtes.
Exemple de code¶
Code d’entrée (Oracle) :¶
CREATE OR REPLACE VIEW simpleView1
AS
SELECT
*
FROM
simpleTable;
CREATE OR REPLACE VIEW simpleView2
AS
SELECT
*
FROM
simpleTable GROUP BY col1;
Code généré :¶
CREATE OR REPLACE VIEW simpleView1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable;
CREATE OR REPLACE VIEW simpleView2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable
GROUP BY col1;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0002¶
Description¶
Ce message apparaît lorsqu’une sous-requête corrélée
est détectée. Une sous-requête corrélée fait référence à une colonne de la requête externe. Lors de la migration vers Snowflake, ces sous-requêtes peuvent se comporter différemment dans certaines casses. Pour plus de détails, voir Travailler avec des sous-requêtes.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE schema1.table1(column1 NVARCHAR(50), column2 NVARCHAR(50));
CREATE TABLE schemaA.tableA(columnA NVARCHAR(50), columnB NVARCHAR(50));
--Correlated Subquery
SELECT columnA FROM schemaA.tableA ta WHERE columnA = (SELECT SUM(column1) FROM schema1.table1 t1 WHERE t1.column1 = ta.columnA);
Code généré :¶
CREATE OR REPLACE TABLE schema1.table1 (
column1 VARCHAR(50),
column2 VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/11/2024", "domain": "test" }}'
;
CREATE OR REPLACE TABLE schemaA.tableA (
columnA VARCHAR(50),
columnB VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/11/2024", "domain": "test" }}'
;
--Correlated Subquery
SELECT
columnA
FROM
schemaA.tableA ta
WHERE
columnA =
--** SSC-FDM-0002 - CORRELATED SUBQUERIES MAY HAVE SOME FUNCTIONAL DIFFERENCES. **
(SELECT
SUM(column1) FROM
schema1.table1 t1
WHERE
t1.column1 = ta.columnA
);
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0003¶
Description¶
Cet avertissement s’affiche en cas de non-concordance des taux de conversion pour le champ d’évaluation spécifié. SC résout automatiquement ces incohérences. Ce message n’a donc qu’une valeur informative.
Note
Ce message d’avertissement n’apparaît que dans les documents d’évaluation et ne sera pas affiché dans le code de sortie.
Meilleures pratiques¶
Si vous rencontrez des problèmes, même si SnowConvert peut les corriger automatiquement, vous pouvez toujours contacter l’équipe de support SnowConvert à snowconvert-support@snowflake.com pour obtenir de l’aide.
SSC-FDM-0004¶
Description¶
Cet avertissement apparaît dans les clauses relatives à la gestion externe parce que Snowflake gère le stockage des données différemment. Contrairement à d’autres bases de données, Snowflake ne nécessite pas de tables externes puisque toutes les données doivent être stockées dans le système de stockage interne de Snowflake. Pour plus de détails sur ce sujet, voir les Considérations relatives au stockage de données.
Exemple de code¶
Code d’entrée :¶
CREATE OR REPLACE EXTERNAL TABLE external_table_test1
(
col1 INTEGER
)
OPTIONS (
format = 'CSV',
uris = ['gs://my_bucket/file.csv']
);
Code généré :¶
--** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE OR REPLACE TABLE external_table_test1 (
col1 INTEGER
)
-- OPTIONS (
-- format = 'CSV',
-- uris = ['gs://my_bucket/file.csv']
-- )
;
Meilleures pratiques¶
Les données des fichiers de tables externes doivent être importées dans votre base de données Snowflake.
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0005¶
Description¶
Le type de données TIME dans Snowflake ne stocke que la composante temporelle sans aucune information sur le fuseau horaire.
TIME enregistre les valeurs de l’heure et effectue toutes les opérations sans tenir compte des fuseaux horaires. Pour plus de détails, voir TIME.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE TABLE_TIME_TYPE (
COLNAME TIME (9) WITH TIME ZONE
);
Code généré :¶
CREATE OR REPLACE TABLE TABLE_TIME_TYPE (
COLNAME TIME(9) /*** SSC-FDM-0005 - TIME ZONE NOT SUPPORTED FOR TIME DATA TYPE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Meilleures pratiques¶
Aucune action n’est requise de la part des utilisateurs.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0006¶
Description¶
Ce message apparaît lors de la création d’une colonne avec le type de données NUMBER
dans une table. Il met en garde contre les différences arithmétiques potentielles dans Snowflake lorsque l’on travaille avec des échelles décimales dans les calculs intermédiaires. Ces différences peuvent faire échouer certaines opérations. Pour plus de détails, consultez le post de Snowflake sur les nombres intermédiaires dans Snowflake et le Nombre en dehors de l’intervalle représentable.
Pour éviter les problèmes de calcul arithmétique, nous vous recommandons d’effectuer d’abord des tests d’échantillonnage des données. Cela vous aidera à déterminer les valeurs de précision et d’échelle correctes nécessaires à vos opérations.
Exemples de codes¶
Table simple avec des colonnes numérotées¶
Code d’entrée (Oracle) :¶
CREATE TABLE table1
(
column1 NUMBER,
column2 NUMBER (20, 4)
);
Code généré :¶
CREATE OR REPLACE TABLE table1
(
column1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
column2 NUMBER(20, 4) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Exemples de problèmes arithmétiques¶
Les exemples suivants montrent comment les opérations arithmétiques peuvent conduire à des résultats inattendus lorsque l’on travaille avec des colonnes de nombres :
Code Snowflake avec erreur de division :¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 19) );
INSERT INTO number_table VALUES (1);
SELECT column1 / column1 FROM number_table;
Code Snowflake avec erreur de multiplication :¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 20) );
INSERT INTO number_table VALUES (1);
SELECT column1 * column1 FROM number_table;
Lors de l’exécution des instructions SELECT
dans Snowflake, un message d’erreur s’affiche.
Number exceeds the allowed range for data type FIXEDSB16 (nullable). The value 1.0000000000000000000 cannot be stored in this data type.
Cette erreur se produit lorsque le résultat du calcul dépasse la capacité de stockage maximale de Snowflake. Pour résoudre ce problème, réduisez l’échelle (nombre de décimales) de 1 dans chaque exemple. Cela permettra à l’opération de se terminer correctement.
Code Snowflake avec division :¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 18) );
INSERT INTO number_table VALUES (1);
SELECT column1 / column1 FROM number_table;
Code Snowflake avec multiplication :¶
CREATE OR REPLACE TABLE numbertable( column1 NUMBER(38, 19) );
INSERT INTO number_table VALUES (1);
SELECT column1 * column1 FROM number_table;
Pour minimiser les erreurs de migration, SnowConvert définit automatiquement l’échelle par défaut des nombres à 18.
Meilleures pratiques¶
Vérifiez que les valeurs intermédiaires de vos opérations ne dépassent pas l’échelle maximale de 37 de Snowflake.
Analysez les échantillons de données pour confirmer les paramètres de précision et d’échelle requis avant d’exécuter les opérations.
Souvent, après un échantillonnage de données ou des discussions commerciales, vous pouvez constater que d’autres paramètres de précision sont plus appropriés. Par exemple, les colonnes
MONEY
utilisent généralementNUMBER(20,4)
. Étant donné que la modification des types de données des colonnes dans Snowflake n’est pas simple, vous pouvez vous référer à ce post sur notre forum pour obtenir des références sur la modification des types de données des colonnes tout en préservant les données.Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0007¶
Note
Les extraits de code ont été simplifiés pour se concentrer sur les concepts clés
Description¶
Une erreur de déploiement peut se produire lorsque SnowConvert ne parvient pas à trouver une dépendance requise ou à résoudre certains types de données. Cela peut se produire lorsque l’objet dépendant est absent du code source.
Exemple de code¶
Code d’entrée :¶
CREATE VIEW VIEW01 AS SELECT * FROM TABLE1;
Code généré :¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
* FROM
TABLE1;
Note
La définition de TABLE1 n’a pas été fournie dans cet exemple.
Meilleures pratiques¶
Vérifiez que toutes les dépendances des objets sont incluses dans votre code source.
Examinez toutes les références d’objet dans le code pour vous assurer qu’elles sont correctement gérées.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0008¶
Note
Pour une meilleure lisibilité, nous avons simplifié certaines sections du code dans cet exemple.
Description ¶
Lors de la création de tables dans Snowflake, la clause ON COMMIT ne peut être utilisée qu’avec des tables temporelles. Si vous incluez une clause ON COMMIT dans la définition d’une table non temporelle, elle sera commentée dans le code converti. De plus, comme Snowflake ne prend pas en charge ON COMMIT DELETE, cette option sera également commentée lors de la conversion.
Exemple de code¶
Code d’entrée¶
CREATE TABLE TABLE01 (COLNAME VARCHAR(20)) ON COMMIT PRESERVE ROWS
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
Code généré¶
CREATE OR REPLACE TABLE TABLE01 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT PRESERVE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0009¶
Description ¶
Les tables temporaires globales sont complexes car elles peuvent être créées de différentes manières, comme le montre la documentation de Snowflake.
Exemple de code¶
Code d’entrée¶
CREATE OR REPLACE GLOBAL TEMPORARY TABLE GLOBAL_TEMP_TABLE
(
col3 INTEGER,
col4 VARCHAR(50)
);
Code généré¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE GLOBAL_TEMP_TABLE
(
col3 INTEGER,
col4 VARCHAR(50)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0010¶
Description ¶
Ce message apparaît lorsque SnowConvert détecte une clause DEFAULT SYSDATE dans laquelle le type de données de la colonne n’est pas DATE ou TIMESTAMP. Dans ce cas, SnowConvert convertit automatiquement le type de données en DATE.
Exemple de code¶
Code d’entrée¶
CREATE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1"(
"COLUMN1" VARCHAR2(30 BYTE) DEFAULT SYSDATE
);
Code généré¶
CREATE OR REPLACE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1" (
"COLUMN1" TIMESTAMP DEFAULT CURRENT_TIMESTAMP() /*** SSC-FDM-0010 - CONVERTED FROM VARCHAR2 TO DATE FOR CURRENT_DATE DEFAULT ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0011¶
Note
Ce FDM n’est plus pris en charge. Pour plus d’informations, veuillez consulter SSC-EWI-0045.
Description ¶
Noms de colonnes qui sont des mots-clés réservés dans Snowflake mais qui sont valides dans la base de données source.
Exemple de code¶
Code d’entrée (Oracle) :¶
CREATE TABLE T1
(
LOCALTIME VARCHAR,
CURRENT_USER VARCHAR
);
Code généré :¶
CREATE OR REPLACE TABLE T1
(
--** SSC-FDM-0011 - COLUMN NAME 'LOCALTIME' IS A SNOWFLAKE RESERVED KEYWORD **
"LOCALTIME" VARCHAR,
--** SSC-FDM-0011 - COLUMN NAME 'CURRENT_USER' IS A SNOWFLAKE RESERVED KEYWORD **
"CURRENT_USER" VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Meilleures pratiques¶
Renommez les colonnes dont le nom n’est pas pris en charge dans Snowflake.
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0012¶
Description ¶
Cet avertissement apparaît lorsqu’une contrainte constraintName est utilisée dans l’expression par défaut d’une colonne. Étant donné que Snowflake ne prend pas en charge les contraintes dans les expressions par défaut, la contrainte et son constraintName sont automatiquement supprimées, et un message d’avertissement est généré.
Exemple de code¶
Code d’entrée¶
CREATE TABLE TABLE1 (
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL
);
Code généré¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10)
--** SSC-FDM-0012 - CONSTRAINT IN DEFAULT EXPRESSION IS NOT SUPPORTED IN SNOWFLAKE **
DEFAULT ('0') NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Meilleures pratiques¶
Aucune action n’est requise de la part des utilisateurs.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0013¶
Description ¶
Un message d’avertissement a été ajouté pour mettre en évidence les cas où les expressions de fuseau horaire ne peuvent pas être évaluées lors de la conversion. Alors que SnowConvert peut mapper avec succès des chaînes littérales de fuseaux horaires à leurs équivalents dans Snowflake, il ne peut pas déterminer les valeurs de fuseaux horaires qui sont spécifiées par des expressions. Cette limite signifie que les résultats de l’environnement d’exécution dans Snowflake peuvent différer du système source lorsque des expressions de fuseaux horaires dynamiques sont utilisées.
Exemple de code¶
Code d’entrée (Oracle)¶
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE FROM DUAL;
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE Expression FROM DUAL;
Code généré¶
SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
CONVERT_TIMEZONE(Expression, TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
Code source (Teradata)¶
select TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE;
select current_timestamp at time zone CONCAT(' America ', ' Pacific');
select current_timestamp at time zone (SELECT COL1 FROM TABLE1 WHERE COL2 = 2);
Code de sortie¶
SELECT
CONVERT_TIMEZONE(SESSIONTIMEZONE, TIMESTAMP '1998-12-25 09:26:50.12') /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
SELECT
CONVERT_TIMEZONE(CONCAT(' America ', ' Pacific'), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
SELECT
CONVERT_TIMEZONE((
SELECT
COL1 FROM
TABLE1
WHERE COL2 = 2), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
Compatibilité des fuseaux horaires avec Oracle¶
La plupart des noms de fuseaux horaires Oracle sont directement compatibles avec Snowflake, ce qui permet une migration en douceur. Cependant, certaines expressions de fuseau horaire ne sont pas actuellement supportées dans Snowflake et génèreront un message de différence de fonction lors de la migration.
Afrique/Douala
Asie/Ulaanbaatar
Asie/Ekaterinbourg
Canada/Saskatchewan
Heure normale du Centre (CST)
Heure normale du Pacifique (PST)
US/Pacifique
Meilleures pratiques¶
Aucune action n’est requise de la part des utilisateurs.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0014¶
Note
Ce FDM n’est plus pris en charge. Pour plus d’informations, veuillez consulter SSC-EWI-0035.
Description¶
La contrainte _ CHECK _ n’est pas prise en charge dans Snowflake, mais cette limite n’a pas d’impact sur la fonctionnalité de votre base de données.
Exemple de code¶
Code d’entrée Oracle :¶
CREATE TABLE "Schema"."BaseTable"(
"COLUMN1" VARCHAR2(255),
CHECK ( COLUMN1 IS NOT NULL )
);
Code généré :¶
CREATE OR REPLACE TABLE "Schema"."BaseTable" (
"COLUMN1" VARCHAR(255)
-- ,
-- --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
-- CHECK ( COLUMN1 IS NOT NULL )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Code d’entrée Teradata :¶
CREATE TABLE TABLE1,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL
(
COL0 BYTEINT,
CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
Code généré :¶
CREATE TABLE TABLE1
(
COL0 BYTEINT
-- ,
-- --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
-- CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Code d’entrée SqlServer¶
ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
Code généré :¶
ALTER TABLE IF EXISTS table_name2
ADD column_name VARCHAR(255)
----** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
--CONSTRAINT constraint_name
--CHECK NOT FOR REPLICATION (column_name > 1)
;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0015¶
Description ¶
Cette erreur se produit lorsque SnowConvert ne trouve ni l’un ni l’autre :
Une définition de type personnalisé définie par l’utilisateur
Un type de données intégré reconnu par Oracle
Exemple de code¶
Code d’entrée (Oracle) :¶
--Type was never defined
--CREATE TYPE type1;
CREATE TABLE table1
(
column1 type1
);
Code généré :¶
--Type was never defined
--CREATE TYPE type1;
CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Meilleures pratiques¶
Confirmez que le type de données a été correctement défini dans votre code source.
Consultez la documentation sur les types de données de Snowflake Référence de types de données SQL pour trouver un type de données correspondant.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0016¶
Description ¶
Snowflake Scripting ne supporte pas les valeurs constantes. Lorsque la fonction Snowflake Scripting est activée, toutes les constantes des procédures sont automatiquement converties en variables.
Exemple de code¶
Oracle :¶
CREATE OR REPLACE PROCEDURE p_constants
AS
my_const1 CONSTANT NUMBER := 40;
my_const2 CONSTANT NUMBER NOT NULL := 40;
BEGIN
NULL;
END;
Exécution de scripts Snowflake¶
CREATE OR REPLACE PROCEDURE p_constants ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
my_const1 NUMBER(38, 18) := 40;
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
--** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE **
my_const2 NUMBER(38, 18) := 40;
BEGIN
NULL;
END;
$$;
Meilleures pratiques¶
Aucune action n’est requise de la part des utilisateurs.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0017¶
Description¶
La version du système, activée par la clause WITH SYSTEM VERSIONING
dans ANSI SQL, permet de suivre l’historique des modifications apportées aux données de la table. Cependant, cette fonction n’est pas disponible actuellement dans Snowflake.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE t1 (
ID INT PRIMARY KEY,
Name VARCHAR(50),
SysStartTime TIMESTAMP,
SysEndTime TIMESTAMP
) WITH SYSTEM VERSIONING;
Code généré :¶
CREATE TABLE t1 (
ID INT PRIMARY KEY,
Name VARCHAR(50),
SysStartTime TIMESTAMP,
SysEndTime TIMESTAMP
)
----** SSC-FDM-0017 - WITH SYSTEM VERSIONING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
--WITH SYSTEM VERSIONING
;
Meilleures pratiques¶
La fonction Time Travel de Snowflake vous permet d’accéder aux données historiques, y compris aux données modifiées ou supprimées, au cours d’une période donnée. Cette fonction vous permet de :
Récupérer les objets de données (tables, schémas et bases de données) supprimés accidentellement ou intentionnellement
Créer des copies et des sauvegardes de données à partir de points précis dans le temps
Suivre et analyser la façon dont les données ont été utilisées ou modifiées au fil du temps
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0018¶
Description¶
L’option de colonne CHARACTER SET, qui définit les caractères autorisés à être stockés dans une colonne, n’est pas prise en charge dans Snowflake.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE TABLE01(
COLNAME VARCHAR(20) CHARACTER SET character_specification
);
Code généré :¶
CREATE TABLE TABLE01 (
COLNAME VARCHAR(20)
-- --** SSC-FDM-0018 - CHARACTER SET CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
-- CHARACTER SET character_specification
);
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0019¶
Description¶
Cet avertissement indique que SnowConvert n’a pas pu accéder aux informations sémantiques d’un objet spécifique. Cela se produit généralement lorsqu’il y a plusieurs objets avec des noms identiques dans votre code. Dans ce cas, SnowConvert ne peut pas analyser correctement les informations sémantiques de l’objet.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE T1
(
COL1 INTEGER
);
CREATE TABLE T1
(
COL2 INTEGER
);
Code généré :¶
CREATE OR REPLACE TABLE T1
(
COL1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR T1. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE TABLE T1
(
COL2 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Meilleures pratiques¶
Vérifiez que votre code d’entrée ne contient pas d’objets en double, car ceux-ci peuvent interférer avec le chargement correct des informations sémantiques.
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0020¶
Description¶
Une procédure Snowflake Scripting ne peut renvoyer qu’un seul jeu de résultats lors de son exécution.
Lorsqu’une procédure doit renvoyer plusieurs jeux de résultats (comportement similaire à celui de Teradata), les résultats sont stockés dans des tables temporaires. La procédure Snowflake Scripting renvoie un tableau contenant les noms de ces tables temporaires.
Exemple de code¶
Code d’entrée (Teradata) :¶
REPLACE MACRO sampleMacro AS
(
SELECT CURRENT_DATE AS DT;
SELECT CURRENT_DATE AS DT_TWO;
);
Code généré :¶
CREATE OR REPLACE PROCEDURE sampleMacro ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
return_arr ARRAY := array_construct();
tbl_nm VARCHAR;
BEGIN
tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
SELECT
CURRENT_DATE() AS DT;
return_arr := array_append(return_arr, :tbl_nm);
tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
SELECT
CURRENT_DATE() AS DT_TWO;
return_arr := array_append(return_arr, :tbl_nm);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
Meilleures pratiques¶
Exécutez une requête SELECT en utilisant les noms des tables temporaires renvoyés par la procédure pour voir les résultats.
Simplifiez les procédures en faisant en sorte qu’elles renvoient un seul jeu de résultats au lieu de plusieurs. Les résultats sont ainsi plus faciles à manipuler.
Pour obtenir de l’aide supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0021¶
Description¶
Snowflake n’utilise pas les index traditionnels des bases de données. Au lieu de cela, il crée et gère automatiquement des micro-partitions pour toutes les tables afin d’optimiser les performances des requêtes. Lorsque vous utilisez SnowConvert, tout le code relatif à la création d’index sera commenté car il n’est pas nécessaire dans Snowflake. Ces micro-partitions améliorent automatiquement la vitesse des opérations DML sans nécessiter aucune gestion manuelle.
Bien que cette configuration permette généralement d’obtenir de bonnes performances en matière de requêtes, vous pouvez l’optimiser davantage en mettant en œuvre des clés de clustering des données. Pour plus de détails sur les micro-partitions et le clustering de données, veuillez vous référer à Micro-partitions et clustering de données.
Exemple de code¶
Code d’entrée (Oracle) :¶
CREATE INDEX index1
ON table1(column1);
Code généré :¶
----** SSC-FDM-0021 - CREATE INDEX IS NOT SUPPORTED BY SNOWFLAKE **
----** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
--CREATE INDEX index1
--ON table1(column1)
;
Meilleures pratiques¶
Le clustering des données peut améliorer les performances des requêtes en organisant les données dans des tables de manière plus efficace.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0022¶
Gravité¶
Mauvaise
Description¶
Un avertissement apparaît lorsqu’une unité de cadre de fenêtre non prise en charge a été convertie en lignes, ce qui peut entraîner des différences dans la sortie. Par exemple, Snowflake ne prend en charge pas l’unité GROUPS, il faut donc la convertir en lignes.
Veuillez noter que ce message apparaît lorsqu’une unité de cadre de fenêtre n’est pas entièrement prise en charge ou doit être modifiée. Il s’agit notamment des cas où l’unité RANGE nécessite des modifications.
Exemple de code¶
Voici un échantillon de données que nous utiliserons pour expliquer le concept.
C_NAME |
C_BIRTH_DAY |
---|---|
USA |
1 |
USA |
4 |
Pologne |
9 |
Canada |
10 |
USA |
5 |
Canada |
12 |
Costa Rica |
3 |
Pologne |
4 |
USA |
2 |
Costa Rica |
7 |
Costa Rica |
10 |
Oracle :¶
SELECT
C_NAME,
SUM(C_BIRTH_DAY)
OVER (ORDER BY C_BIRTH_DAY
RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1
FROM WINDOW_TABLE;
C_NAME |
MAX1 |
---|---|
USA |
- |
USA |
1 |
Costa Rica |
3 |
USA |
6 |
Pologne |
6 |
USA |
14 |
Costa Rica |
19 |
Pologne |
26 |
Canada |
35 |
Costa Rica |
35 |
Canada |
55 |
Snowflake :¶
SELECT
C_NAME,
SUM(C_BIRTH_DAY)
OVER (ORDER BY C_BIRTH_DAY ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING /*** SSC-FDM-0022 - WINDOW FRAME UNIT 'RANGE' WAS CHANGED TO ROWS ***/) AS MAX1
FROM
WINDOW_TABLE;
C_NAME |
MAX1 |
---|---|
USA |
- |
USA |
1 |
Costa Rica |
3 |
USA |
6 |
Pologne |
10 |
USA |
14 |
Costa Rica |
19 |
Pologne |
26 |
Canada |
35 |
Costa Rica |
45 |
Canada |
55 |
Recommandations¶
Ajoutez une clause ORDER BY à vos requêtes pour garantir un ordre cohérent des lignes lorsqu’elles sont exécutées dans Snowflake.
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0023¶
Gravité¶
Intermédiaire
Description¶
SnowConvert convertit les tables temporaires globales en instructions standard de création de table. Veuillez noter que toute référence à ces tables transformées peut ne pas fonctionner comme prévu à l’origine.
Exemple de code¶
Entrée¶
create global temporary table t1
(col1 varchar);
create view view1 as
select col1 from t1;
Sortie¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE t1
(col1 varchar)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE VIEW view1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
select col1 from
--** SSC-FDM-0023 - A Global Temporary Table is being referenced **
t1;
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0024¶
Note
Cette fonction FDM
n’est plus prise en charge. Pour plus d’informations, veuillez consulter SSC-EWI-0058.
Description¶
Cette erreur se produit lorsque vous essayez d’utiliser une instruction non prise en charge dans une commande CREATE PROCEDURE dans Snowflake Scripting.
Exemple de code¶
Code d’entrée (Oracle) :¶
CREATE OR REPLACE PROCEDURE PROC01
IS
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
Code généré :¶
CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL'
-- --** SSC-FDM-0024 - FUNCTIONALITY FOR 'EXECUTE IMMEDIATE RETURNING CLAUSE' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING **
-- INTO number_variable
;
END;
$$;
Recommandations¶
Aucune action n’est requise de la part des utilisateurs.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0026¶
Note
Cette fonction FDM
n’est plus prise en charge. Pour plus d’informations, veuillez consulter SSC-EWI-0028.
Description¶
Cette erreur se produit lorsque vous tentez d’utiliser un type de données qui n’est pas compatible avec Snowflake.
Exemple¶
Code d’entrée (Oracle) :¶
CREATE TABLE MYTABLE
(
COL1 SYS.ANYDATASET
);
Code généré :¶
CREATE OR REPLACE TABLE MYTABLE
(
--** SSC-FDM-0026 - TYPE NOT SUPPORTED BY SNOWFLAKE **
COL1 SYS.ANYDATASET
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0027¶
Note
Pour une meilleure lisibilité, nous avons simplifié certaines sections du code de sortie.
Description¶
Ce message indique qu’une instruction du code source ne peut pas être convertie en Snowflake car il n’y a pas de fonctionnalité équivalente dans Snowflake. L’instruction n’est plus nécessaire et sera supprimée du code converti. Cependant, SC conserve l’instruction originale sous forme de commentaire pour référence.
Exemple de code¶
Code d’entrée :¶
.LOGTABLE tduser.Employee_log;
.BEGIN MLOAD TABLES Employee_Stg;
.LAYOUT Employee;
.FIELD in_EmployeeNo * VARCHAR(10);
.FIELD in_FirstName * VARCHAR(30);
.FIELD in_LastName * VARCHAR(30);
.FIELD in_BirthDate * VARCHAR(10);
.FIELD in_JoinedDate * VARCHAR(10);
.FIELD in_DepartmentNo * VARCHAR(02);
.dml label EmpLabel
IGNORE DUPLICATE INSERT ROWS;
INSERT INTO Employee_Stg (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
VALUES (
:in_EmployeeNo,
:in_FirstName,
:in_Lastname,
:in_BirthDate,
:in_JoinedDate,
:in_DepartmentNo
);
.IMPORT INFILE employee.txt
FORMAT VARTEXT ','
LAYOUT Employee
APPLY EmpLabel;
.END MLOAD;
LOGOFF;
Code généré :¶
#*** Generated code is based on the SnowConvert Python Helpers version 2.0.6 ***
// SnowConvert Helpers Code section is omitted.
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
con = None
def main():
snowconvert.helpers.configure_log()
con = snowconvert.helpers.log_on()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#.LOGTABLE tduser.Employee_log
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#.BEGIN MLOAD TABLES Employee_Stg
Employee_TableName = "Employee_TEMP_TABLE"
Employee_Columns = """in_EmployeeNo VARCHAR(10),
in_FirstName VARCHAR(30),
in_LastName VARCHAR(30),
in_BirthDate VARCHAR(10),
in_JoinedDate VARCHAR(10),
in_DepartmentNo VARCHAR(02)"""
Employee_Conditions = """in_EmployeeNo AS in_EmployeeNo, in_FirstName AS in_FirstName, in_LastName AS in_LastName, in_BirthDate AS in_BirthDate, in_JoinedDate AS in_JoinedDate, in_DepartmentNo AS in_DepartmentNo"""
def EmpLabel(tempTableName, queryConditions = ""):
exec(f"""INSERT INTO Employee_Stg (EmployeeNo, FirstName, LastName, BirthDate, JoinedDate, DepartmentNo)
SELECT
SRC.in_EmployeeNo,
SRC.in_FirstName,
:in_Lastname,
SRC.in_BirthDate,
SRC.in_JoinedDate,
SRC.in_DepartmentNo
FROM {tempTableName} SRC {queryConditions}""")
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
#.IMPORT INFILE employee.txt FORMAT VARTEXT ',' LAYOUT Employee APPLY EmpLabel
snowconvert.helpers.import_file_to_temptable(fr"employee.txt", Employee_TableName, Employee_Columns, Employee_Conditions, ',')
EmpLabel(Employee_TableName)
exec(f"""DROP TABLE {Employee_TableName}""")
if con is not None:
con.close()
con = None
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Recommandations¶
Pour obtenir une assistance supplémentaire, veuillez contacter notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0028¶
Note
Cette fonction FDM
n’est plus prise en charge. Pour plus d’informations, veuillez consulter SSC-EWI-0021.
Description¶
Cette erreur se produit lorsque votre code source contient un nœud ou une instruction qui n’est pas compatible avec les fonctionnalités de Snowflake.
Exemple de code¶
Code d’entrée :¶
WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
SELECT aValue from my_av;
Code de sortie :¶
----** SSC-FDM-0028 - SubavFactoring NOT SUPPORTED IN SNOWFLAKE **
--WITH my_av ANALYTIC VIEW AS
--(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
--SELECT aValue from my_av
;
Recommandations¶
Cette erreur se produit lorsqu’il n’existe pas de fonctionnalité Snowflake équivalente pour le code source en cours de conversion.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0029¶
Gravité¶
Minime
Description¶
Les fonctions définies par l’utilisateur de Snowflake ont des capacités différentes de celles d’Oracle ou de SQL Server. Lors de la migration de ces fonctions vers Snowflake, elles sont converties en procédures stockées afin de conserver la même fonctionnalité. Cette conversion modifiera la façon dont vous les utilisez dans vos requêtes.
Exemple de code¶
SQL Server :¶
CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
DECLARE @i int = 0, @p int;
Select @p = COUNT(*) FROM PURCHASING.VENDOR
WHILE (@p < 1000)
BEGIN
SET @i = @i + 1
SET @p = @p + @i
END
IF (@i = 6)
RETURN 1
RETURN @p
END;
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
I INT := 0;
P INT;
BEGIN
Select
COUNT(*)
INTO
:P
FROM
PURCHASING.VENDOR;
WHILE (:P < 1000) LOOP
I := :I + 1;
P := :P + :I;
END LOOP;
IF ((:I = 6)) THEN
RETURN 1;
END IF;
RETURN :P;
END;
$$;
Oracle :¶
CREATE FUNCTION employee_function (param1 in NUMBER) RETURN NUMBER is
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO var1, var2, var3
FROM employees
START WITH manager_ID = param1
CONNECT BY manager_ID = PRIOR employee_id;
RETURN var1;
EXCEPTION
WHEN no_data_found THEN RETURN param1;
END employee_function;
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE employee_function (param1 NUMBER(38, 18))
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "11/14/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO
:var1,
:var2,
:var3
FROM
employees
START WITH manager_ID = :param1
CONNECT BY
manager_ID = PRIOR employee_id;
RETURN :var1;
EXCEPTION
WHEN no_data_found THEN
RETURN :param1;
END;
$$;
Meilleures pratiques¶
Décomposez les requêtes complexes en requêtes individuelles plus petites tout en préservant la logique d’origine.
Restructurez le code source pour l’aligner sur l’approche des fonctions définies par l’utilisateur de Snowflake Vue d’ensemble des fonctions définies par l’utilisateur.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0030¶
Description¶
L’identificateur contient des caractères qui ne sont pas pris en charge dans la langue de sortie. Ces caractères ont été remplacés par les codes UTF-8 correspondants.
Exemple de code¶
Code d’entrée (Oracle) :¶
CREATE PROCEDURE PROC1
AS
"VAR0" INT;
"VAR`/1ͷ" VARCHAR(20);
"o*/o" FLOAT;
" . " INT;
". ." INT;
"123Name" INT;
"return" INT;
yield INT;
ident#10 INT;
BEGIN
NULL;
END;
Code de sortie :¶
CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
"VAR0" INT;
--** SSC-FDM-0030 - IDENTIFIER '"VAR`/1ͷ"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
VAR_u60_u2F1_uCD_B7 VARCHAR(20);
--** SSC-FDM-0030 - IDENTIFIER '"o*/o"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
o_u2A_u2Fo FLOAT;
--** SSC-FDM-0030 - IDENTIFIER '" . "' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
_u20_u2E_u20 INT;
--** SSC-FDM-0030 - IDENTIFIER '". ."' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
_u2E_u20_u2E INT;
"123Name" INT;
"return" INT;
yield INT;
IDENT_HASHTAG_10 INT;
BEGIN
NULL;
END;
$$;
Recommandations¶
Aucune action n’est requise de la part des utilisateurs.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0031¶
Description¶
Snowflake convertit les vues matérialisées (et les index de jointure de Teradata) en tables dynamiques. Lors de la création de tables dynamiques dans Snowflake, vous devez spécifier deux paramètres obligatoires :
TARGET_LAG : définit le temps de latence maximal autorisé
WAREHOUSE : spécifie l’entrepôt virtuel à utiliser
Si vous ne spécifiez pas ces paramètres dans les options de configuration, le système appliquera automatiquement des valeurs par défaut au cours du processus de conversion.
Pour en savoir plus sur les paramètres requis pour les tables dynamiques, cliquez ici
Exemple de code¶
Code d’entrée (Oracle) :¶
CREATE MATERIALIZED VIEW mv1
AS SELECT * FROM table1;
Code de sortie :¶
CREATE OR REPLACE DYNAMIC TABLE mv1
--** 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":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT * FROM
table1;
Recommandations¶
L’ensemble des paramètres de la table dynamique est adapté à vos exigences spécifiques.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0032¶
Description¶
Lors de l’exécution de transformations multiples, SnowConvert doit vérifier les valeurs des paramètres. Ce processus de vérification ne peut être mené à bien que si les paramètres contiennent des valeurs réelles (littérales) plutôt que des variables ou des expressions.
Cet avertissement apparaît lorsque SnowConvert ne peut pas déterminer la valeur d’un paramètre parce qu’il a été transmis par référence. Par conséquent, la fonction ou l’instruction ne peut pas être entièrement transformée.
Exemple de code¶
Code d’entrée (Redshift) :¶
SELECT TO_CHAR(DATE '2001-01-01', 'YYY/MM/DD'),
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
Code de sortie :¶
SELECT
PUBLIC.YEAR_PART_UDF(DATE '2001-01-01', 3) || TO_CHAR(DATE '2001-01-01', '/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
Recommandations¶
Dans la mesure du possible, utilisez une valeur littérale pour le paramètre spécifié.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-0033¶
Description¶
Ce message explique les différences de comportement de l’échantillonnage des lignes entre Teradata et Snowflake. Alors que Teradata renvoie un nombre constant de lignes dans son échantillon non déterministe, Snowflake peut renvoyer un peu plus ou un peu moins de lignes. Cette variation du nombre de lignes est normale et attendue dans Snowflake en raison de son approche d’échantillonnage basée sur les probabilités.
Pour garantir des résultats cohérents et reproductibles lorsque vous récupérez des données de Snowflake, il est recommandé d’utiliser une valeur de départ dans votre requête. Vous obtiendrez ainsi une sortie déterministe, c’est-à-dire que vous obtiendrez les mêmes valeurs et le même nombre de résultats à chaque fois que vous exécuterez la requête.
Exemple de code¶
Code d’entrée (Teradata) :¶
SELECT * FROM Employee SAMPLE 2;
SELECT * FROM Employee SAMPLE 0.25;
Code de sortie :¶
SELECT
* FROM
Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(2 ROWS);
SELECT
* FROM
Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(25);
Recommandations¶
Pour obtenir des résultats déterministes, incluez la partie « départ » de votre requête.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com