Référence à la traduction SQL¶
Utilisez ce guide pour comprendre à quoi pourrait ressembler le code transformé lors de la migration de Teradata vers Snowflake Le SQL a une syntaxe similaire entre les différents dialectes, mais chaque dialecte peut étendre ou ajouter des fonctionnalités.
Note
Cette page ne liste que les fonctions déjà transformées par SnowConvert, si une fonction de la documentation de Teradata n’est pas listée, il faut considérer qu’elle n’est pas prise en charge.
Fonctions d’agrégation¶
Teradata |
Snowflake |
Remarque |
---|---|---|
AVG |
AVG |
|
CORR |
CORR |
|
COUNT |
COUNT |
|
COVAR_POP |
COVAR_POP |
|
COVAR_SAMP |
COVAR_SAMP |
|
GROUPING |
GROUPING |
|
KURTOSIS |
KURTOSIS |
|
MAXIMUM MAX |
MAX |
|
MINIMUM MIN |
MIN |
|
PIVOT |
PIVOT |
|
REGR_AVGX |
REGR_AVGX |
|
REGR_AVGY |
REGR_AVGY |
|
REGR_COUNT |
REGR_COUNT |
|
REGR_INTERCEPT |
REGR_INTERCEPT |
|
REGR_R2 |
REGR_R2 |
|
REGR_SLOPE |
REGR_SLOPE |
|
REGR_SXX |
REGR_SXX |
|
REGR_SXY |
REGR_SXY |
|
REGR_SYY |
REGR_SYY |
|
SKEW |
SKEW |
|
STDDEV_POP |
STDDEV_POP |
|
STDDEV_SAMP |
STDDEV_SAMP |
|
SUM |
SUM |
|
UNPIVOT |
UNPIVOT |
<p>Unpivot avec plusieurs fonctions<br>non pris en charge dans Snowflake</p> |
VAR_POP |
VAR_POP |
|
VAR_SAMP |
VAR_SAMP |
Voir Fonctions agrégées
Opérateurs/fonctions arithmétiques, trigonométriques et hyperboliques¶
Teradata |
Snowflake |
Remarque |
---|---|---|
ABS |
ABS |
|
CEILING |
CEIL |
|
DEGREES |
DEGREES |
|
EXP |
EXP |
|
FLOOR |
FLOOR |
|
HYPERBOLIC ACOSH ASINH ATANH COSH SINH TANH |
HYPERBOLIC ACOSH ASINH ATANH COSH SINH TANH |
|
LOG |
LOG |
|
LN |
LN |
|
MOD |
MOD |
|
NULLIFZERO(param) |
CASE WHEN param=0 THEN null ELSE param END |
|
POWER |
POWER |
|
RANDOM |
RANDOM |
|
RADIANS |
RADIANS |
|
ROUND |
ROUND |
|
SIGN |
SIGN |
|
SQRT |
SQRT |
|
TRUNC |
TRUNC_UDF |
|
TRIGONOMETRIC ACOS ASIN ATAN ATAN2 COS SIN TAN |
TRIGONOMETRIC ACOS ASIN ATAN ATAN2 COS SIN TAN |
|
ZEROIFNULL |
ZEROIFNULL |
Voir Opérateurs/fonctions arithmétiques, trigonométriques, hyperboliques
Fonctions des attributs¶
Teradata |
Snowflake |
Remarque |
---|---|---|
BIT_LENGTH |
BIT_LENGTH |
|
BYTE BYTES |
LENGTH |
|
CHAR CHARS CHARACTERS |
LEN |
|
CHAR_LENGTH CHARACTER_LENGTH |
LEN |
|
MCHARACTERS |
LENGTH |
|
OCTECT_LENGTH |
OCTECT_LENGTH |
Fonctions de manipulation des bits/octets¶
Teradata |
Snowflake |
Remarque |
---|---|---|
BITAND |
BITAND |
|
BITNOT |
BITNOT |
|
BITOR |
BITOR |
|
BITXOR |
BITXOR |
|
GETBIT |
GETBIT |
Intégré (fonctions du système)¶
Teradata |
Snowflake |
Remarque |
---|---|---|
ACCOUNT |
CURRENT_ACCOUNT |
|
CURRENT_DATE CURDATE |
CURRENT_DATE |
|
CURRENT_ROLE |
CURRENT_ROLE |
|
CURRENT_TIME |
CURRENT_TIME |
|
CURRENT_TIMESTAMP |
CURRENT_TIMESTAMP |
|
DATABASE |
CURRENT_DATABASE |
|
DATE |
CURRENT_DATE |
|
NOW |
CURRENT_TIMESTAMP |
|
PROFILE |
CURRENT_ROLE |
|
SESSION |
CURRENT_SESSION |
|
TIME |
CURRENT_TIME |
|
USER |
CURRENT_USER |
Voir Fonctions intégrées
Calendriers d’entreprise¶
Teradata |
Snowflake |
Remarque |
---|---|---|
DAYNUMBER_OF_MONTH(DatetimeValue, “COMPATIBLE”) |
DAYOFMONTH |
|
DAYNUMBER_OF_MONTH(DatetimeValue, “ISO”) |
DAYNUMBER_OF_MONTH_ISO_UDF |
|
DAYNUMBER_OF_MONTH(DatetimeValue, “TERADATA”) |
DAYOFMONTH |
|
DAYNUMBER_OF_WEEK(DatetimeValue, “ISO”) |
DAYOFWEEKISO |
|
DAYNUMBER_OF_WEEK(DatetimeValue, “COMPATIBLE”) |
DAY_OF_WEEK_COMPATIBLE_UDF |
|
DAYNUMBER_OF_WEEK(DatetimeValue, “TERADATA”) |
TD_DAY_OF_WEEK_UDF |
|
DAYNUMBER_OF_YEAR(DatetimeValue, “ISO”) |
PUBLIC.DAY_OF_YEAR_ISO_UDF |
|
DAYNUMBER_OF_YEAR(DatetimeValue) |
DAYOFYEAR |
|
QUARTERNUMBER_OF_YEAR |
QUARTER |
|
TD_SUNDAY(DateTimeValue) |
PREVIOUS_DAY(DateTimeValue, “Sunday”) |
|
WEEKNUMBER_OF_MONTH |
WEEKNUMBER_OF_MONTH_UDF |
|
WEEKNUMBER_OF_QUARTER(dateTimeValue) |
WEEKNUMBER_OF_QUARTER_UDF |
|
WEEKNUMBER_OF_QUARTER(dateTimeValue, “ISO”) |
WEEKNUMBER_OF_QUARTER_ISO_UDF |
|
WEEKNUMBER_OF_QUARTER(dateTimeValue, “COMPATIBLE”) |
WEEKNUMBER_OF_QUARTER_COMPATIBLE_UDF |
|
WEEKNUMBER_OF_YEAR(DateTimeValue, “ISO”) |
WEEKISO |
|
YEARNUMBER_OF_CALENDAR(DATETIMEVALUE, “COMPATIBLE”) |
YEAR |
|
YEARNUMBER_OF_CALENDAR(DATETIMEVALUE, “ISO”) |
YEAROFWEEKISO |
Voir les Calendriers d’entreprise
Fonctions du calendrier¶
Teradata |
Snowflake |
Remarque |
---|---|---|
DAYNUMBER_OF_WEEK(DatetimeValue) |
TD_DAY_OF_WEEK_UDF |
|
DAYNUMBER_OF_WEEK(DatetimeValue, “COMPATIBLE”) |
DAY_OF_WEEK_COMPATIBLE_UDF |
|
QuarterNumber_Of_Year(DatetimeValue, “ISO”) |
QUARTER_OF_YEAR_ISO_UDF(DatetimeValue) |
|
TD_DAY_OF_CALENDAR |
TD_DAY_OF_CALENDAR_UDF |
|
TD_DAY_OF_MONTH |
DAYOFMONTH |
|
TD_DAY_OF_WEEK |
TD_DAY_OF_WEEK_UDF |
|
TD_DAY_OF_YEAR |
DAYOFYEAR |
|
TD_MONTH_OF_CALENDAR(DateTimeValue) |
TD_MONTH_OF_CALENDAR_UDF(DateTimeValue) |
|
TD_WEEK_OF_CALENDAR(DateTimeValue) |
TD_WEEK_OF_CALENDAR_UDF(DateTimeValue) |
|
TD_WEEK_OF_YEAR |
WEEK_OF_YEAR_UDF |
|
TD_YEAR_BEGIN(DateTimeValue) |
YEAR_BEGIN_UDF(DateTimeValue) |
|
TD_YEAR_BEGIN(DateTimeValue, “ISO”) |
YEAR_BEGIN_ISO_UDF(DateTimeValue) |
|
TD_YEAR_END(DateTimeValue) |
YEAR_END_UDF(DateTimeValue) |
|
TD_YEAR_END(DateTimeValue, “ISO”) |
YEAR_END_ISO_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_MONTH(DateTimeValue) |
WEEKNUMBER_OF_MONTH_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_QUARTER(DateTimeValue) |
WEEKNUMBER_OF_QUARTER_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_QUARTER(DateTimeValue, “ISO”) |
WEEKNUMBER_OF_QUARTER_ISO_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_QUARTER(DateTimeValue, “COMPATIBLE”) |
WEEKNUMBER_OF_QUARTER_COMPATIBLE_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_YEAR(DateTimeValue) |
WEEK_OF_YEAR_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_YEAR(DateTimeValue, “COMPATIBLE”) |
WEEK_OF_YEAR_COMPATIBLE_UDF(DateTimeValue) |
Fonctions de casse¶
Teradata |
Snowflake |
Remarque |
---|---|---|
COALESCE |
COALESCE |
|
NULLIF |
NULLIF |
Voir Fonctions de casse
Fonctions de comparaison¶
Teradata |
Snowflake |
Remarque |
---|---|---|
DECODE |
DECODE |
|
GREATEST |
GREATEST |
|
LEAST |
LEAST |
Conversions de types de données¶
Teradata |
Snowflake |
Remarque |
---|---|---|
CAST |
CAST |
|
CAST(DatetimeValue AS INT) |
DATE_TO_INT_UDF |
|
CAST (VarcharValue AS INTERVAL) |
INTERVAL_UDF |
|
TRYCAST |
TRY_CAST |
|
FROM_BYTES |
TO_NUMBER |
avec le paramètre ASCII n’est pas pris en charge par Snowflake. |
Fonctions de conversion des types de données¶
Teradata |
Snowflake |
Remarque |
---|---|---|
TO_BYTES(Input, “Base10”) |
INT2HEX_UDF(Input) |
|
TO_NUMBER |
TO_NUMBER |
|
TO_CHAR |
TO_CHAR ou expression équivalente |
|
TO_DATE |
TO_DATE |
|
TO_DATE(input, “YYYYDDD”) |
JULIAN_TO_DATE_UDF |
DateTime et fonctions d’intervalle¶
Teradata |
Snowflake |
Remarque |
---|---|---|
ADD_MONTHS |
ADD_MONTHS |
|
EXTRACT |
EXTRACT |
|
LAST_DAY |
LAST_DAY |
|
MONTH |
MONTH |
|
MONTHS_BETWEEN |
MONTHS_BETWEEN_UDF |
|
NEXT_DAY |
NEXT_DAY |
|
OADD_MONTHS |
ADD_MONTHS |
|
ROUND(Numeric) |
ROUND |
|
ROUND(Date) |
ROUND_DATE_UDF |
|
TRUNC(Date) |
TRUNC_UDF |
|
YEAR |
YEAR |
Fonctions de hachage¶
Teradata |
Snowflake |
Remarque |
---|---|---|
HASH_MD5 |
MD5 |
|
HASHAMP HASHBACKAM HASHBUCKET HASHROW |
Non pris en charge |
Consultez les notes sur les différences d’architecture entre Teradata et Snowflake |
Voir Fonctions de hachage
Fonctions JSON¶
Teradata |
Snowflake |
Remarque |
---|---|---|
NEW JSON |
TO_JSON(PARSE_JSON() ) |
|
JSON_CHECK |
CHECK_JSON |
Consulter JSON_CHECK |
JSON_TABLE |
Requête équivalente |
|
JSONExtract JSONExtractValue |
JSON_EXTRACT_UDF |
Voir Documentation JSON
Fonctions de traitement des nullités¶
Teradata |
Snowflake |
Remarque |
---|---|---|
NVL |
NVL |
|
NVL2 |
NVL2 |
Fonctions analytiques ordonnées/fenêtres agrégées¶
Teradata |
Snowflake |
Remarque |
---|---|---|
CSUM(col1, col2) |
SUM(col_1) OVER (PARTITION BY null ORDER BY col_2 ROWS UNBOUNDED PRECEDING) |
|
CUME_DIST |
CUME_DIST |
|
DENSE_RANK |
DENSE_RANK |
|
FIRST_VALUE |
FIRST_VALUE |
|
LAG |
LAG |
|
LAST_VALUE |
LAST_VALUE |
|
LEAD |
LEAD |
|
MAVG(csales, 2, cdate, csales) |
AVG(csales) OVER ( ORDER BY cdate, csales ROWS 1 PRECEDING) |
|
MEDIAN |
MEDIAN |
|
MSUM(csales, 2, cdate, csales) |
SUM(csales) OVER(ORDER BY cdate, csales ROWS 1 PRECEDING) |
|
PERCENT_RANK |
PERCENT_RANK |
|
PERCENTILE_CONT |
PERCENTILE_CONT |
|
PERCENTILE_DISC |
PERCENTILE_DISC |
|
QUANTILE |
QUANTILE |
|
RANK |
RANK |
|
ROW_NUMBER |
ROW_NUMBER |
Voir Fonctions de fenêtre
Fonctions et opérateurs de période¶
Teradata |
Snowflake |
Remarque |
---|---|---|
BEGIN |
PERIOD_BEGIN_UDF |
|
END |
PERIOD_END_UDF |
|
INTERVAL |
TIMESTAMPDIFF |
|
LAST |
PERIOD_LAST_UDF |
|
LDIFF |
PERIOD_LDIFF_UDF |
|
OVERLAPS |
PUBLIC.PERIOD_OVERLAPS_UDF |
|
PERIOD |
PERIOD_UDF |
|
PERIOD(datetimeValue, UNTIL_CHANGED) |
PERIOD_UDF(datetimeValue, “9999-12-31 23:59:59.999999”) |
|
RDIFF |
PERIOD_RDIFF_UDF |
Fonctions de bande de requête¶
Teradata |
Snowflake |
Remarque |
---|---|---|
GETQUERYBANDVALUE |
GETQUERYBANDVALUE_UDF |
Fonctions Regex¶
Teradata |
Snowflake |
Remarque |
---|---|---|
REGEXP_INSTR |
REGEXP_INSTR |
|
REGEXP_REPLACE |
REGEXP_REPLACE |
|
REGEXP_SIMILAR |
REGEXP_LIKE |
|
REGEXP_SUBSTR |
REGEXP_SUBSTR |
Voir Fonctions Regex
Opérateurs et fonctions sur les chaînes de caractères¶
Teradata |
Snowflake |
Remarque |
---|---|---|
ASCII |
ASCII |
|
CHAR2HEXINT |
CHAR2HEXINT_UDF |
|
CHR |
CHR/CHAR |
|
CHAR_LENGTH |
LEN |
|
CONCAT |
CONCAT |
|
EDITDISTANCE |
EDITDISTANCE |
|
INDEX |
CHARINDEX |
|
INITCAP |
INITCAP |
|
INSTR |
REGEXP_INSTR |
|
INSTR(StringValue, StringValue ,NumericNegativeValue, NumericValue) |
INSTR_UDF(StringValue, StringValue ,NumericNegativeValue, NumericValue) |
|
LEFT |
LEFT |
|
LENGTH |
LENGTH |
|
LOWER |
LOWER |
|
LPAD |
LPAD |
|
LTRIM |
LTRIM |
|
OREPLACE |
REPLACE |
|
OTRANSLATE |
TRANSLATE |
|
POSITION |
POSITION |
|
REVERSE |
REVERSE |
|
RIGHT |
RIGHT |
|
RPAD |
RPAD |
|
RTRIM |
RTRIM |
|
SOUNDEX |
SOUNDEX_P123 |
|
STRTOK |
STRTOK |
|
STRTOK_SPLIT_TO_TABLE |
STRTOK_SPLIT_TO_TABLE |
|
SUBSTRING |
SUBSTR/SUBSTR_UDF |
|
TRANSLATE_CHK |
TRANSLATE_CHK_UDF |
|
TRIM(LEADING “0” FROM aTABLE) |
LTRIM(aTABLE, “0”) |
|
TRIM(TRAILING “0” FROM aTABLE) |
RTRIM(aTABLE, “0”) |
|
TRIM(BOTH “0” FROM aTABLE) |
TRIM(aTABLE, “0”) |
|
TRIM(CAST(numericValue AS FORMAT “999”)) |
LPAD(numericValue, 3, 0) |
|
UPPER |
UPPER |
Fonctions St_Point¶
Teradata |
Snowflake |
Remarque |
---|---|---|
ST_SPHERICALDISTANCE |
HAVERSINE |
Voir Fonctions St_Point
Opérateurs de table¶
Teradata |
Snowflake |
Remarque |
---|---|---|
TD_UNPIVOT |
Requête équivalente |
Voir Opérateurs de table
Fonctions XML¶
Teradata |
Snowflake |
Remarque |
---|---|---|
XMLAGG |
LISTAGG |
|
XMLQUERY |
Non pris en charge |
Voir Fonctions XML
UDFs d’extensibilité¶
Cette section contient des UDFs et d’autres fonctions d’extension qui ne sont pas proposées par Teradata en tant que fonctions intégrées au système, mais qui sont transformées par SnowConvert
Teradata |
Snowflake |
Remarque |
---|---|---|
CHKNUM |
CHKNUM_UDF |
Consultez cette page de téléchargement d’UDF |
Remarques¶
Différences d’architecture entre Teradata et Snowflake¶
Teradata utilise une architecture sans partage avec des AMP (Access Module Processors) où chaque AMP gère sa propre part de stockage sur disque et est accessible par hachage lors des requêtes. Pour tirer parti du parallélisme, les informations stockées doivent être réparties uniformément entre les AMPs. Pour ce faire, Teradata propose un groupe de fonctions liées au hachage qui peuvent être utilisées pour déterminer la qualité des index primaires actuels.
En revanche, l’architecture de Snowflake est différente et gère elle-même la manière dont les données sont stockées, ce qui signifie que les utilisateurs n’ont pas à se préoccuper de l’optimisation de la distribution de leurs données.
Constantes de borne de fin (UNTIL_CHANGED et UNTIL_CLOSED)¶
UNTIL_CHANGED et UNTIL_CLOSED sont des constantes Teradata qui représentent une borne de fin non définie pour les périodes. En interne, ces constantes sont représentées par la valeur maximale que peut avoir un horodatage, c’est-à-dire « 9999-12-31 23:59:59.999999 ». Lors de la migration de la fonction PERIOD, la borne de fin est vérifiée pour déterminer s’il s’agit de l’une de ces constantes et pour la remplacer par un varchar de valeur « 9999-12-31 23:59:59.999999 ». Si c’est le cas, Snowflake convertit le varchar en date ou en horodatage, selon le type de la borne de début, lors de l’appel de la fonction PERIOD___UDF.
Conversion implicite¶
Certaines fonctions de chaîne de Teradata comme INDEX ou POSITION acceptent des types de données autres que des chaînes et les convertissent implicitement en chaînes, ce qui peut entraîner des incohérences dans les résultats de ces fonctions entre Teradata et Snowflake. Par exemple, regardez le code Teradata suivant :
SELECT INDEX(35, '5');
Renvoie 4, tandis que l’équivalent CHARINDEX dans Snowflake :
SELECT CHARINDEX('5', 35);
Renvoie 2, cela se produit parce que Teradata a ses propres formats par défaut qui sont utilisés lors de la conversion implicite. Dans l’exemple ci-dessus, Teradata interprète la constante numérique 35 comme BYTEINT et utilise le format par défaut BYTEINT'-999'
pour la conversion implicite en chaîne, ce qui donne la valeur convertie ' 35'
. D’autre part, Snowflake utilise ses propres formats par défaut, ce qui crée des incohérences dans le résultat.
Pour résoudre ce problème, les modifications suivantes sont apportées aux paramètres de ces fonctions :
Si le paramètre n’a pas de lien avec le format, une fonction Snowflake
TO_VARCHAR
avec l’équivalent du format Teradata par défaut dans Snowflake est ajoutée à la place.Si le paramètre est associé à un format, le format est converti en son équivalent Snowflake et la fonction
TO_VARCHAR
est ajoutée.Par ailleurs, Teradata ignore le signe d’un nombre s’il n’est pas explicitement placé dans un format, alors que Snowflake ajoute toujours des espaces pour insérer le signe même s’il n’est pas spécifié. Dans ces cas, une vérification est effectuée pour voir si le signe a été spécifié et pour le supprimer de la chaîne de Snowflake s’il ne l’a pas été.
Après ces modifications, le code résultant serait le suivant :
SELECT CHARINDEX( '5', TO_VARCHAR(35, 'MI999'));
Ce qui donne 4, le même résultat que le code Teradata.
Problèmes connus¶
Aucun problème n’a été constaté.