SQL-Übersetzungsreferenz¶
Verwenden Sie dies als Leitfaden, um zu verstehen, wie der umgewandelte Code aussehen könnte, wenn Sie von Teradata zu Snowflake migrieren. SQL hat eine ähnliche Syntax zwischen den Dialekten, aber jeder Dialekt kann neue Funktionalitäten erweitern oder hinzufügen.
Bemerkung
Auf dieser Seite sind nur die Funktionen aufgeführt, die bereits von SnowConvert umgewandelt wurden. Wenn eine Funktion aus der Teradata-Dokumentation dort nicht aufgeführt ist, sollte sie als nicht unterstützt betrachtet werden.
Aggregatfunktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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 mit mehreren Funktionen<br>nicht in Snowflake unterstützt</p> |
VAR_POP |
VAR_POP |
|
VAR_SAMP |
VAR_SAMP |
Siehe Aggregatfunktionen
Arithmetische, trigonometrische, hyperbolische Operatoren/Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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(Parameter) |
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 |
Siehe Arithmetische, Trigonometrische, Hyperbolische Operatoren/Funktionen
Attribut-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
BIT_LENGTH |
BIT_LENGTH |
|
BYTE BYTES |
LENGTH |
|
CHAR CHARS CHARACTERS |
LEN |
|
CHAR_LENGTH CHARACTER_LENGTH |
LEN |
|
MCHARACTERS |
LENGTH |
|
OCTECT_LENGTH |
OCTECT_LENGTH |
Siehe Attributfunktionen
Bit/Byte Manipulationsfunktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
BITAND |
BITAND |
|
BITNOT |
BITNOT |
|
BITOR |
BITOR |
|
BITXOR |
BITXOR |
|
GETBIT |
GETBIT |
Siehe Bit/Byte-Funktionen
Integriert (Systemfunktionen)¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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 |
Siehe Integrierte Funktionen
Business-Kalender¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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 |
Siehe Business-Kalender
Kalender-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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) |
Siehe Kalenderfunktionen
Case-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
COALESCE |
COALESCE |
|
NULLIF |
NULLIF |
Siehe Case-Funktionen
Vergleichsfunktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
DECODE |
DECODE |
|
GREATEST |
GREATEST |
|
LEAST |
LEAST |
Siehe Vergleichsfunktionen
Datentypkonvertierung¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
CAST |
CAST |
|
CAST(DatetimeValue AS INT) |
DATE_TO_INT_UDF |
|
CAST (VarcharValue AS INTERVAL) |
INTERVAL_UDF |
|
TRYCAST |
TRY_CAST |
|
FROM_BYTES |
TO_NUMBER |
mit dem Parameter ASCII wird in Snowflake nicht unterstützt. |
Siehe Datentypkonvertierungen
Datentypkonvertierungsfunktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
TO_BYTES(Input, ‚Base10‘) |
INT2HEX_UDF(Eingabe) |
|
TO_NUMBER |
TO_NUMBER |
|
TO_CHAR |
TO_CHAR oder ein entsprechender Ausdruck |
|
TO_DATE |
TO_DATE |
|
TO_DATE(input, ‚YYYYDDD‘) |
JULIAN_TO_DATE_UDF |
DateTime und Intervallfunktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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(Numerisch) |
ROUND |
|
ROUND(date) |
ROUND_DATE_UDF |
|
TRUNC(date) |
TRUNC_UDF |
|
YEAR |
YEAR |
Hash-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
HASH_MD5 |
MD5 |
|
HASHAMP HASHBACKAM HASHBUCKET HASHROW |
Nicht unterstützt |
Prüfen Sie die Hinweise auf [zu den Architekturunterschieden zwischen Teradata und Snowflake](../../../../general/technical-documentation/issues-and-troubleshooting/functional-difference/README. md) |
Siehe Hashwert-Funktionen
JSON-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
NEW JSON |
TO_JSON(PARSE_JSON() ) |
|
JSON_CHECK |
CHECK_JSON |
Prüfen Sie JSON_CHECK |
JSON_TABLE |
Äquivalente Abfrage |
|
JSONExtract JSONExtractValue |
JSON_EXTRACT_UDF |
Siehe JSON Dokumentation
Null-Handling-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
NVL |
NVL |
|
NVL2 |
NVL2 |
Siehe Null-Handling-Funktionen
Geordnete Analytische/Fenster Aggregat-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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 |
Siehe Fensterfunktionen
Periodenfunktionen und Operatoren¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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 |
Abfrageband-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
GETQUERYBANDVALUE |
GETQUERYBANDVALUE_UDF |
Siehe Abfrageband-Funktionen
Regex-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
REGEXP_INSTR |
REGEXP_INSTR |
|
REGEXP_REPLACE |
REGEXP_REPLACE |
|
REGEXP_SIMILAR |
REGEXP_LIKE |
|
REGEXP_SUBSTR |
REGEXP_SUBSTR |
Siehe Regex-Funktionen
Zeichenfolge-Operatoren und -Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
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‘ FROMaTABLE) |
LTRIM(aTABLE, ‚0‘) |
|
TRIM(TRAILING ‚0‘ FROMaTABLE) |
RTRIM(aTABLE, ‚0‘) |
|
TRIM(BOTH ‚0‘ FROMaTABLE) |
TRIM(aTABLE, ‚0‘) |
|
TRIM(CAST(numericValue AS FORMAT ‚999‘)) |
LPAD(numericValue, 3, 0) |
|
UPPER |
UPPER |
St_Point-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
ST_SPHERICALDISTANCE |
HAVERSINE |
Siehe St_Point-Funktionen
Tabellen-Operatoren¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
TD_UNPIVOT |
Äquivalente Abfrage |
Siehe Tabellen-Operatoren
XML-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
XMLAGG |
LISTAGG |
|
XMLQUERY |
Nicht unterstützt |
Siehe XML-Funktionen
Erweiterbarkeits-UDFs¶
Dieser Abschnitt enthält UDFs und andere Erweiterungsfunktionen, die von Teradata nicht als systemeigene Funktionen angeboten werden, sondern von SnowConvert
Teradata |
Snowflake |
Hinweis |
---|---|---|
CHKNUM |
CHKNUM_UDF |
Besuchen Sie diese UDF-Download-Seite |
Anmerkungen¶
Architekturunterschiede zwischen Teradata und Snowflake¶
Teradata verfügt über eine Shared-Nothing-Architektur mit Access Module Processors (AMP), bei der jeder AMP seinen eigenen Anteil am Plattenspeicher verwaltet und bei Abfragen über Hashing zugegriffen wird. Um die Vorteile der Parallelität zu nutzen, sollten die gespeicherten Informationen gleichmäßig auf AMPs verteilt werden. Zu diesem Zweck bietet Teradata eine Gruppe von Hashwert-Funktionen an, mit denen Sie feststellen können, wie gut die aktuellen Primärindizes sind.
Die Snowflake-Architektur hingegen ist anders. Sie verwaltet die Speicherung der Daten selbst, so dass sich die Benutzer nicht um die Optimierung der Datenverteilung kümmern müssen.
Endgültig gebundene Konstanten (UNTIL_CHANGED und UNTIL_CLOSED)¶
Sowohl UNTIL_CHANGED als auch UNTIL_CLOSED sind Teradata-Konstanten, die eine undefinierte Endgrenze für Zeiträume darstellen. Intern werden diese Konstanten als der maximale Wert dargestellt, den ein Zeitstempel haben kann, z. B. ‚9999-12-31 23:59:59,999999‘. Während der Migration der Funktion PERIOD wird die Endgrenze überprüft, um festzustellen, ob sie eine dieser Konstanten ist, und sie gegebenenfalls durch Varchar mit dem Wert ‚9999-12-31 23:59:59.999999‘ zu ersetzen. Ist dies der Fall, wandelt Snowflake den Varchar-Wert je nach Typ der Anfangsgrenze beim Aufruf von PERIOD___UDF aufruft.
Implizite Konvertierung¶
Einige Teradata-Zeichenfolgenfunktionen wie INDEX oder POSITION akzeptieren Nicht-Zeichenfolgen-Datentypen und konvertieren sie implizit in eine Zeichenfolge. Dies kann zu Inkonsistenzen in den Ergebnissen dieser Funktionen zwischen Teradata und Snowflake führen. Zum Beispiel der folgende Teradata-Code:
SELECT INDEX(35, '5');
Das Ergebnis ist 4, während die CHARINDEX-Entsprechung in Snowflake:
SELECT CHARINDEX('5', 35);
2 ist. Dies geschieht, weil Teradata seine eigenen Standardformate hat, die bei der impliziten Konvertierung verwendet werden. Im obigen Beispiel interpretiert Teradata die numerische Konstante 35 als BYTEINT und verwendet BYTEINT Standardformat'-999'
für die implizite Konvertierung in eine Zeichenfolge, wodurch der konvertierte Wert ' 35'
lautet. Andererseits verwendet Snowflake seine eigenen Standardformate, was zu Inkonsistenzen im Ergebnis führt.
Um dieses Problem zu lösen, werden die folgenden Änderungen an diesen Funktionsparametern vorgenommen:
Wenn der Parameter not eine Umwandlung mit Format hat, wird stattdessen eine Funktion von Snowflake
TO_VARCHAR
mit dem Standard-Teradata-Format-Äquivalent in Snowflake hinzugefügt.Wenn der Parameter eine Formatumwandlung hat, dann wird das Format in sein Snowflake-Äquivalent konvertiert und die Funktion
TO_VARCHAR
hinzugefügt.Als Randbemerkung: Teradata ignoriert das Vorzeichen einer Zahl, wenn es nicht explizit in ein Format eingefügt wird, während Snowflake immer Leerzeichen hinzufügt, um das Vorzeichen einzufügen, auch wenn es nicht angegeben wurde. In diesen Fällen wird geprüft, ob das Vorzeichen angegeben wurde und es aus der Snowflake-Zeichenfolge entfernt, falls es nicht angegeben wurde.
Nach diesen Änderungen würde der Code folgendermaßen aussehen:
SELECT CHARINDEX( '5', TO_VARCHAR(35, 'MI999'));
Das Ergebnis ist 4, das gleiche wie der Teradata-Code.
Bekannte Probleme¶
Es wurden keine Probleme gefunden.