SnowConvert AI - Problèmes Teradata¶
SSC-EWI-TD0001¶
Erreur d’alias de transfert récursif.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Faible
Description¶
Cet EWI s’affiche chaque fois que SnowConvert AI détecte une récursivité dans les expressions aliasées, ce qui l’empêche d’exécuter la transformation des alias de transfert nécessaire au bon fonctionnement des alias dans l’environnement Snowflake.
Un alias récursif se produit lorsqu’une expression aliasée contient un autre alias et que la deuxième expression aliasée contient le premier alias. Cela peut ne pas être aussi simple que le montre l’exemple, car la récursivité peut se produire plus loin dans la ligne, de manière transitive.
Exemple de code¶
Remarque : les alias récursifs ne sont pas pris en charge dans Snowflake. Cependant, certaines instances simples le sont.
Note
Notez que l’alias récursif n’est pas pris en charge dans Snowflake. Cependant, certaines instances simples le sont. Consultez les exemples ci-dessous.
L’exemple de code suivant fonctionne dans Snowflake après la migration :
Teradata :¶
SELECT
COL1 AS COL2,
COL2 AS COL1
FROM
TABLE_EXAMPLE;
Snowflake Scripting:¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
COL1 AS COL2,
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0001 - 'COL1' HAS RECURSIVE REFERENCES. FORWARD ALIAS CONVERSION COULD NOT BE COMPLETED ***/!!!
COL2 AS COL1
FROM
TABLE_EXAMPLE;
En revanche, l’exemple de code suivant ne fonctionne pas :
Teradata :¶
SELECT
A + B as C,
COL2 + C AS A,
COL3 AS B
FROM
TABLE_EXAMPLE;
Snowflake Scripting:¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0001 - 'A' HAS RECURSIVE REFERENCES. FORWARD ALIAS CONVERSION COULD NOT BE COMPLETED ***/!!!
COL2 + C AS A,
COL3 AS B,
A + B as C
FROM
TABLE_EXAMPLE;
Meilleures pratiques¶
Examinez votre code et assurez-vous que des alias de transfert récursifs ne sont pas présents. L’EWI indique le nom de la première instance d’un alias qui comprend des références récursives, mais cela ne signifie pas qu’il s’agit de la seule instance de votre code qui en contient.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0002¶
Type Interval non pris en charge.
Cet EWI est obsolète depuis la version 28.1.100 de SnowConvert AI.
Severity
Élevé
Description
Lorsque le sélecteur d’une colonne dans une instruction SQL sera de type INTERVAL, l’EWI sera ajouté et une fonction Stub sera également créée. Il s’agit d’un type qui n’est pas pris en charge dans SnowFlake et qui implique donc un traitement en attente après l’arrêt de SnowConvert AI.
Example Code
Teradata:
SELECT
CAST('07:00' AS INTERVAL HOUR(2) TO MINUTE),
CAST('08:00' AS INTERVAL HOUR(2) TO MINUTE) As Test_Interval;
Snowflake Scripting:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0002 - INTERVAL TYPE NOT SUPPORTED IN SNOWFLAKE ***/!!!
INTERVAL '07 hour, 00 min',
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0002 - INTERVAL TYPE NOT SUPPORTED IN SNOWFLAKE ***/!!!
INTERVAL '08 hour, 00 min' As Test_Interval;
Best Practices
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0003
Le classement n’est pas pris en charge dans les fonctions de rognage. Ajoutez le classement d’origine au résultat de la fonction pour le conserver.
Severity
Faible
Description
Dans Snowflake, les fonctions de rognage (LTRIM, RTRIM ou TRIM) ne prennent pas en charge le classement, sauf si les caractères à rogner sont des caractères d’espacement vides ou blancs.
Si SnowConvert AI détecte une fonction LTRIM, RTRIM ou TRIM LEADING, TRAILING, ou les deux fonctions avec le scénario mentionné ci-dessus, la fonction COLLATE sera générée automatiquement pour créer une copie sans classement de la colonne d’entrée. Cet EWI est généré pour indiquer que le classement de la colonne a été supprimé avant la fonction de rognage, ce qui signifie que le résultat de la fonction n’aura pas de classement et que cela peut modifier les résultats des comparaisons ultérieures utilisant le résultat.
Example Code
Teradata:
CREATE TABLE collateTable (
col1 VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC
);
SELECT
TRIM(BOTH '0' FROM col1),
TRIM(LEADING ' ' FROM col1),
TRIM(TRAILING '0' FROM col1),
LTRIM(col1, '0'),
RTRIM(col1)
FROM
collateTable;
Snowflake Scripting:
CREATE OR REPLACE TABLE collateTable (
col1 VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
SELECT
TRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
LTRIM(col1, ' '),
RTRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
LTRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
RTRIM(col1)
FROM
collateTable;
Best Practices
Pour éviter des différences fonctionnelles lors des comparaisons, veuillez ajouter le classement d’origine de la colonne à la chaîne de résultat de la fonction
TRIM. Pour ce faire, utilisez la fonctionCOLLATEet spécifiez le classement d’origine de la colonne comme deuxième argument. Cet argument doit être une chaîne littérale avec la valeur de classement.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0004
Exception SQL non prise en charge sur le Continue Handler.
Severity
Faible
Description
Dans les procédures Snowflake, il n’existe pas de transformation équivalente pour le Continue Handler de Teradata. Pour certains codes d’exception pris en charge, SnowConvert AI effectue un traitement pour émuler ce comportement. Cet EWI est ajouté aux instructions du Continue Handler ayant un code d’exception qui n’est pas pris en charge.
Example Code
Teradata:
REPLACE PROCEDURE PURGING_ADD_TABLE
(
IN inDatabaseName VARCHAR(30),
IN inTableName VARCHAR(30)
)
BEGIN
DECLARE vCHAR_SQLSTATE CHAR(5);
DECLARE vSUCCESS CHAR(5);
DECLARE CONTINUE HANDLER FOR SQLSTATE 'UNSUPPORTED'
BEGIN
SET vCHAR_SQLSTATE = SQLCODE;
SET vSUCCESS = SQLCODE;
END;
SELECT 1;
END;
Snowflake Scripting:
CREATE OR REPLACE PROCEDURE PURGING_ADD_TABLE
(INDATABASENAME VARCHAR(30), INTABLENAME VARCHAR(30)
)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/04/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
vCHAR_SQLSTATE CHAR(5);
vSUCCESS CHAR(5);
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0004 - NOT SUPPORTED SQL EXCEPTION ON CONTINUE HANDLER ***/!!!
DECLARE CONTINUE HANDLER FOR SQLSTATE 'UNSUPPORTED'
BEGIN
vCHAR_SQLSTATE := SQLCODE;
vSUCCESS := SQLCODE;
END;
SELECT
1;
END;
$$;
Best Practices
Vérifiez les instructions possibles qui peuvent lever le code d’exception et encapsulez-les dans un bloc de code similaire à celui vu dans la Référence de la traduction du Continue Handler.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0005
L’instruction a été convertie, mais sa fonctionnalité n’est pas encore mise en œuvre.
Severity
Critique
Description
L’instruction a été reconnue et convertie, mais le code converti n’aura pas la fonctionnalité attendue, car la mise en œuvre n’est pas encore terminée.
L’avertissement est ajouté pour informer l’utilisateur que lorsque le script utilisera cette instruction, celui-ci n’aura pas l’équivalent fonctionnel attendu.
Exemple de source
Code d’entrée BTEQ :
.SET SIDETITLES ON
Code de sortie Python :
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
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-EWI-TD0005 - THE STATEMENT WAS CONVERTED BUT ITS FUNCTIONALITY IS NOT IMPLEMENTED YET **
Export.side_titles(True)
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Best Practices
Pour plus d’informations, veuillez vous référer à la spécification de traduction de BTEQ en Python.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0006
Valeur par défaut non valide.
Severity
Faible
Description
Les spécifications de colonnes DEFAULT TIME / DEFAULT DATE / DEFAULT CURREN_DATE / DEFAULT DEFAULT CURRENT_TIME / DEFAULT CURRENT_TIMESTAMP ne sont pas prises en charge pour le type de données FLOAT.
Example Code
Teradata:
CREATE TABLE T_2004
(
-- In the output code all of these columns will be FLOAT type
-- and will include the SSC-EWI-TD0006 message.
COL1 FLOAT DEFAULT TIME,
COL2 FLOAT DEFAULT DATE,
COL3 FLOAT DEFAULT CURRENT_DATE,
COL4 FLOAT DEFAULT CURRENT_TIME,
COL5 FLOAT DEFAULT CURRENT_TIMESTAMP
);
Snowflake Scripting:
CREATE OR REPLACE TABLE T_2004
(
-- In the output code all of these columns will be FLOAT type
-- and will include the SSC-EWI-TD0006 message.
COL1 FLOAT DEFAULT TIME !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIME NOT VALID FOR DATA TYPE ***/!!!,
COL2 FLOAT DEFAULT DATE !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_DATE NOT VALID FOR DATA TYPE ***/!!!,
COL3 FLOAT DEFAULT CURRENT_DATE !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_DATE NOT VALID FOR DATA TYPE ***/!!!,
COL4 FLOAT DEFAULT CURRENT_TIME !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIME NOT VALID FOR DATA TYPE ***/!!!,
COL5 FLOAT DEFAULT CURRENT_TIMESTAMP !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIMESTAMP NOT VALID FOR DATA TYPE ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
Aucune autre action de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0007
La clause GROUP BY n’est pas prise en charge dans le mode Teradata pour la comparaison de chaînes.
Severity
Faible
Description
Ce message d’erreur indique un problème possible lors de la migration des requêtes SQL Teradata vers Snowflake, en particulier en raison de différences dans la façon dont la clause GROUP BY gère la sensibilité des comparaisons de chaînes en mode Teradata.
En mode Teradata, les comparaisons de chaînes dans les clauses GROUP BY sont insensibles à la casse par défaut (NOT CASESPECIFIC), tandis que Snowflake est sensible à la casse, à moins que les colonnes ne soient explicitement définies avec une clause COLLATE insensible à la casse. Cette différence peut entraîner des requêtes qui s’appuient sur un groupement insensible à la casse dans Teradata pour produire des résultats différents dans Snowflake.
Example Code
Teradata:
CREATE TABLE employees (
employee_id INTEGER,
first_name VARCHAR(50) NOT CASESPECIFIC,
department VARCHAR(50)
);
INSERT INTO employees VALUES (1, 'John', 'Sales');
INSERT INTO employees VALUES (2, 'JOHN', 'sales');
INSERT INTO employees VALUES (3, 'john', 'SALES');
SELECT first_name, COUNT(*)
FROM employees
GROUP BY first_name;
Snowflake Scripting:
CREATE OR REPLACE TABLE employees (
employee_id INTEGER,
first_name VARCHAR(50),
department VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "10/20/2025", "domain": "no-domain-provided", "migrationid": "kwOaAavBVnCx8OhdxEITfg==" }}'
;
INSERT INTO employees
VALUES (1, 'John', 'Sales');
INSERT INTO employees
VALUES (2, 'JOHN', 'sales');
INSERT INTO employees
VALUES (3, 'john', 'SALES');
SELECT
first_name,
COUNT(*)
FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY first_name;
Différences de comportement attendues
Plateforme |
Comportement de regroupement |
Exemple de lignes de résultats |
|---|---|---|
Mode Teradata |
Groupe “John”, “JOHN” et “john” ensemble |
|
Snowflake |
Traite “John”, “JOHN” et “john” séparément |
|
Best Practices
Examinez les clauses GROUP BY impliquant des colonnes de chaînes lors de la migration depuis le mode Teradata afin de garantir le comportement de regroupement attendu.
Remarque : lorsque vous utilisez des expressions comme RTRIM(UPPER(first_name)) ou RTRIM(first_name) dans la clause GROUP BY pour obtenir un regroupement insensible à la casse ou tronqué, vous devez appliquer la même expression de manière cohérente dans toutes les parties de la requête où la colonne est référencée. Par exemple :
SELECT RTRIM(UPPER(first_name))
FROM employees
WHERE RTRIM(UPPER(first_name)) = 'JOHN'
GROUP BY RTRIM(UPPER(first_name));
Ainsi, le filtrage, la sélection et le regroupement utilisent tous la même logique, ce qui évite des discordances ou des résultats inattendus.
Définissez des colonnes avec COLLATE lors de la création de la table si un comportement cohérent insensible à la casse est requis :
CREATE TABLE employees ( first_name VARCHAR(50) COLLATE 'en-cs' );
Activez l’indicateur CLI –UseCollateForCaseSpecification ou le paramètre de conversion pour utiliser COLLATE pour la spécification de la casse pendant la conversion. Cette option garantit que la spécification de la casse (comme CASESPECIFIC ou NOT CASESPECIFIC) est géré à l’aide des fonctions COLLATE au lieu des fonctions UPPER. Pour plus de détails, référez-vous à la documentation CLI ou aux paramètres de conversion.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0008
La fonction de comparaison de chaînes n’est pas prise en charge.
Severity
Faible
Description
Actuellement, il n’existe pas d’équivalence pour certaines fonctions de comparaison de chaînes dans Snowflake.
Cet EWI est ajouté chaque fois que le type de comparaison est jaro, n_gram, LD, LDWS, OSA, DL, hamming, LCS, jaccard, cosine and soundexcode.
Example Code
Teradata:
SELECT * FROM StringSimilarity (
ON (
SELECT CAST(a AS VARCHAR(200)) AS a, CAST(b AS VARCHAR(200)) AS b
FROM table_1
) PARTITION BY ANY
USING
ComparisonColumnPairs ('ld(a,b) AS sim_fn')
) AS dt ORDER BY 1;
Snowflake Scripting:
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0008 - FUNCTION FOR COMPARING STRINGS IS NOT SUPPORTED ***/!!! StringSimilarity (
ON (
SELECT CAST(a AS VARCHAR(200)) AS a, CAST(b AS VARCHAR(200)) AS b
FROM table_1
) PARTITION BY ANY
USING
ComparisonColumnPairs ('ld(a,b) AS sim_fn')
) AS dt ORDER BY 1;
Best Practices
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0009
Colonne TEMPORAL non prise en charge.
Severity
Faible
Description
Teradata fournit une prise en charge des tables temporelles au niveau des colonnes à l’aide de colonnes de périodes dérivées. Ces colonnes ne sont pas prises en charge dans Snowflake.
Example Code
Teradata:
CREATE MULTISET TABLE Policy(
Policy_ID INTEGER,
Customer_ID INTEGER,
Policy_Type CHAR(2) NOT NULL,
Policy_Details CHAR(40),
Policy_Start DATE NOT NULL,
Policy_End DATE NOT NULL,
PERIOD FOR Validity(Policy_Start,Policy_End) AS VALIDTIME
)
PRIMARY INDEX(Policy_ID);
Snowflake Scripting:
CREATE OR REPLACE TABLE Policy (
Policy_ID INTEGER,
Customer_ID INTEGER,
Policy_Type CHAR(2) NOT NULL,
Policy_Details CHAR(40),
Policy_Start DATE NOT NULL,
Policy_End DATE NOT NULL,
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0009 - TEMPORAL COLUMN NOT SUPPORTED ***/!!!
PERIOD FOR Validity(Policy_Start,Policy_End) AS VALIDTIME
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0010
UPPERCASE non pris en charge par Snowflake.
Severity
Faible
Description
L’attribut de colonne UPPERCASE n’est pas pris en charge dans Snowflake.
Example Code
Teradata:
CREATE TABLE T_2010
(
col1 VARCHAR(1) UPPERCASE
);
Snowflake Scripting:
CREATE OR REPLACE TABLE T_2010 (
col1 VARCHAR(1)
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0010 - UPPERCASE NOT SUPPORTED BY SNOWFLAKE ***/!!!
UPPERCASE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
Étant donné que la clause
UPPERCASEindique que les caractères typés “aaa” sont stockés sous la forme “AAA”, une solution de contournement possible peut consister à ajouter la fonction [UPPER] à toutes les références d’insertion(https://docs.snowflake.com/fr/sql-reference/functions/upper). Cependant, le chargement de données externes par des processus ETL devraient également être modifiés.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0012
Les binaires ne prennent pas en charge les valeurs par défaut.
Severity
Faible
Description
Cet EWI s’affiche lorsque SnowConvert AI trouve un type de données BINARY avec une spécification de valeurs par DEFAULT. Étant donné que les valeurs par défaut ne sont pas autorisées dans les colonnes BINARY, il est supprimé.
Example Code
Teradata:
CREATE TABLE TableExample
(
ColumnExample BINARY DEFAULT '00000000'XB NOT NULL
)
Snowflake Scripting:
CREATE OR REPLACE TABLE TableExample (
ColumnExample BINARY DEFAULT NOT TO_BINARY('00000000') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0012 - BINARY DOES NOT SUPPORT DEFAULT NOT TO_BINARY('00000000') ***/!!! NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0017
La fonctionnalité de traçage des tables temporaires globale n’est pas prise en charge.
Severity
Faible
Description
Cet EWI s’affiche lorsque SnowConvert AI trouve Create Table avec l’option GLOBAL TEMPORARY TRACE. Examinez la documentation Teradata suivante relative à la fonctionnalité TRACE. Étant donné qu’elle n’est pas prise en charge dans Snowflake, elle est supprimée.
Example Code
Teradata:
CREATE GLOBAL TEMPORARY TRACE TABLE TableExample
(
ColumnExample Number
)
Snowflake Scripting:
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0017 - GLOBAL TEMPORARY TABLE TRACE FUNCTIONALITY NOT SUPPORTED ***/!!!
CREATE OR REPLACE TABLE TableExample (
ColumnExample NUMBER(38, 18)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
Remarque : Il peut être possible de répliquer certaines fonctionnalités de traçage dans Snowflake à l’aide d’
EVENT TABLE. Examinez la documentation suivante de Snowflake relative à la journalisation et au traçage.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0020
La fonction Regexp_Substr prend uniquement en charge les expressions régulières POSIX.
Note
Cet EWI est obsolète. Veuillez vous référer à la documentation SSC-EWI-0009.
Gravité¶
Faible
Description¶
Actuellement, Snowflake ne prend pas en charge l’expression régulière étendue au-delà de la syntaxe d’expressions régulières de base POSIX.
Cet EWI est ajouté chaque fois qu’un appel de fonction à REGEX_SUBSTR, REGEX_REPLACE, ou REGEX_INSTR est transformé dans SnowFlake pour avertir l’utilisateur des éventuelles expressions régulières non prises en charge. Certaines des fonctionnalités non prises en charge sont les groupes lookahead, lookbehind et non-capturing.
Exemple de code¶
Teradata :¶
SELECT REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Snowflake Scripting:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0009 - REGEXP_SUBSTR FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Meilleures pratiques¶
Vérifiez l’expression régulière utilisée dans chaque cas pour déterminer si une intervention manuelle est nécessaire. Vous trouverez plus d’informations sur la prise en charge étendue des expressions regex et sur les alternatives dans SnowFlake ici.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0023¶
ACTIVITY_COUNT à l’intérieur de SELECT/SET INTO VARIABLE nécessite une correction manuelle.
Gravité¶
Faible
Description¶
La variable d’état ACTIVITY_COUNT retourne le nombre de lignes affectées par une instruction SQL DML dans une application SQL ou de procédure stockée intégrée. Pour plus d’informations, rendez-vous ici.
Comme expliqué dans sa spécification de traduction, il existe une solution de contournement pour émuler le comportement de ACTIVITY_COUNT via :
SELECT $1 FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
Lorsque vous utilisez ACTIVITY_COUNT dans une instruction SELECT/SET INTO VARIABLE, elle ne peut pas être simplement remplacée par la solution de contournement mentionnée ci-dessus.
Exemple de code¶
Teradata¶
REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
BEGIN
DECLARE rowCount INT;
DECLARE message VARCHAR(100);
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
VALUES (101, 'Alice', 'Smith', 10, 70000.00);
SELECT ACTIVITY_COUNT INTO rowCount;
SET message = 'ROWS INSERTED: ' || rowCount;
-- Insert the ACTIVITY_COUNT into the activity_log table
INSERT INTO activity_log (operation, row_count)
VALUES (message, rowCount);
END;
Snowflake¶
CREATE OR REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/15/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
rowCount INT;
message VARCHAR(100);
BEGIN
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
VALUES (101, 'Alice', 'Smith', 10, 70000.00);
SELECT
ACTIVITY_COUNT !!!RESOLVE EWI!!! /*** SSC-EWI-TD0023 - ACTIVITY_COUNT INSIDE SELECT/SET INTO VARIABLE REQUIRES MANUAL FIX ***/!!! INTO
:rowCount;
message := 'ROWS INSERTED: ' || rowCount;
-- Insert the ACTIVITY_COUNT into the activity_log table
INSERT INTO activity_log (operation, row_count)
VALUES (:message, :rowCount);
END;
$$;
Correction manuelle¶
Une partie de la solution de contournement présentée ci-dessus peut être utilisée pour obtenir le nombre de lignes insérées/mises à jour/supprimées, comme suit :
CREATE OR REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/15/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
rowCount INT;
message VARCHAR(100);
BEGIN
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
VALUES (101, 'Alice', 'Smith', 10, 70000.00);
SELECT $1 INTO :rowCount FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
message := 'ROWS INSERTED: ' || rowCount;
-- Insert the ACTIVITY_COUNT into the activity_log table
INSERT INTO activity_log (operation, row_count)
VALUES (:message, :rowCount);
END;
$$;
Au lieu d’utiliser la requête complète, il convient de l’adapter manuellement à la syntaxe [SELECT INTO VARIABLE] de Snowflake(https://docs.snowflake.com/fr/sql-reference/constructs/into).
Par ailleurs, si RESULT_SCAN(LAST_QUERY_ID()) donne des résultats incorrects, vérifiez SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033) pour savoir comment gérer les limitations possibles de l’utilisation de LAST_QUERY_ID.
Meilleures pratiques¶
Adaptez manuellement la solution de contournement proposée.
Vérifiez SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033) pour savoir comment gérer les limitations possibles de l’utilisation de
LAST_QUERY_ID.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0024¶
L’instruction annulée n’est pas prise en charge en raison d’une fonction d’agrégation.
Gravité¶
Faible
Description¶
Cet EWI apparaît lorsqu’une fonction AGGREGATE fait partie d’une instruction ABORT à l’intérieur d’une procédure stockée. L’instruction est commentée.
Exemple de code¶
Teradata :¶
REPLACE PROCEDURE ABORT_SAMPLE()
BEGIN
ABORT WHERE SUM(TABLE1.COL1) < 2;
END;
Snowflake Scripting:¶
CREATE OR REPLACE PROCEDURE ABORT_SAMPLE()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0024 - ABORT STATEMENT IS NOT SUPPORTED DUE TO AN AGGREGATE FUNCTION ***/!!!
ABORT WHERE SUM(TABLE1.COL1) < 2;
END;
$$;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0025¶
Format de sortie non pris en charge.
Gravité¶
Faible
Description¶
Cet EWI apparaît lorsqu’une fonction CAST spécifie un format de sortie non pris en charge par l’Exécution de scripts Snowflake.
Exemple de code¶
Teradata :¶
CREATE TABLE SAMPLE_TABLE
(
VARCHAR_TYPE VARCHAR
);
REPLACE VIEW SAMPLE_VIEW
AS
SELECT
CAST(VARCHAR_TYPE AS FLOAT FORMAT 'ZZZ.ZZZZZ'),
CAST('01:02.030405' AS TIME(1) WITH TIME ZONE FORMAT 'MI:SS.S(6)')
FROM SAMPLE_TABLE;
Snowflake Scripting:¶
CREATE OR REPLACE TABLE SAMPLE_TABLE
(
VARCHAR_TYPE VARCHAR
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "03/03/2025", "domain": "test" }}'
;
CREATE OR REPLACE VIEW SAMPLE_VIEW
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "03/03/2025", "domain": "test" }}'
AS
SELECT
TO_NUMBER(VARCHAR_TYPE, '999.00000', 38, 10) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'ZZZ.ZZZZZ' NOT SUPPORTED. ***/!!!,
TO_TIME('01:02.030405', 'MI:SS.FF6') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'MI:SS.S(6)' NOT SUPPORTED. ***/!!!
FROM
SAMPLE_TABLE;
Meilleures pratiques¶
Vérifiez si le code de sortie présente une équivalence fonctionnelle avec le code d’origine.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0027¶
Snowflake ne prend pas en charge les options de colonnes de dimensions temporelles intégrées de Teradata.
Gravité¶
Faible
Description¶
L’EWI est généré, car Snowflake ne prend pas en charge les attributs de dimensions temporelles intégrés de Teradata comme VALIDTIME ou TRANSACTIONTIME.
Exemple de code¶
Entrée Teradata :¶
CREATE MULTISET TABLE SAMPLE_TABLE
(
COL1 PERIOD(TIMESTAMP(6) WITH TIME ZONE) NOT NULL AS TRANSACTIONTIME
);
Sortie Snowflake :¶
CREATE OR REPLACE TABLE SAMPLE_TABLE (
COL1 VARCHAR(68) NOT NULL !!!RESOLVE EWI!!! /*** SSC-EWI-TD0027 - SNOWFLAKE DOES NOT SUPPORT 'TRANSACTIONTIME' COLUMN OPTION ***/!!! /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Meilleures pratiques¶
Créez manuellement les colonnes TIMESTAMP avec des valeurs par défaut telles que CURRENT_TIMESTAMP.
En tirant parti de l’utilisation des flux de tables, elles peuvent enregistrer les modifications de manipulation de données apportées aux tables, ainsi que les métadonnées relatives à chaque modification. (Guide)
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0029¶
La fonctionnalité Queue table n’est pas prise en charge.
Gravité¶
Faible
Description¶
Cet avertissement apparaît lorsqu’une TABLE avec l’attribut QUEUE est migrée. Le mot-clé QUEUE est supprimé, car il n’est pas pris en charge dans Snowflake.
Exemple de code¶
Entrée :¶
CREATE MULTISET TABLE SAMPLE_TABLE,
QUEUE,
NO FALLBACK
(
COL1 INTEGER
);
Sortie :¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0029 - QUEUE TABLE FUNCTIONALITY NOT SUPPORTED ***/!!!
CREATE OR REPLACE TABLE SAMPLE_TABLE
(
COL1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0031¶
Le résultat peut différer, car le type Char possède une longueur fixe dans Teradata.
Gravité¶
Faible
Description¶
Étant donné que le type de données CHAR de Teradata possède une longueur fixe, certaines fonctions telles que LIKE tenteront de faire correspondre la colonne complète à la place du mot inséré dans la colonne, ce qui entraînera des correspondances fausses. Cependant, le type CHAR de Snowflake est de taille variable, ce qui signifie que les fonctions LIKE essaieront toujours de faire correspondre les valeurs insérées. Prenons l’exemple du code suivant :
Exemple de code¶
Entrée :¶
CREATE TABLE table1
(
col1 VARCHAR(36),
col2 CHAR(36)
);
INSERT INTO table1 VALUES ('Gabriel', 'Gabriel');
INSERT INTO table1 VALUES ('Barnum', 'Barnum');
INSERT INTO table1 VALUES ('Sergio', 'Sergio');
SELECT col1 FROM table1 where col1 LIKE 'Barnum';
-- The result is a single row with 'Barnum'
SELECT col2 FROM table1 where col2 LIKE 'Barnum';
-- It does not return any row
Sortie :¶
CREATE OR REPLACE TABLE table1
(
col1 VARCHAR(36),
col2 CHAR(36)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
INSERT INTO table1
VALUES ('Gabriel', 'Gabriel');
INSERT INTO table1
VALUES ('Barnum', 'Barnum');
INSERT INTO table1
VALUES ('Sergio', 'Sergio');
SELECT
col1 FROM
table1
where col1 ILIKE 'Barnum';
-- The result is a single row with 'Barnum'
SELECT
col2 FROM
table1
where
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0031 - THE RESULT OF LIKE MAY DIFFER DUE TO CHAR TYPE HAVING A FIXED LENGTH IN TERADATA ***/!!! col2 ILIKE 'Barnum';
-- It does not return any row
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0034¶
Le SQL multi-instructions n’est pas pris en charge.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Faible
Description¶
L’exécution du SQL multi-instructions n’est pas prise en charge. La demande a été traitée comme une transaction.
Note
L’EWI suivant n’est généré que lorsque l’indicateur de langage cible PL est défini sur Javascript, comme ceci : “–PLTargetLanguage Javascript”
Exemple de code¶
Entrée :¶
-- Additional Params: --PLTargetLanguage Javascript
REPLACE PROCEDURE proc1()
BEGIN
BEGIN REQUEST;
SELECT* FROM TABLE1;
END REQUEST;
END;
Sortie :¶
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert AI Helpers Code section is omitted.
var TRANSACTION_HANDLER = function (error) {
throw error;
};
// ** SSC-EWI-TD0034 - MULTISTATEMENT SQL EXECUTION NOT SUPPORTED, REQUEST HANDLED AS TRANSACTION **
try {
EXEC(`BEGIN`);
EXEC(`SELECT
*
FROM
TABLE1`,[],undefined,TRANSACTION_HANDLER);
EXEC(`COMMIT`);
} catch(error) {
EXEC(`ROLLBACK`);
}
$$;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0039¶
Format d’entrée non pris en charge.
Gravité¶
Medium
Description¶
Le format d’entrée spécifié n’est pas pris en charge dans Snowflake.
Exemple de code¶
Entrée :¶
SELECT
CAST('02/032/25' AS DATE FORMAT 'MM/DDD/YY'),
CAST('02/032/25' AS DATE FORMAT 'MM/D3/YY'),
CAST('03-Thursday-2025' AS DATE FORMAT 'DD-EEEE-YYYY'),
CAST('03-Thursday-2025' AS DATE FORMAT 'DD-E4-YYYY');
Sortie :¶
SELECT
TO_DATE('02/032/25', 'MM/DDD/YY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'MM/DDD/YY' NOT SUPPORTED ***/!!!,
TO_DATE('02/032/25', 'MM/D3/YY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'MM/D3/YY' NOT SUPPORTED ***/!!!,
TO_DATE('03-Thursday-2025', 'DD-EEEE-YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'DD-EEEE-YYYY' NOT SUPPORTED ***/!!!,
TO_DATE('03-Thursday-2025', 'DD-E4-YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'DD-E4-YYYY' NOT SUPPORTED ***/!!!;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0040¶
Le format dans une table n’est pas pris en charge.
Gravité¶
Faible
Description¶
Le format spécifié n’est pas pris en charge.
Exemple de code¶
Entrée :¶
CREATE TABLE T_2040
(
C1 VARCHAR(255) CHARACTER SET LATIN NOT CASESPECIFIC FORMAT 'X(50)',
C2 VARCHAR(255) CHARACTER SET LATIN NOT CASESPECIFIC FORMAT 'X(75)'
);
Sortie :¶
CREATE OR REPLACE TABLE T_2040
(
C1 VARCHAR(255) FORMAT 'X(50)' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0040 - FORMAT IN TABLE T_2040 NOT SUPPORTED ***/!!!,
C2 VARCHAR(255) FORMAT 'X(75)' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0040 - FORMAT IN TABLE T_2040 NOT SUPPORTED ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
SSC-EWI-TD0041¶
La fonction Trunc a été ajoutée pour garantir l’entier.
Gravité¶
Faible
Description¶
Lors de la migration de Teradata vers Snowflake, vous pouvez rencontrer des différences dans la façon dont les conversions numériques sont gérées. Dans Teradata, convertir une valeur en INTEGER tronquera implicitement toute partie décimale, même si la valeur d’origine est un nombre à virgule flottante ou une représentation sous forme de chaîne d’un nombre. Cependant, dans Snowflake, la conversion d’un numérique non entier ou d’une chaîne directement en INTEGER peut entraîner des erreurs ou des résultats inattendus si la valeur n’est pas déjà un entier.
Pour assurer la compatibilité, la fonction TRUNC() est appliquée avant le conversion en INTEGER. Cela supprime toute partie décimale, ce qui permet une conversion sûre en entier. Toutefois, si la valeur source n’est pas numérique ou est une chaîne non numérique, des erreurs peuvent persister et une intervention manuelle peut être nécessaire. Par exemple, si SnowConvert AI ne peut pas déterminer le type de colonne en raison de références manquantes, vous devrez peut-être ajuster manuellement la conversion.
Exemple de code¶
Entrée :¶
SELECT
cast(date_column as integer);
Sortie :¶
SELECT
cast(TRUNC(date_column) as integer) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0041 - TRUNC FUNCTION WAS ADDED TO ENSURE INTEGER. MAY NEED CHANGES IF NOT NUMERIC OR STRING. ***/!!!;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0046¶
La référence intégrée n’est pas prise en charge dans Snowflake.
Gravité¶
Medium
Description¶
Cette erreur apparaît lorsqu’il existe une référence à une table DBC et que la colonne sélectionnée n’a pas d’équivalence dans Snowflake.
Exemple de code¶
Entrée :¶
CREATE VIEW SAMPLE_VIEW
AS
SELECT PROTECTIONTYPE FROM DBC.DATABASES;
Sortie :¶
CREATE OR REPLACE VIEW SAMPLE_VIEW
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "08/14/2024" }}'
AS
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0046 - BUILT-IN REFERENCE TO PROTECTIONTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
PROTECTIONTYPE FROM
INFORMATION_SCHEMA.DATABASES;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0049¶
Instruction TPT non traitée.
Gravité¶
Élevé
Description¶
Une instruction DML dans TPT n’a pas pu être traitée et convertie par l’outil. Cela peut se produire pour diverses raisons, telles que l’utilisation de la concaténation avec des variables de script ou l’utilisation de guillemets d’échappement à l’intérieur de l’instruction DML.
Exemple de code¶
Code d’entrée :¶
-- Script1.tpt
DEFINE JOB load_job
DESCRIPTION 'LOAD TABLE FROM A FILE'
(
DEFINE SCHEMA schema_name
DESCRIPTION 'define SCHEMA'
(
var1 VARCHAR (50)
);
STEP setup_tables
(
APPLY
('RELEASE MLOAD database_name.table_name;')
TO OPERATOR (DDL_OPERATOR() );
);
);
Code généré :¶
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
import argparse
args = None
## Script1.tpt
class load_job:
#'LOAD TABLE FROM A FILE'
jobname = "load_job"
#'define SCHEMA'
schema_name = """(
var1 VARCHAR(50)
);"""
def setup_tables(self):
self.DDL_OPERATOR()
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0049 - THE FOLLOWING STATEMENT COULD NOT BE PROCESSED ***/!!!
#'RELEASE MLOAD database_name.table_name;'
con = None
def main():
snowconvert.helpers.configure_log()
con = snowconvert.helpers.log_on()
_load_job = load_job()
_load_job.setup_tables()
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Meilleures pratiques¶
Pour ce problème, vous pouvez saisir l’instruction d’insertion manuellement et/ou, étant donné que la valeur DML n’est pas encore prise en charge, demander à l’équipe SnowConvert AI d’ajouter la prise en charge pour ce cas spécifique.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0051¶
Les résultats de la fonction BYTES de Teradata diffèrent de ceux de la fonction LENGTH pour les colonnes d’octets de Snowflake.
Gravité¶
Faible
Description¶
Étant donné que le type de données octets de Teradata possède une longueur fixe, la fonction BYTES comptera toujours les zéros de fin insérés pour s’adapter aux valeurs de type octets plus petites dans la colonne, en renvoyant la taille de la colonne au lieu de la taille de la valeur insérée à l’origine. Cependant, le type binaire de Snowflake a une taille variable, ce qui signifie que la fonction LENGTH renverra toujours la taille des valeurs insérées. Prenons l’exemple du code suivant :
Teradata :
create table exampleTable(
bytecol byte(10)
);
insert into exampleTable values ('2B'XB);
select bytes(bytecol) from exampleTable;
-- Will return 10, the size of bytecol
Code équivalent dans Snowflake :
CREATE OR REPLACE TABLE exampleTable (
bytecol BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
INSERT INTO exampleTable
VALUES (TO_BINARY('2B'));
SELECT
LENGTH(bytecol) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0051 - TERADATA BYTES FUNCTION RESULTS DIFFER FROM SNOWFLAKE LENGTH FUNCTION FOR BYTE TYPE COLUMNS ***/!!! from
exampleTable;
-- Will return 10, the size of bytecol
Exemple de code :¶
Code d’entrée :¶
create table sampleTable(
byteColumn byte(10),
varbyteColumn varbyte(15)
);
select bytes(byteColumn), bytes(varbyteColumn) from sampleTable;
Code généré :¶
CREATE OR REPLACE TABLE sampleTable (
byteColumn BINARY,
varbyteColumn BINARY(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
SELECT
LENGTH(byteColumn) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0051 - TERADATA BYTES FUNCTION RESULTS DIFFER FROM SNOWFLAKE LENGTH FUNCTION FOR BYTE TYPE COLUMNS ***/!!!,
LENGTH(varbyteColumn) from
sampleTable;
Meilleures pratiques¶
Analysez l’utilisation faite des résultats de la fonction BYTES. Le comportement de la fonction LENGTH de Snowflake correspond à celui souhaité dès le départ et aucun changement n’est nécessaire.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0052¶
La conversion implicite de Snowflake en numérique diffère de Teradata et peut échouer pour les chaînes non littérales.
Gravité¶
Faible
Description¶
Teradata et Snowflake autorisent tous deux les valeurs de chaînes pour les fonctions qui attendent des paramètres numériques. Ces chaînes sont ensuite analysées et converties en leur équivalent numérique.
Cependant, ces deux langages présentent des différences quant à ce qu’ils considèrent comme une chaîne numérique valide. Teradata est plus permissif et analyse correctement des cas tels que les chaînes vides/avec espaces blancs uniquement, les tirets intégrés, l’absence de chiffres dans la mantisse ou l’exposant, les signes monétaires, les séparateurs de chiffres ou la spécification du signe du nombre après les chiffres. Par exemple, les chaînes suivantes sont valides :
'1-2-3-4-5' -> 12345'$50' -> 50'5000-' -> -5000'1 569 284,55' -> 1569284,55
Snowflake applique une conversion de chaîne optimiste automatique et s’attend à ce que les chaînes correspondent aux formats TM9 ou TME, de sorte que la conversion échoue pour la plupart des cas mentionnés. Pour résoudre ces différences, SnowConvert AI traite les littéraux de chaînes transmis aux fonctions qui effectuent une conversion implicite en numériques et génère des chaînes équivalentes qui correspondent à TM9 ou TME afin qu’elles puissent être analysées par Snowflake. Ceci ne s’applique qu’aux valeurs de chaînes littérales, ce qui signifie que les valeurs non littérales n’ont aucune garantie d’être analysées par Snowflake.
Exemple de code¶
Code d’entrée :¶
create table myTable(
stringCol varchar(30)
);
insert into myTable values (' 1,236,857.45-');
select cos(' 1,236,857.45-');
select cos(stringCol) from myTable;
Code généré :¶
CREATE OR REPLACE TABLE myTable (
stringCol varchar(30)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
INSERT INTO myTable
VALUES (' 1,236,857.45-');
SELECT
COS('-1236857.45');
SELECT
COS(stringCol !!!RESOLVE EWI!!! /*** SSC-EWI-TD0052 - SNOWFLAKE IMPLICIT CONVERSION TO NUMERIC DIFFERS FROM TERADATA AND MAY FAIL FOR NON-LITERAL STRING VALUES ***/!!!)
from
myTable;
Meilleures pratiques¶
Aucune autre action de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0053¶
Snowflake ne prend pas en charge le type de données Period. Toutes les périodes sont traitées en tant que varchar à la place.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Note
Cet EWI est obsolète. Veuillez vous référer à la documentation SSC-FDM-TD0036.
Précision des représentations varchar générées¶
PERIOD_UDF génère la représentation varchar d’une période en utilisant les formats par défaut pour les horodatages et l’heure spécifiés dans Snowflake. Cela signifie que les horodatages auront trois chiffres de précision et que les variables temporelles en auront zéro. Pour cette raison, vous pouvez remarquer que les résultats ont une précision plus/moins élevée que celle attendue. Il existe deux options pour modifier le nombre de chiffres de précision inclus dans la chaîne résultante :
Utilisez la version à trois paramètres de PERIOD_UDF : Cette surcharge de la fonction prend le paramètre
PRECISIONDIGITS, un entier compris entre 0 et 9, pour contrôler combien de chiffres de la partie fractionnaire seront inclus dans le résultat. Notez que même si Snowflake prend en charge jusqu’à neuf chiffres de précision, le maximum dans Teradata est de six. Exemple :
Appel |
Résultat |
|---|---|
|
|
|
|
|
|
Modifiez les paramètres de session
TIMESTAMP_NTZ_OUTPUT_FORMATetTIME_OUTPUT_FORMAT: les commandesALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = <format>etALTER SESSION SET TIME_OUTPUT_FORMAT = <format>peuvent être utilisées pour modifier les formats utilisés par défaut par Snowflake pour la session en cours. Les modifier pour inclure le nombre souhaité de chiffres de précision modifie le résultat des exécutions futures de PERIOD_UDF pour la session en cours.
Exemple de code¶
Code d’entrée :¶
create table vacations (
employeeName varchar(50),
duration period(date)
);
insert into vacations values ('Richard', period(date '2021-05-15', date '2021-06-15'));
select end(duration) from vacations;
Code généré :¶
CREATE OR REPLACE TABLE vacations (
employeeName varchar(50),
duration VARCHAR(24) /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
INSERT INTO vacations
VALUES ('Richard', PUBLIC.PERIOD_UDF(date '2021-05-15', date '2021-06-15') !!!RESOLVE EWI!!! /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/);
SELECT
PUBLIC.PERIOD_END_UDF(duration) /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/ from
vacations;
Meilleures pratiques¶
Étant donné que le comportement de
PERIODet ses fonctions associées sont émulés à l’aide de varchar, nous vous recommandons d’examiner les résultats obtenus pour vous assurer de leur exactitude.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0055¶
Les formats pris en charge par Snowflake pour TO_CHAR diffèrent par rapport à Teradata et peuvent échouer ou avoir un comportement différent.
Note
Cet EWI est obsolète. Veuillez vous référer à la documentation SSC-FDM-TD0029.
Éléments de format qui dépendent des paramètres de session¶
Certains éléments de format Teradata sont mappés à des fonctions Snowflake qui dépendent de la valeur des paramètres de session. Pour éviter des différences fonctionnelles dans les résultats, vous devez définir ces paramètres de session sur les mêmes valeurs que celles définies dans Teradata. Les éléments de format identifiés qui sont mappés vers ce type de fonctions sont :
D : mappés vers la fonction
DAYOFWEEK, les résultats de cette fonction dépendent du paramètre de sessionWEEK_START. Par défaut, Teradata considère le dimanche comme le premier jour de la semaine, tandis que dans Snowflake, il s’agit du lundi.WW : mappée vers la fonction
WEEK, cette fonction dépend du paramètre de sessionWEEK_OF_YEAR_POLICY, qui est configuré par défaut pour utiliser l’ISO standard (la première semaine de l’année étant la première à contenir au moins quatre jours du mois janvier) mais qui, dans Teradata, est configuré pour considérer le 1er janvier comme le début de la première semaine.
Pour modifier les paramètres de session, utilisez ALTER SESSION SET parameter_name = value. Pour plus d’informations sur les paramètres de session, consultez cette page.
Version à paramètre unique de TO_CHAR¶
La version à paramètre unique de TO_CHAR(Datetime) utilise les formats par défaut spécifiés dans les paramètres de session TIMESTAMP_LTZ_OUTPUT_FORMAT, TIMESTAMP_NTZ_OUTPUT_FORMAT, TIMESTAMP_TZ_OUTPUT_FORMAT et TIME_OUTPUT_FORMAT. Pour éviter des différences de comportement, veuillez les définir sur les mêmes valeurs que celles utilisées dans Teradata.
Pour TO_CHAR(Numeric), Snowflake génère la représentation varchar en utilisant les formats TM9 ou TME pour obtenir une représentation compacte du nombre. Teradata génère également des représentations compactes des nombres, de sorte qu’aucune action n’est requise.
Exemple de code¶
Code d’entrée :¶
select to_char(date '2008-09-13', 'DD/RM/YYYY');
select to_char(date '2010-10-20', 'DS');
select to_char(1255.495, 'SC9999.9999', 'nls_iso_currency = ''EUR''');
select to_char(45620);
Code généré :¶
SELECT
TO_CHAR(date '2008-09-13', 'DD/') || PUBLIC.ROMAN_NUMERALS_MONTH_UDF(date '2008-09-13') || TO_CHAR(date '2008-09-13', '/YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
SELECT
TO_CHAR(date '2010-10-20', 'MM/DD/YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
SELECT
PUBLIC.INSERT_CURRENCY_UDF(TO_CHAR(1255.495, 'S9999.0000'), 2, 'EUR') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
SELECT
TO_CHAR(45620) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
Meilleures pratiques¶
Lorsque vous utilisez FF, essayez d’utiliser les types DateTime avec la même précision que celle que vous utilisez dans Teradata, ou ajoutez une précision à l’élément de format pour éviter un comportement différent.
Lorsque vous utilisez des éléments de format liés au fuseau horaire, utilisez le premier paramètre de type
TIMESTAMP_TZpour éviter un comportement différent. Gardez également à l’esprit que le typeTIMEne peut pas avoir d’informations de fuseau horaire dans Snowflake.Définissez les paramètres de session nécessaires avec les valeurs par défaut de Teradata pour éviter des comportements différents.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0057¶
Les données binaires dans NEW JSON ne sont pas prises en charge.
Gravité¶
Faible
Description¶
La fonction NEW JSON accepte les données JSON représentées sous forme de chaîne ou au format binaire. Lorsque les données sont dans leur représentation binaire, la fonction n’est pas transformée, car ce format binaire n’est pas valide dans Snowflake étant donné qu’il ne peut pas interpréter les métadonnées relatives à l’objet JSON. Pour plus d’informations à ce sujet, consultez la [documentation] NEW JSON de Teradata (https://docs.teradata.com/r/C8cVEJ54PO4~YXWXeXGvsA/QpXrJfufgZ4uyeXFz7Rtcg).
Exemple de code¶
Code d’entrée¶
SELECT NEW JSON ('160000000268656C6C6F0006000000776F726C640000'xb, BSON);
Code généré¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0057 - NEW JSON FUNCTION WITH BINARY DATA IS NOT SUPPORTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'BSON' NOT SUPPORTED ***/!!!
NEW JSON (TO_BINARY('160000000268656C6C6F0006000000776F726C640000'), BSON);
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0059¶
Le fuseau horaire par défaut de l’utilisateur de Snowflake peut nécessiter une configuration pour correspondre à la valeur de Teradata.
Gravité¶
Faible
Description¶
Comme pour Teradata, la définition d’une valeur de fuseau horaire par défaut pour l’utilisateur fera démarrer les sessions avec ce fuseau horaire, jusqu’à ce qu’une nouvelle valeur soit définie pour la session.
Cet avertissement est généré pour rappeler que le même fuseau horaire que celui défini pour l’utilisateur dans Teradata doit être défini pour l’utilisateur Snowflake. Pour ce faire, veuillez utiliser la requête suivante dans Snowflake : ALTER SESSION SET TIMEZONE 'equivalent_timezone'. Rappelez-vous que Snowflake n’accepte que la base de données de fuseaux horaires IANA.
Exemple de code¶
Code d’entrée :¶
SET TIME ZONE USER;
Code généré :¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0059 - SNOWFLAKE USER DEFAULT TIME ZONE MAY REQUIRE CONFIGURATION TO MATCH TERADATA VALUE ***/!!!
ALTER SESSION UNSET TIMEZONE;
Meilleures pratiques¶
N’oubliez pas de définir le fuseau horaire par défaut de l’utilisateur sur un fuseau horaire équivalent à celui défini pour l’utilisateur Teradata.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0060¶
JSON_TABLE non transformée. Les noms des colonnes n’ont pas pu être récupérés depuis les informations sémantiques.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Faible
Description¶
La fonction JSON_TABLE peut être transformée par SnowConvert AI. Cependant, cette transformation nécessite de connaître le nom des colonnes qui sont sélectionnées dans la sous-requête JSON_TABLE ON.
Ce message est généré pour avertir l’utilisateur que les noms des colonnes n’ont pas été explicitement placés dans la sous-requête (par exemple, SELECT * a été utilisé) et que les informations sémantiques des tables référencées n’ont pas été trouvées, ce qui signifie que les noms des colonnes n’ont pas pu être extraits.
Si vous voulez savoir comment charger des données JSON dans une table, consultez cette page.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE demo.Train (
firstCol INT,
jsonCol JSON(400),
thirdCol VARCHAR(30)
);
SELECT * FROM JSON_TABLE
(ON (SELECT T.*
FROM demo.Train T)
USING rowexpr('$.schools[*]')
colexpr('[ {"jsonpath" : "$.name",
"type" : "CHAR(20)"},
{"jsonpath" : "$.type",
"type" : "VARCHAR(20)"}]')
)
AS JT;
SELECT * FROM JSON_TABLE
(ON (SELECT T.*
FROM demo.missingTable T)
USING rowexpr('$.schools[*]')
colexpr('[ {"jsonpath" : "$.name",
"type" : "CHAR(20)"},
{"jsonpath" : "$.type",
"type" : "VARCHAR(20)"}]')
)
AS JT;
Code généré :¶
CREATE OR REPLACE TABLE demo.Train (
firstCol INT,
jsonCol VARIANT,
thirdCol VARCHAR(30)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "12/16/2024", "domain": "test" }}'
;
SELECT
* FROM
(
SELECT
firstCol,
rowexpr.value:name :: CHAR(20) AS Column_0,
rowexpr.value:type :: VARCHAR(20) AS Column_1,
thirdCol
FROM
demo.Train T,
TABLE(FLATTEN(INPUT => jsonCol:schools)) rowexpr
) JT;
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0060 - JSON_TABLE NOT TRANSFORMED, COLUMN NAMES COULD NOT BE RETRIEVED FROM SEMANTIC INFORMATION ***/!!! JSON_TABLE
(ON (
SELECT
T.*
FROM
demo.missingTable T)
USING rowexpr('$.schools[*]')
colexpr('[ {"jsonpath" : "$.name",
"type" : "CHAR(20)"},
{"jsonpath" : "$.type",
"type" : "VARCHAR(20)"}]')
)
AS JT;
Meilleures pratiques¶
Veuillez vérifier si le code fourni à SnowConvert AI est complet. Si vous n’avez pas fourni la définition de table, veuillez réexécuter le code avec la définition de table présente.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0061¶
La transformation TD_UNPIVOT nécessite des informations de colonnes qui n’ont pas pu être trouvées. Colonnes manquantes dans le résultat.
Gravité¶
Faible
Description¶
SnowConvert AI prend en charge et transforme la fonction TD_UNPIVOT, qui peut être utilisée pour représenter les colonnes d’une table sous forme de lignes.
Cependant, pour fonctionner, cette transformation a besoin d’informations sur la table et les colonnes de la table ou, plus précisément, des noms des colonnes. Lorsque ces informations ne sont pas présentes, la transformation peut rester incomplète, avec des colonnes manquantes dans le résultat. Dans ce cas, cet EWI est généré.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE unpivotTable (
myKey INTEGER NOT NULL PRIMARY KEY,
firstSemesterIncome DECIMAL(10,2),
secondSemesterIncome DECIMAL(10,2),
firstSemesterExpenses DECIMAL(10,2),
secondSemesterExpenses DECIMAL(10,2)
);
SELECT * FROM
TD_UNPIVOT(
ON unpivotTable
USING
VALUE_COLUMNS('Income', 'Expenses')
UNPIVOT_COLUMN('Semester')
COLUMN_LIST('firstSemesterIncome, firstSemesterExpenses', 'secondSemesterIncome, secondSemesterExpenses')
COLUMN_ALIAS_LIST('First', 'Second')
)X ORDER BY mykey;
SELECT * FROM
TD_UNPIVOT(
ON unknownTable
USING
VALUE_COLUMNS('MonthIncome')
UNPIVOT_COLUMN('Months')
COLUMN_LIST('januaryIncome', 'februaryIncome', 'marchIncome', 'aprilIncome')
COLUMN_ALIAS_LIST('January', 'February', 'March', 'April')
)X ORDER BY yearKey;
Code généré :¶
CREATE OR REPLACE TABLE unpivotTable (
myKey INTEGER NOT NULL PRIMARY KEY,
firstSemesterIncome DECIMAL(10,2),
secondSemesterIncome DECIMAL(10,2),
firstSemesterExpenses DECIMAL(10,2),
secondSemesterExpenses DECIMAL(10,2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "VALUE_COLUMNS", "UNPIVOT_COLUMN", "COLUMN_LIST", "COLUMN_ALIAS_LIST" **
SELECT
* FROM
(
SELECT
myKey,
TRIM(GET_IGNORE_CASE(OBJECT_CONSTRUCT('FIRSTSEMESTERINCOME', 'First', 'FIRSTSEMESTEREXPENSES', 'First', 'SECONDSEMESTERINCOME', 'Second', 'SECONDSEMESTEREXPENSES', 'Second'), Semester), '"') AS Semester,
Income,
Expenses
FROM
unpivotTable UNPIVOT(Income FOR Semester IN (
firstSemesterIncome,
secondSemesterIncome
)) UNPIVOT(Expenses FOR Semester1 IN (
firstSemesterExpenses,
secondSemesterExpenses
))
WHERE
Semester = 'FIRSTSEMESTERINCOME'
AND Semester1 = 'FIRSTSEMESTEREXPENSES'
OR Semester = 'SECONDSEMESTERINCOME'
AND Semester1 = 'SECONDSEMESTEREXPENSES'
) X ORDER BY mykey;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "VALUE_COLUMNS", "UNPIVOT_COLUMN", "COLUMN_LIST", "COLUMN_ALIAS_LIST" **
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0061 - TD_UNPIVOT TRANSFORMATION REQUIRES COLUMN INFORMATION THAT COULD NOT BE FOUND, COLUMNS MISSING IN RESULT ***/!!!
(
SELECT
TRIM(GET_IGNORE_CASE(OBJECT_CONSTRUCT('JANUARYINCOME', 'January', 'FEBRUARYINCOME', 'February', 'MARCHINCOME', 'March', 'APRILINCOME', 'April'), Months), '"') AS Months,
MonthIncome
FROM
unknownTable UNPIVOT(MonthIncome FOR Months IN (
januaryIncome,
februaryIncome,
marchIncome,
aprilIncome
))
) X ORDER BY yearKey;
Meilleures pratiques¶
Il existe deux façons de fournir des informations sur les colonnes à l’outil de conversion : placez la spécification de la table dans le même fichier que l’appel TD_UNPIVOT, ou spécifiez une liste de colonnes dans la requête SELECT de l’expression ON au lieu de SELECT * ou du nom de la table.
Ce problème peut être ignoré en toute sécurité si ALL les colonnes de la/des table(s) d’entrée ne sont pas pivotées. Sinon, le résultat présentera des colonnes manquantes.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0063¶
Le chemin JSON n’a pas été reconnu.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Medium
Description¶
Ce message s’affiche lorsque SnowConvert AI ne peut pas désérialiser un chemin JSON, car la chaîne n’a pas le format JSON attendu.
Exemple de code¶
Code d’entrée :¶
SELECT
*
FROM
JSON_TABLE (
ON (
SELECT
id,
trainSchedule as ts
FROM
demo.PUBLIC.Train T
) USING rowexpr('$weekShedule.Monday[*]') colexpr(
'[{"jsonpath" "$.time",
"type"" : "CHAR ( 12 )"}]'
)
) AS JT(Id, Ordinal, Time, City);
Code généré :¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0063 - UNRECOGNIZED JSON PATH $weekShedule.Monday[*] ***/!!!
JSON_TABLE (
ON
!!!RESOLVE EWI!!! /*** SSC-EWI-0108 - THE FOLLOWING SUBQUERY MATCHES AT LEAST ONE OF THE PATTERNS CONSIDERED INVALID AND MAY PRODUCE COMPILATION ERRORS ***/!!! (
SELECT
id,
trainSchedule as ts
FROM
demo.PUBLIC.Train T
) USING rowexpr('$weekShedule.Monday[*]') colexpr(
'[{"jsonpath" "$.time",
"type"" : "CHAR ( 12 )"}]'
)
) AS JT(Id, Ordinal, Time, City);
Meilleures pratiques¶
Vérifiez si le chemin JSON contient un caractère inattendu ou s’il ne présente pas le bon format.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0066¶
L’identificateur suivant comporte un ou plusieurs caractères d’échappement Unicode qui ne sont pas valides dans Snowflake.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Faible
Description¶
Ce message s’affiche lorsque SnowConvert AI transforme un identificateur délimité Unicode Teradata avec des caractères non valides dans Snowflake.
Exemple de code¶
Code d’entrée :¶
SELECT * FROM U&"#000f#ffff" UESCAPE '#';
Code généré :¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0066 - THE FOLLOWING IDENTIFIER HAS ONE OR MORE UNICODE ESCAPE CHARACTERS THAT ARE INVALID IN SNOWFLAKE ***/!!!
"\u000f\uffff";
Meilleures pratiques¶
Utilisez des identificateurs avec des caractères Unicode valides dans Snowflake.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0068¶
Snowflake ne prend pas en charge les profils, mais référence les rôles à la place.
Gravité¶
Medium
Description¶
Les profils Teradata permettent de définir plusieurs paramètres communs liés à la gestion de l’espace de stockage et des contraintes de mot de passe.
Cependant, Snowflake fonctionne avec une architecture Cloud et gère et optimise automatiquement le stockage, ce qui signifie qu’aucune personnalisation du stockage n’est effectuée du côté de l’utilisateur. De plus, Snowflake possède actuellement une politique de mot de passe définie qui s’applique à tous les mots de passe des utilisateurs et est non modifiable.
Cette erreur est générée lorsqu’une référence à un profil Teradata est trouvée pour indiquer qu’elle a été modifiée en référence au rôle de l’utilisateur, qui est l’approximation la plus proche d’un profil dans Snowflake (bien qu’il puisse y avoir des différences dans les résultats de la requête), à moins que le profil et les noms de rôles d’un utilisateur ne soient identiques.
Exemple de code¶
Code d’entrée :¶
SELECT PROFILE;
Code généré :¶
SELECT
CURRENT_ROLE() !!!RESOLVE EWI!!! /*** SSC-EWI-TD0068 - SNOWFLAKE DOES NOT SUPPORT PROFILES, REFERENCING ROLE INSTEAD ***/!!!;
Meilleures pratiques¶
Évitez de référencer des profils d’utilisateurs, car ils ne sont pas pris en charge. Les résultats de la requête seront différents, à moins que l’utilisateur n’ait le même nom pour son profil et son rôle.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0069¶
Les résultats ST_DISTANCE sont légèrement différents de ST_SPHERICALDISTANCE.
Note
Cet EWI est obsolète. Veuillez vous référer à la documentation SSC-FDM-TD0031.
Gravité¶
Faible
Description¶
La fonction ST_SPHERICALDISTANCE de Teradata calcule la distance entre deux coordonnées sphériques sur la planète en utilisant la formule Haversine. De l’autre côté, la fonction ST_DISTANCE de Snowflake n’utilise pas la formule Haversine pour calculer la distance minimale entre deux points géographiques.
Exemple de code¶
Code d’entrée :¶
--The distance between New York and Los Angeles
Select Cast('POINT(-73.989308 40.741895)' As ST_GEOMETRY) As location1,
Cast('POINT(40.741895 34.053691)' As ST_GEOMETRY) As location2,
location1.ST_SPHERICALDISTANCE(location2) As Distance_In_km;
Code généré¶
--The distance between New York and Los Angeles
SELECT
Cast('POINT(-73.989308 40.741895)' As GEOGRAPHY) As location1,
Cast('POINT(40.741895 34.053691)' As GEOGRAPHY) As location2,
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0069 - ST_DISTANCE RESULTS ARE SLIGHTLY DIFFERENT FROM ST_SPHERICALDISTANCE ***/!!!
ST_DISTANCE(
location1, location2) As Distance_In_km;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0070¶
Une instruction de retour a été ajoutée à la fin de la section Label pour assurer le même flux d’exécution.
Note
Cet EWI est obsolète. Veuillez vous référer à la documentation SSC-FDM-TD0030.
Gravité¶
Medium
Description¶
Lorsqu’une instruction Goto est remplacée par une section Label et ne contient pas d’instruction de retour, cette dernière est ajoutée à la fin de la section pour assurer le même flux d’exécution.
BTEQ est exécuté après une commande Goto. Les instructions entre la commande Goto et la commande Label avec le même nom sont ignorées. Ainsi, afin d‘éviter que ces instructions ne soient exécutées, la section Label doit contenir une instruction de retour.
De plus, il convient de mentionner que la commande Goto ignore toutes les autres instructions, à l’exception de l’instruction Label avec le même nom, qui marque la reprise de l’exécution. Par conséquent, l’exécution ne reprendra jamais dans une section Label définie avant la commande Goto.
Exemple de code¶
Code d’entrée :¶
-- Additional Params: --scriptsTargetLanguage SnowScript
.LOGON dbc,dbc;
select 'STATEMENTS';
.GOTO LABEL_B
select 'IGNORED STATEMENTS';
.label LABEL_B
select 'LABEL_B STATEMENTS';
Code généré¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
--.LOGON dbc,dbc
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BTLogOn' NODE ***/!!!
null;
BEGIN
SELECT
'STATEMENTS';
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
/*.label LABEL_B*/
BEGIN
SELECT
'LABEL_B STATEMENTS';
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0070 - A RETURN STATEMENT WAS ADDED AT THE END OF THE LABEL SECTION LABEL_B TO ENSURE THE SAME EXECUTION FLOW ***/!!!
RETURN 0;
BEGIN
SELECT
'IGNORED STATEMENTS';
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
/*.label LABEL_B*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
BEGIN
SELECT
'LABEL_B STATEMENTS';
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
END
$$
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0076¶
L’utilisation de tables étrangères n’est pas prise en charge dans Snowflake.
Gravité¶
Medium
Description¶
Les tables étrangères permettent l’accès aux données du stockage d’objets externe, telles que les données semi-structurées et non structurées dans Amazon S3, le stockage Azure Blob et Google Cloud Storage. Cette syntaxe n’est pas prise en charge dans Snowflake. Toutefois, d’autres alternatives peuvent être utilisées à la place dans Snowflake, telles que les tables externes, les tables Iceberg et les tables standards.
Exemple de code¶
Code d’entrée :¶
SELECT cust_id, income, age FROM
FOREIGN TABLE (SELECT cust_id, income, age FROM twm_customer)@hadoop1 T1;
Code généré :¶
SELECT
cust_id,
income,
age FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0076 - THE USE OF FOREIGN TABLES IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
FOREIGN TABLE (SELECT cust_id, income, age FROM twm_customer)@hadoop1 T1;
Meilleures pratiques¶
Au lieu des tables étrangères dans Teradata, vous pouvez utiliser des tables externes Snowflake. Les tables externes référencent des fichiers de données situés dans un data lake de stockage Cloud (Amazon S3, Google Cloud Storage ou Microsoft Azure). Cela permet d’interroger des données stockées dans des fichiers d’un lac de données comme si elles se trouvaient dans une base de données. Les tables externes peuvent accéder aux données stockées dans n’importe quel format pris en charge par les instructions COPY INTO <table>.
Les tables Iceberg de Snowflake constituent une autre alternative. Vous pouvez donc considérer les tables Iceberg comme des tables qui utilisent des formats ouverts et un stockage Cloud fourni par le client. Ces données sont stockées dans des fichiers Parquet.
Enfin, il existe les tables Snowflake standards, qui peuvent être une option pour couvrir la fonctionnalité des tables étrangères dans Teradata.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0077¶
La clause RESET WHEN n’est pas prise en charge dans ce scénario en raison de sa condition.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Medium
Description¶
SnowConvert AI ne prend actuellement en charge que les clauses RESET WHEN avec des conditions binaires (<=, >= ou =). Pour tout autre type de condition, comme IS NOT NULL, la clause RESET WHEN sera supprimée et un message d’erreur sera ajouté, car elle n’est pas prise en charge dans Snowflake.
Ce message d’erreur apparaît également lorsque la condition RESET WHEN fait référence à une expression dont la définition n’a pas été trouvée par l’outil de migration. Actuellement, l’outil prend en charge les références d’alias à une colonne qui a été définie dans la même requête.
Exemple de code¶
La condition n’est pas binaire¶
Code d’entrée :¶
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
ORDER BY month_id
RESET WHEN balance IS NOT NULL
ROWS UNBOUNDED PRECEDING
) as balance_increase
FROM account_balance
ORDER BY 1,2;
Code généré¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0077 - RESET WHEN CLAUSE IS NOT SUPPORTED IN THIS SCENARIO DUE TO ITS CONDITION ***/!!!
ORDER BY month_id
ROWS UNBOUNDED PRECEDING
) as balance_increase
FROM
account_balance
ORDER BY 1,2;
L’expression de la condition n’a pas été trouvée¶
Code d’entrée :¶
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
ORDER BY month_id
RESET WHEN balance <= not_found_expresion
) as balance_increase
FROM account_balance
ORDER BY 1,2;
Code généré¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0077 - RESET WHEN CLAUSE IS NOT SUPPORTED IN THIS SCENARIO DUE TO ITS CONDITION ***/!!!
ORDER BY month_id
) as balance_increase
FROM
account_balance
ORDER BY 1,2;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0079¶
La colonne de type Period requise est introuvable.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Faible
Description¶
Cet avertissement est affiché, car la colonne Period nécessaire pour répliquer la fonctionnalité de la clause Normalize n’a pas été trouvée.
Exemple de code¶
Code d’entrée :¶
SELECT NORMALIZE emp_id, duration2 FROM project;
Code généré¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0079 - THE REQUIRED PERIOD TYPE COLUMN WAS NOT FOUND ***/!!!
// SnowConvert AI Helpers Code section is omitted.
WITH NormalizeCTE AS
(
SELECT
T1.*,
SUM(GroupStartFlag)
OVER (
PARTITION BY
emp_id, duration2
ORDER BY
PeriodColumn_begin
ROWS UNBOUNDED PRECEDING) GroupID
FROM
(
SELECT
emp_id,
duration2,
PUBLIC.PERIOD_BEGIN_UDF(PeriodColumn) PeriodColumn_begin,
PUBLIC.PERIOD_END_UDF(PeriodColumn) PeriodColumn_end,
(CASE
WHEN PeriodColumn_begin <= LAG(PeriodColumn_end)
OVER (
PARTITION BY
emp_id, duration2
ORDER BY
PeriodColumn_begin,
PeriodColumn_end)
THEN 0
ELSE 1
END) GroupStartFlag FROM
project
) T1
)
SELECT
emp_id,
duration2,
PUBLIC.PERIOD_UDF(MIN(PeriodColumn_begin), MAX(PeriodColumn_end))
FROM
NormalizeCTE
GROUP BY
emp_id,
duration2,
GroupID;
Meilleures pratiques¶
Pour corriger cet avertissement manuellement, vous devez simplement trouver la première colonne Period et supprimer toutes ses références, sauf là où elle est définie, puis remplacer PeriodColumn par la colonne trouvée.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0082¶
La fonction Translate utilisant l’encodage actuel n’est pas prise en charge.
Gravité¶
Medium
Description¶
L’utilisation de la fonction Translate utilisant les arguments d’encodage actuels n’est pas prise en charge dans Snowflake. La fonction est commentée pendant la traduction.
Exemple de code¶
Code d’entrée :¶
SELECT Translate('abc' USING KANJISJIS_TO_LATIN);
Code généré¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0082 - TRANSLATE FUNCTION USING KANJISJIS_TO_LATIN ENCODING IS NOT SUPPORTED ***/!!!
Translate('abc' USING KANJISJIS_TO_LATIN);
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0083¶
Impossible de transformer deux ou plusieurs clauses Select complexes à la fois
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Medium
Description¶
SnowConvert AI n’est pas capable de transformer deux ou plusieurs clauses SELECT complexes, car il est nécessaire de les mapper à une CTE ou à une clause FROM composite, qui entraîne la non compilation ou l’entrée dans un cycle logique du code mappé.
Qu’entend-on par clause complexe SELECT ?¶
Clauses qui doivent être mappées à une CTE ou à une clause FROM composite, comme NORMALIZE, EXPAND ON ou RESET WHEN.
Exemple de code¶
Code d’entrée :¶
SELECT
NORMALIZE emp_id,
duration,
dept_id,
balance,
(
ROW_NUMBER() OVER (
PARTITION BY emp_id
ORDER BY
dept_id RESET WHEN balance <= SUM(balance) OVER (
PARTITION BY emp_id
ORDER BY dept_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
)
) -1
) AS balance_increase
FROM project
EXPAND ON duration AS bg BY ANCHOR ANCHOR_SECOND
ORDER BY 1, 2;
Code généré¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0083 - NOT ABLE TO TRANSFORM TWO OR MORE COMPLEX SELECT CLAUSES AT A TIME ***/!!!
NORMALIZE emp_id,
duration,
dept_id,
balance,
(
ROW_NUMBER() OVER (
PARTITION BY
emp_id, new_dynamic_part
ORDER BY
dept_id
) -1
) AS balance_increase
FROM
(
SELECT
emp_id,
duration,
dept_id,
balance,
previous_value,
SUM(dynamic_part) OVER (
PARTITION BY emp_id
ORDER BY dept_id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS new_dynamic_part
FROM
(
SELECT
emp_id,
duration,
dept_id,
balance,
SUM(balance) OVER (
PARTITION BY emp_id
ORDER BY dept_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
) AS previous_value,
(CASE
WHEN balance <= previous_value
THEN 1
ELSE 0
END) AS dynamic_part
FROM
project
)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0083 - NOT ABLE TO TRANSFORM TWO OR MORE COMPLEX SELECT CLAUSES AT A TIME ***/!!!
EXPAND ON duration AS bg BY ANCHOR ANCHOR_SECOND
ORDER BY 1, 2;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0087¶
L’instruction GOTO a été supprimée en raison d’une inversion de l’instruction if.
Note
Cet EWI est obsolète. Veuillez vous référer à la documentation SSC-FDM-TD0026.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Gravité¶
Medium
Description¶
Il est courant d’utiliser la commande GOTO avec les commandes IF et LABEL pour répliquer la fonctionnalité d’une instruction if SQL. Lorsqu’elles sont utilisées de cette manière, il est possible de les transformer directement en une instruction if, if-else, ou même if-elseif-else. Cependant, dans ces cas, les commandes GOTO deviennent inutiles et doivent être supprimées afin d’éviter qu’elles ne soient remplacées par une section LABEL.
Exemple de code¶
Code d’entrée :¶
-- Additional Params: --scriptsTargetLanguage SnowScript
.If ActivityCount = 0 THEN .GOTO endIf
DROP TABLE TABLE1;
.Label endIf
SELECT A FROM TABLE1;
Code généré¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
IF (NOT (STATUS_OBJECT['SQLROWCOUNT'] = 0)) THEN
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0087 - GOTO endIf WAS REMOVED DUE TO IF STATEMENT INVERSION ***/!!!
BEGIN
DROP TABLE TABLE1;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
END IF;
/*.Label endIf*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
BEGIN
SELECT
A
FROM
TABLE1;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
END
$$
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0091¶
Expression transformée en conversion, avec des erreurs possibles dues à des dépendances manquantes.
Note
Certaines parties dans le code de sortie sont omises pour des raisons de clarté.
Gravité¶
Medium
Description¶
Dans les scripts Teradata, vous pouvez utiliser la syntaxe suivante pour CAST des expressions :
<expression> ( <DataType> )
Malheureusement, cette syntaxe génère une ambiguïté lors d’une tentative de transformation d’une CAST en DATE ou TIME, car ces mots-clés se comportent également comme les fonctions CURRENT_DATE et CURRENT_TIME, respectivement.
Par conséquent, sans contexte sur l’expression à CAST, il n’existe pas de moyen sûr de faire la différence entre un cas réel de CAST et une fonction qui accepte DATE ou TIME comme paramètres.
Autrement dit, il est nécessaire de savoir si l’<expression> correspond à une colonne ou à une fonction définie par l’utilisateur (UDF). Pour ce faire, lors de la conversion du code, il convient d’ajouter le fichier CREATE TABLE ou CREATE FUNCTION dont dépend l’<expression>.
Par exemple, considérez l’instruction SELECT suivante. Sans contexte sur l’AMBIGUOUS_EXPR, nous n’avons aucun moyen de déterminer s’il s’agit d’un appel de fonction ou d’un CAST en DATE. Cependant, nous savons que COL1(DATE) est effectivement un CAST, car COL1 est une colonne de la table TAB.
CREATE TABLE TAB (
COL1 VARCHAR(23)
)
SELECT
COL1 (DATE),
AMBIGUOUS_EXPR (DATE)
FROM TAB;
Exemple de code¶
Code d’entrée :¶
CREATE TABLE TAB (
COL1 VARCHAR(23)
)
SELECT
COL1 (DATE),
AMBIGUOUS_EXPR (DATE)
FROM TAB;
Code généré¶
CREATE OR REPLACE TABLE TAB (
COL1 VARCHAR(23)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
SELECT
TO_DATE(
COL1, 'YYYY/MM/DD') AS COL1,
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0091 - EXPRESSION CONVERTED AS CAST BY DEFAULT. CONVERSION MIGHT PRESENT ERRORS DUE TO MISSING DEPENDENCIES FOR 'AMBIGUOUS_EXPR'. ***/!!!
AMBIGUOUS_EXPR :: DATE
FROM
TAB;
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0092¶
La traduction pour la table/vue intégrée Teradata n’est pas prise en charge actuellement.
Gravité¶
Faible
Description¶
Cet EWI est ajouté lorsque SnowConvert AI trouve une table système Teradata qui n’est pas traduite actuellement.
Exemple de code¶
Code d’entrée :¶
SELECT
CRLF ||
TRIM(em.ErrorText) INTO :MsgText
FROM
DBC.ErrorMsgs em
WHERE
em.ErrorCode = SUBSTR(:SqlStateCode, 2, 4)
Code généré¶
SELECT
CRLF ||
TRIM(em.ErrorText) INTO :MsgText
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0092 - TRANSLATION FOR TERADATA BUILT-IN TABLE/VIEW DBC.ErrorMsgs IS NOT CURRENTLY SUPPORTED. ***/!!!
DBC.ErrorMsgs em
WHERE
UPPER(RTRIM(
em.ErrorCode)) = UPPER(RTRIM(SUBSTR(:SqlStateCode, 2, 4)));
Meilleures pratiques¶
Recherchez des équivalents dans les tables internes de Snowflake, telles que
Information_SchemaouSNOWFLAKE.ACCOUNT_USAGE.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-EWI-TD0093¶
Format non pris en charge, qui doit être mis à jour dans toutes les utilisations de conversion de type varchar.
Gravité¶
Élevé
Description¶
Cet EWI est ajouté lorsque la fonction CAST est utilisée pour convertir une expression numérique en un autre type numérique avec un format spécifié. Bien que le format n’ait pas d’impact sur la valeur numérique elle-même, si le résultat est ensuite converti en chaîne, le format prévu ne sera pas appliqué correctement. Par conséquent, il est nécessaire de mettre à jour toutes les instances où le résultat est converti en VARCHAR, afin de garantir que le format défini dans l’EWI est utilisé.
Exemple de code¶
Code d’entrée :¶
SELECT
CAST(245222.32 AS FORMAT '-(10)9.9(4)') AS FormattedAmount,
CAST(FormattedAmount AS VARCHAR(30));
Code généré¶
SELECT
245222.32 !!!RESOLVE EWI!!! /*** SSC-EWI-TD0093 - FORMAT '-(10)9.9(4)' IS NOT SUPPORTED AND MUST BE UPDATED TO THE FOLLOWING FORMAT 'S9999999999.0000' IN ALL VARCHAR CAST USAGES. ***/!!! AS FormattedAmount,
LEFT(LTRIM(TO_VARCHAR(FormattedAmount, 'MI0.00000000000000EEEEE')), 10);
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.