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

Voir Fonctions des attributs

Fonctions de manipulation des bits/octets

Teradata

Snowflake

Remarque

BITAND

BITAND

BITNOT

BITNOT

BITOR

BITOR

BITXOR

BITXOR

GETBIT

GETBIT

Voir Fonctions bits/octets

Intégré (fonctions du système)

Teradata

Snowflake

Remarque

ACCOUNT

CURRENT_ACCOUNT

CURRENT_DATE

CURDATE

CURRENT_DATE

CURRENT_ROLE

CURRENT_ROLE

CURRENT_TIME
CURTIME

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”)
DAYNUMBER_OF_WEEK(DatetimeValue)

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

DAYOFMONTH

TD_DAY_OF_WEEK
DAYOFWEEK

TD_DAY_OF_WEEK_UDF

TD_DAY_OF_YEAR

DAYOFYEAR

TD_MONTH_OF_CALENDAR(DateTimeValue)
MONTH_CALENDAR(DateTimeValue)

TD_MONTH_OF_CALENDAR_UDF(DateTimeValue)

TD_WEEK_OF_CALENDAR(DateTimeValue)
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)

Voir Fonctions du calendrier

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

Voir Fonctions de comparaison

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
TO_BINARY

avec le paramètre ASCII n’est pas pris en charge par Snowflake.

Voir Conversions des types de données

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

Voir Fonctions de conversion des types de données

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

Voir DateTime et Fonctions et expressions d’intervalle

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
JSONExtractLargeValue

JSON_EXTRACT_UDF

Voir Documentation JSON

Fonctions de traitement des nullités

Teradata

Snowflake

Remarque

NVL

NVL

NVL2

NVL2

Voir Fonctions de traitement des nullités

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(datetimeValue, UNTIL_CLOSED)

PERIOD_UDF(datetimeValue, “9999-12-31 23:59:59.999999”)

RDIFF

PERIOD_RDIFF_UDF

Voir Fonctions et opérateurs de période

Fonctions de bande de requête

Teradata

Snowflake

Remarque

GETQUERYBANDVALUE

GETQUERYBANDVALUE_UDF

Voir Fonctions de bande de requête

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

Voir Opérateurs et fonctions de chaîne​​​

Fonctions St_Point

Teradata

Snowflake

Remarque

ST_SPHERICALDISTANCE

HAVERSINE
ST_DISTANCE

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');
Copy

Renvoie 4, tandis que l’équivalent CHARINDEX dans Snowflake :

SELECT CHARINDEX('5', 35);
Copy

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 SnowflakeTO_VARCHARavec 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 fonctionTO_VARCHARest 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'));
Copy

Ce qui donne 4, le même résultat que le code Teradata.

Problèmes connus

Aucun problème n’a été constaté.