SnowConvert: Integrierte Teradata-Funktionen¶
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.
Bemerkung
Einige Teradata-Funktionen haben kein direktes Äquivalent in Snowflake, so dass sie in ein funktionales Äquivalent UDF umgewandelt werden. Diese sind leicht an dem Postfix _UDF im Namen der Funktion zu erkennen. Weitere Informationen über die Verwendung von UDFs SnowConvert finden Sie in diesem Git-Repository.
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 |
Prüfen Sie 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 |
Prüfen Sie 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 |
Prüfen Sie In INTERVAL-Datentyp umwandeln |
TRYCAST |
TRY_CAST |
|
FROM_BYTES |
TO_NUMBER |
FROM_BYTES mit dem Parameter ASCII wird in Snowflake nicht unterstützt. |
Siehe Datentypkonvertierungen
Datentypkonvertierungsfunktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
TO_BYTES(Input, ‚Base10‘) |
INT2HEX_UDF(Input) |
|
TO_NUMBER |
TO_NUMBER |
|
TO_CHAR |
TO_CHAR oder gleichwertiger Ausdruck |
Prüfen Sie TO_CHAR. |
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 zu den Architekturunterschieden zwischen Teradata und Snowflake |
Siehe Hashwert-Funktionen
JSON-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
NEW JSON |
TO_JSON(PARSE_JSON() ) |
Prüfen Sie NEW JSON |
JSON_CHECK |
CHECK_JSON |
Prüfen Sie JSON_CHECK |
JSON_TABLE |
Äquivalente Abfrage |
Prüfen Sie JSON_TABLE |
JSONExtract JSONExtractValue |
JSON_EXTRACT_UDF |
Prüfen Sie JSON_EXTRACT |
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‘) |
Siehe Hinweise zu Endkonstante Konstanten |
RDIFF |
PERIOD_RDIFF_UDF |
Abfrageband-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
GETQUERYBANDVALUE |
GETQUERYBANDVALUE_UDF |
Prüfen Sie GETQUERYBANDVALUE |
Siehe Abfrageband-Funktionen
Regex-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
REGEXP_INSTR |
REGEXP_INSTR |
Prüfen Sie Regex-Funktionen |
REGEXP_REPLACE |
REGEXP_REPLACE |
Prüfen Sie Regex-Funktionen |
REGEXP_SIMILAR |
REGEXP_LIKE |
Prüfen Sie Regex-Funktionen |
REGEXP_SUBSTR |
REGEXP_SUBSTR |
Prüfen Sie Regex-Funktionen |
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 |
Überprüfen Sie die Hinweise zu implicit-conversion |
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 |
Überprüfen Sie die Hinweise zu implicit-conversion |
REVERSE |
REVERSE |
|
RIGHT |
RIGHT |
|
RPAD |
RPAD |
|
RTRIM |
RTRIM |
|
SOUNDEX |
SOUNDEX_P123 |
|
STRTOK |
STRTOK |
|
STRTOK_SPLIT_TO_TABLE |
STRTOK_SPLIT_TO_TABLE |
Prüfen Sie Strtok_split_to_table |
SUBSTRING |
SUBSTR/SUBSTR_UDF |
Prüfen Sie Teilzeichenfolge |
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 |
Prüfen Sie Td_unpivot |
Siehe Tabellen-Operatoren
XML-Funktionen¶
Teradata |
Snowflake |
Hinweis |
---|---|---|
XMLAGG |
LISTAGG |
Prüfen Sie Xmlagg |
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.
Endkonstanten (UNTIL_CHANGED und UNTIL_CLOSED)¶
Sowohl UNTIL_CHANGED als auch UNTIL_CLOSED sind Teradata-Konstanten, die eine undefinierte Endgrenze für Perioden 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.
Umwandlung von Zahlendatentypen in Varchar-Datentypen¶
Teradata verwendet bei der Umwandlung in Varchar Standardformate für jeden Zahlendatentyp. Snowconvert fügt daher Formate hinzu, um die Gleichwertigkeit zwischen den Plattformen zu gewährleisten.
Beispielhafte Quellcode-Muster¶
BYTEINT¶
Teradata¶
SELECT '"'||cast(cast(12 as BYTEINT) as varchar(10))||'"';
(('"'||12)||'"')|
----------------+
"12" |
Snowflake¶
SELECT
'"'|| LEFT(TO_VARCHAR(cast(12 as BYTEINT), 'TM'), 10) ||'"';
"'""'|| LEFT(TO_VARCHAR(CAST(12 AS BYTEINT), 'TM'), 10) ||'""'"
---------------------------------------------------------------
"12"
SMALLINT¶
Teradata¶
SELECT '"'||cast(cast(123 as SMALLINT) as varchar(10))||'"';
(('"'||123)||'"')|
-----------------+
"123" |
Snowflake¶
SELECT
'"'|| LEFT(TO_VARCHAR(CAST(123 AS SMALLINT), 'TM'), 10) ||'"';
"'""'|| LEFT(TO_VARCHAR(CAST(123 AS SMALLINT), 'TM'), 10) ||'""'"
-----------------------------------------------------------------
"123"
INTEGER¶
Teradata¶
SELECT '"'||cast(cast(12345 as INTEGER) as varchar(10))||'"';
(('"'||12345)||'"')|
-------------------+
"12345" |
Snowflake¶
SELECT
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS INTEGER), 'TM'), 10) ||'"';
"'""'|| LEFT(TO_VARCHAR(CAST(12345 AS INTEGER), 'TM'), 10) ||'""'"
------------------------------------------------------------------
"12345"
BIGINT¶
Teradata¶
SELECT '"'||cast(cast(12345 as BIGINT) as varchar(10))||'"';
(('"'||12345)||'"')|
-------------------+
"12345" |
Snowflake¶
SELECT
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS BIGINT), 'TM'), 10) ||'"';
"'""'|| LEFT(TO_VARCHAR(CAST(12345 AS BIGINT), 'TM'), 10) ||'""'"
-----------------------------------------------------------------
"12345"
DECIMAL[(n[,m])] oder NUMERIC[(n[,m])]¶
Teradata¶
SELECT '"'||cast(cast(12345 as DECIMAL) as varchar(10))||'"',
'"'||cast(cast(12345 as DECIMAL(12, 2)) as varchar(10))||'"';
(('"'||12345)||'"')|(('"'||12345)||'"')|
-------------------+-------------------+
"12345." |"12345.00" |
Snowflake¶
SELECT
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL), 'TM.'), 10) ||'"',
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL(12, 2)), 'TM'), 10) ||'"';
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL), 'TM.'), 10) ||'"' '"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL(12, 2)), 'TM'), 10) ||'"'
"12345." "12345.00"
Bekannte Probleme ¶
Teradata behandelt die Zahlen zwischen 0 und 1 anders als Snowflake. Für diese Werte fügt Teradata die Null vor dem Punkt nicht hinzu, während Snowflake dies tut.
Teradata¶
SELECT '"'||cast(cast(-0.1 as DECIMAL(12, 2)) as varchar(10))||'"' AS column1,
'"'||cast(cast(0.1 as DECIMAL(12, 2)) as varchar(10))||'"' AS column2;
COLUMN1 |COLUMN2
-----------------+--------------+
"-.10" |".10" |
Snowflake¶
SELECT
'"'|| LEFT(TO_VARCHAR(CAST(-0.1 AS DECIMAL(12, 2)), 'TM'), 10) ||'"' AS column1,
'"'|| LEFT(TO_VARCHAR(CAST(0.1 AS DECIMAL(12, 2)), 'TM'), 10) ||'"' AS column2;
COLUMN1 |COLUMN2
------------------+---------------+
"-0.10" |"0.10" |
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
Umwandlung in DATE mit { }¶
Beschreibung¶
Die folgende Syntax wandelt eine datumsformatierte Zeichenfolge in den Datentyp DATE um, indem Sie ein d vor die Zeichenfolgendefinition in geschweiften Klammern setzen.
SELECT {d '1233-10-10'}
Beispielhafte Quellcode-Muster¶
Umwandlung in DATE mit geschweiften Klammern¶
Teradata
SELECT * FROM RESOURCE_DETAILS where change_ts >= {d '2022-09-10'};
Snowflake
SELECT
* FROM
PUBLIC.RESOURCE_DETAILS
where change_ts >= DATE('2022-09-10');
Umwandlung in INTERVAL-Datentyp¶
Beschreibung¶
Snowflake unterstützt den Datentyp Intervall nicht, verfügt aber über INTERVAL-Konstanten, die in DateTime Operationen verwendet werden können. Andere Verwendungen können mit VARCHAR emuliert werden, SnowConvert wandelt CAST-Funktionen je nach Fall in ein Äquivalent zum Datentyp INTERVAL um:
Wenn der umgewandelte Wert vom Typ Intervall ist, wird eine UDF generiert, die das neue Intervalläquivalent als Zeichenfolge erzeugt
Wenn der Wert ein Literal ist, wird eine Snowflake-Intervallkonstante erzeugt, wenn die Umwandlung in einer Datetime-Operation verwendet wird, andernfalls wird eine Literal-Zeichenfolge erzeugt
Wenn der Wert nicht literal ist, wird eine Umwandlung in Zeichenfolge erzeugt
Beispielhafte Quellcode-Muster¶
Nicht-Intervall-Literale¶
Teradata¶
SELECT TIMESTAMP '2022-10-15 10:30:00' + CAST ('12:34:56.78' AS INTERVAL HOUR(2) TO SECOND(2)) AS VARCHAR_TO_INTERVAL,
TIMESTAMP '2022-10-15 10:30:00' + CAST(-5 AS INTERVAL YEAR(4)) AS NUMBER_TO_INTERVAL,
CAST('07:00' AS INTERVAL HOUR(2) TO MINUTE) AS OUTSIDE_DATETIME_OPERATION;
VARCHAR_TO_INTERVAL | NUMBER_TO_INTERVAL | OUTSIDE_DATETIME_OPERATION |
--------------------+--------------------+----------------------------+
2022-10-15 23:04:56 |2017-10-15 10:30:00 | 7:00 |
Snowflake¶
SELECT
TIMESTAMP '2022-10-15 10:30:00' + INTERVAL '12 HOUR, 34 MINUTE, 56 SECOND, 780000 MICROSECOND' AS VARCHAR_TO_INTERVAL,
TIMESTAMP '2022-10-15 10:30:00' + INTERVAL '-5 YEAR' AS NUMBER_TO_INTERVAL,
'07:00' AS OUTSIDE_DATETIME_OPERATION;
VARCHAR_TO_INTERVAL | NUMBER_TO_INTERVAL | OUTSIDE_DATETIME_OPERATION |
------------------------+------------------------+----------------------------+
2022-10-15 23:04:56.780 |2017-10-15 10:30:00.000 | 07:00 |
Nicht-literale und nicht-intervallische Werte¶
Teradata¶
SELECT TIMESTAMP '2022-10-15 10:30:00' + CAST('20 ' || '10' AS INTERVAL DAY TO HOUR) AS DATETIME_OPERATION,
CAST('20 ' || '10' AS INTERVAL DAY TO HOUR) AS OUTSIDE_DATETIME_OPERATION;
DATETIME_OPERATION | OUTSIDE_DATETIME_OPERATION |
--------------------+----------------------------+
2022-11-04 20:30:00 | 20 10 |
Snowflake¶
SELECT
PUBLIC.DATETIMEINTERVALADD_UDF(TIMESTAMP '2022-10-15 10:30:00', CAST('20 ' || '10' AS VARCHAR(21)), 'DAY', '+') AS DATETIME_OPERATION,
CAST('20 ' || '10' AS VARCHAR(21)) AS OUTSIDE_DATETIME_OPERATION;
DATETIME_OPERATION | OUTSIDE_DATETIME_OPERATION |
------------------------+----------------------------+
2022-11-04 20:30:00.000 | 20 10 |
Besetzung eines Intervalls mit einem anderen Intervall¶
Teradata¶
SELECT
TIMESTAMP '2022-10-15 10:30:00' + CAST(INTERVAL '5999' MINUTE AS INTERVAL DAY TO HOUR) AS DATETIME_OPERATION,
CAST(INTERVAL '5999' MINUTE AS INTERVAL DAY TO HOUR) AS OUTSIDE_DATETIME_OPERATION;
DATETIME_OPERATION | OUTSIDE_DATETIME_OPERATION |
--------------------+----------------------------+
2022-10-19 13:30:00 | 4 03 |
Snowflake¶
SELECT
PUBLIC.DATETIMEINTERVALADD_UDF(
TIMESTAMP '2022-10-15 10:30:00', PUBLIC.INTERVALTOINTERVAL_UDF('5999', 'MINUTE', 'MINUTE', 'DAY', 'HOUR'), 'DAY', '+') AS DATETIME_OPERATION,
PUBLIC.INTERVALTOINTERVAL_UDF('5999', 'MINUTE', 'MINUTE', 'DAY', 'HOUR') AS OUTSIDE_DATETIME_OPERATION;
DATETIME_OPERATION | OUTSIDE_DATETIME_OPERATION |
------------------------+----------------------------+
2022-10-19 13:30:00.000 | 4 03 |
Bekannte Probleme¶
Keine bekannten Probleme.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
COALESCE¶
Beschreibung¶
Die Coalesce-Funktion wird verwendet, um das erste Nicht-Null-Element in einer Liste zurückzugeben. Weitere Informationen dazu finden Sie unter COALESCE.
COALESCE(element_1, element_2 [, element_3, ..., element_n])
Sowohl die COALESCE-Funktionen von Teradata als auch von Snowflake erlauben die Kombination von numerischen Parametern mit Zeichenfolgen- und Datumsparametern mit Zeitstempeln. Sie behandeln diese beiden Fälle jedoch unterschiedlich:
Numerische Parameter zusammen mit Zeichenfolgen-Parametern: Teradata konvertiert alle numerischen Parameter in Varchar, während Snowflake das Gegenteil tut
Zeitstempel zusammen mit Datumsparametern: Teradata konvertiert alle Zeitstempel in ein Datum, während Snowflake das Gegenteil tut
Um die Funktionsäquivalenz im ersten Fall zu gewährleisten, werden alle numerischen Parameter mit der Funktionto_varchar
instring
umgewandelt, wodurch das Format der Zahlen berücksichtigt wird. Im zweiten Fall werden alle Zeitstempel mit to_date
in ein Datum umgewandelt. Teradata ignoriert das Format der Zeitstempel bei der Transformation, so dass es bei der Transformation entfernt wird.
Beispielhafte Quellcode-Muster¶
Numerisch gemischt mit Zeichenfolge-Parametern¶
Teradata¶
SELECT COALESCE(125, 'hello', cast(850 as format '-999'));
COLUMN1|
-------+
125 |
Snowflake¶
SELECT
COALESCE(TO_VARCHAR(125), 'hello', TO_VARCHAR(850, '9000'));
COLUMN1|
-------+
125 |
Zeitstempel gemischt mit Datumsparametern¶
Teradata¶
SELECT COALESCE(cast(TIMESTAMP '2021-09-14 10:14:59' as format 'HH:MI:SSBDD-MM-YYYY'), current_date);
COLUMN1 |
-----------+
2021-09-14 |
Snowflake¶
SELECT
COALESCE(TO_DATE(TIMESTAMP '2021-09-14 10:14:59' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'HH:MI:SSBDD-MM-YYYY' NOT SUPPORTED. ***/!!!), CURRENT_DATE());
COLUMN1 |
-----------+
2021-09-14 |
Bekannte Probleme¶
Keine bekannten Probleme_.\_
Zugehörige EWIs¶
[SSC-EWI-TD0025](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0025): Das Ausgabeformat wird nicht unterstützt.
CURRENT_TIMESTAMP¶
Schweregrad¶
Niedrig
Beschreibung¶
Bruchteile von Sekunden werden nur angezeigt, wenn dies explizit im Sitzungsparameter TIME_OUTPUT_FORMAT festgelegt ist.
Eingabecode:¶
SELECT current_timestamp(4) at local;
Ausgabecode:¶
SELECT
current_timestamp(4);
Empfehlungen¶
Prüfen Sie, ob der Sitzungsparameter TIME_OUTPUT___FORMAT so eingestellt ist, dass Sie die gewünschte Verhaltensweise erhalten.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
DAYNUMBER_OF_MONTH¶
Beschreibung¶
Gibt die Anzahl der Tage zurück, die vom Monatsanfang bis zum angegebenen Datum verstrichen sind. Weitere Informationen finden Sie unter DAYNUMBER_OF_MONTH.
DAYNUMBER_OF_MONTH(expression [, calendar_name])
Sowohl Teradata als auch Snowflake behandeln die Funktion DAYNUMBER_OF_MONTH auf die gleiche Weise, mit einer Ausnahme:
Der ISO-Kalender: Ein ISO Monat hat 4 oder 5 vollständige Wochen. Weitere Informationen finden Sie unter Über ISO-Berechnung.
Um die funktionale Gleichwertigkeit zu gewährleisten, wird eine benutzerdefinierte Funktion (UDF) für den ISO-Kalenderfall hinzugefügt.
Beispielhafte Quellcode-Muster¶
Teradata¶
SELECT
DAYNUMBER_OF_MONTH (DATE'2022-12-22'),
DAYNUMBER_OF_MONTH (DATE'2022-12-22', NULL),
DAYNUMBER_OF_MONTH (DATE'2022-12-22', 'Teradata'),
DAYNUMBER_OF_MONTH (DATE'2022-12-22', 'COMPATIBLE');
COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
22 |22 |22 |22 |
Snowflake¶
SELECT
DAYOFMONTH(DATE'2022-12-22'),
DAYOFMONTH(DATE'2022-12-22'),
DAYOFMONTH(DATE'2022-12-22'),
DAYOFMONTH(DATE'2022-12-22');
COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
22 |22 |22 |22 |
ISO-Kalender¶
Teradata¶
SELECT DAYNUMBER_OF_MONTH (DATE'2022-12-22', 'ISO');
COLUMN1|
-------+
25 |
Snowflake¶
SELECT
PUBLIC.DAYNUMBER_OF_MONTH_UDF(DATE'2022-12-22');
COLUMN1|
-------+
25 |
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
FROM_BYTES¶
Beschreibung¶
Die Funktion FROM_BYTES kodiert eine Folge von Bits in eine Folge von Zeichen, die ihre Kodierung darstellen. Weitere Informationen finden Sie unter FROM_BYTES(Encoding).
Snowflake bietet keine Unterstützung für die Funktion FROM_BYTES. Für die häufigsten Fälle, in denen diese Funktion verwendet wird, gibt es Umgehungsmöglichkeiten.
Beispielhafte Quellcode-Muster¶
Teradata¶
SELECT
FROM_BYTES('5A1B'XB, 'base10'), --returns '23067'
FROM_BYTES('5A3F'XB, 'ASCII'), --returns 'Z\ESC '
FROM_BYTES('5A1B'XB, 'base16'); -- returns '5A1B'
COLUMN1 | COLUMN2 | COLUMN3 |
-----------+------------+---------+
23067 | Z\ESC | 5A1B |
Snowflake¶
SELECT
--returns '23067'
TO_NUMBER('5A1B', 'XXXX'),
--returns 'Z\ESC '
!!!RESOLVE EWI!!! /*** SSC-EWI-0031 - FROM_BYTES FUNCTION NOT SUPPORTED ***/!!!
FROM_BYTES(TO_BINARY('5A3F'), 'ASCII'),
TO_BINARY('5A1B', 'HEX'); -- returns '5A1B'
COLUMN1 | COLUMN2 | COLUMN3 |
-----------+------------+---------+
23067 | Z\ESC | 5A1B |
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Bekannte Probleme¶
TO_NUMBER-Formatparameter muss mit den Ziffern der Eingabezeichenfolge übereinstimmen.
Es gibt keine funktional äquivalente integrierte Funktion für FROM_BYTES bei der Kodierung nach ANSI
Zugehörige EWIs¶
[SSC-EWI-0031](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0031): FUNCTION NOT SUPPORTED
GETQUERYBANDVALUE¶
Beschreibung¶
Die Funktion GetQueryBandValue sucht einen Namensschlüssel innerhalb des Abfragebands und gibt den zugehörigen Wert zurück, falls vorhanden. Sie können damit innerhalb der Transaktion, der Sitzung, des Profils oder eines der Schlüsselwert-Paare des Abfragebands suchen.
Weitere Informationen zu dieser Funktion finden Sie unter GetQueryBandValue in der Teradata-Dokumentation.
[SYSLIB.]GetQueryBandValue([QueryBandIn,] SearchType, Name);
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Teradata¶
SET QUERY_BAND = 'hola=hello;adios=bye;' FOR SESSION;
Snowflake¶
ALTER SESSION SET QUERY_TAG = 'hola=hello;adios=bye;';
GetQueryBandValue mit dem QueryBandIn-Parameter¶
Teradata¶
SELECT
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 0, 'account') as Example1,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 1, 'account') as Example2,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 2, 'account') as Example3,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 3, 'account') as Example4,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 0, 'role') as Example5,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 1, 'role') as Example6;
+----------+----------+----------+----------+----------+----------+
| EXAMPLE1 | EXAMPLE2 | EXAMPLE3 | EXAMPLE4 | EXAMPLE5 | EXAMPLE6 |
+----------+----------+----------+----------+----------+----------+
| Mark200 | Mark200 | SaraDB | Peter3 | DbAdmin | |
+----------+----------+----------+----------+----------+----------+
Snowflake¶
SELECT
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 0, 'account') as Example1,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 1, 'account') as Example2,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 2, 'account') as Example3,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 3, 'account') as Example4,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 0, 'role') as Example5,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 1, 'role') as Example6;
+----------+----------+----------+----------+----------+----------+
| EXAMPLE1 | EXAMPLE2 | EXAMPLE3 | EXAMPLE4 | EXAMPLE5 | EXAMPLE6 |
+----------+----------+----------+----------+----------+----------+
| Mark200 | Mark200 | SaraDB | Peter3 | DbAdmin | |
+----------+----------+----------+----------+----------+----------+
GetQueryBandValue ohne QueryBandIn-Parameter¶
Teradata¶
SELECT
GETQUERYBANDVALUE(2, 'hola') as Example1,
GETQUERYBANDVALUE(2, 'adios') as Example2;
+----------+----------+
| EXAMPLE1 | EXAMPLE2 |
+----------+----------+
| hello | bye |
+----------+----------+
Snowflake¶
SELECT
GETQUERYBANDVALUE_UDF('hola') as Example1,
GETQUERYBANDVALUE_UDF('adios') as Example2;
+----------+----------+
| EXAMPLE1 | EXAMPLE2 |
+----------+----------+
| hello | bye |
+----------+----------+
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Bekannte Probleme¶
1. GetQueryBandValue ohne QueryBandIn-Parameter nur für Sitzung unterstützt
Teradata ermöglicht die Definition von Abfragebändern auf Transaktions-, Sitzungs- oder Profilebene. Wenn GetQueryBandValue ohne Angabe eines Abfragebands aufgerufen wird, prüft Teradata automatisch die Transaktions-, Sitzungs- oder Profil-Abfragebands, je nach dem Wert des Parameters SearchType.
In Snowflake sind die Abfrage-Tags, die für Sitzung, Benutzer und Konten angegeben werden können, das engste Äquivalent zu Abfragebands.
Aufgrund dieser Unterschiede berücksichtigt die Implementierung von GetQueryBandValue ohne den Parameter QueryBandIn nur das Abfrage-Tag der Sitzung und funktioniert bei anderen Sucharten möglicherweise nicht wie erwartet.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
JSON_CHECK¶
Beschreibung¶
Die Funktion JSON_CHECK überprüft eine Zeichenfolge auf eine gültige JSON.
Weitere Informationen zu Teradata JSON_CHECK finden Sie hier .
[TD_SYSFNLIB.]JSON_CHECK(string_expr);
Beispielhaftes Quellcode-Muster¶
Grundlegendes Quellcode-Muster¶
Teradata¶
SELECT JSON_CHECK('{"key": "value"}');
Snowflake Scripting¶
SELECT
IFNULL(CHECK_JSON('{"key": "value"}'), 'OK');
JSON_CHECK innerhalb CASE-Transformation¶
Teradata¶
SELECT CASE WHEN JSON_CHECK('{}') = 'OK' then 'OKK' ELSE 'NOT OK' END;
Snowflake Scripting¶
SELECT
CASE
WHEN IFNULL(CHECK_JSON('{}'), 'OK') = 'OK'
THEN 'OKK' ELSE 'NOT OK'
END;
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
JSON_EXTRACT¶
Beschreibung¶
Wie in der Dokumentation von Teradata beschrieben, verwenden diese Funktionen die JSONPath Abfrage-Syntax, um Informationen über einen Teil einer JSON-Instanz abzufragen. Die gewünschte Entität kann ein beliebiger Teil einer JSON-Instanz sein, wie z. B. ein Name/Wert-Paar, ein Objekt, ein Array, ein Arrayelement oder ein Wert.
Weitere Informationen zu Teradata JSONExtractValue, JSONExtractLargeValue und JSONExtract, finden Sie hier.
JSON_expr.JSONExtractValue(JSONPath_expr)
JSON_expr.JSONExtractLargeValue(JSONPath_expr)
JSON_expr.JSONExtract(JSONPath_expr)
Die JSON_EXTRACT_UDF ist eine Snowflake-Implementierung der JSONPath-Spezifikation, die eine modifizierte Version der ursprünglichen JavaScript-Implementierung von Stefan Goessner verwendet.
Beispielhaftes Quellcode-Muster¶
Teradata¶
SELECT
Store.JSONExtract('$..author') as AllAuthors,
Store.JSONExtractValue('$..book[2].title') as ThirdBookTitle,
Store.JSONExtractLargeValue('$..book[2].price') as ThirdBookPrice
FROM BookStores;
Snowflake Scripting¶
SELECT
JSON_EXTRACT_UDF(Store, '$..author', FALSE) as AllAuthors,
JSON_EXTRACT_UDF(Store, '$..book[2].title', TRUE) as ThirdBookTitle,
JSON_EXTRACT_UDF(Store, '$..book[2].price', TRUE) as ThirdBookPrice
FROM
BookStores;
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Bekannte Probleme¶
1. Elements inside JSONs may not retain their original order.¶
Elemente innerhalb einer JSON werden beim Einfügen in eine Tabelle nach ihren Schlüsseln geordnet. Daher können die Abfrageergebnisse abweichen. Dies hat jedoch keinen Einfluss auf die Reihenfolge der Arrays innerhalb der JSON.
Wenn zum Beispiel das Original JSON lautet:
{
"firstName":"Peter",
"lastName":"Andre",
"age":31,
"cities": ["Los Angeles", "Lima", "Buenos Aires"]
}
Verwendung der Snowflake PARSE_JSON(), die eine Eingabezeichenfolge als JSON-Dokument interpretiert und einen VARIANT-Wert erzeugt. Die eingefügte JSON wird sein:
{
"age": 31,
"cities": ["Los Angeles", "Lima", "Buenos Aires"],
"firstName": "Peter",
"lastName": "Andre"
}
Beachten Sie, dass „Alter“ jetzt das erste Element ist. Der Array der „Städte“ behält jedoch seine ursprüngliche Reihenfolge bei.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
JSON_TABLE¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Erzeugt eine Tabelle auf der Grundlage des Inhalts eines JSON-Dokuments. Siehe JSON_TABLE Dokumentation.
[TD_SYSFNLIB.]JSON_TABLE(
ON (json_documents_retrieving_expr)
USING
ROWEXPR (row_expr_literal)
COLEXPR (column_expr_literal)
[AS] correlation_name [(column_name [,...])]
)
Die Umrechnung von JSON_TABLE hat die unten dargestellten Überlegungen:
ROW_NUMBER() ist ein Äquivalent für Ordnungszahlspalten in Snowflake.
In Teradata muss die zweite Spalte von JSON_TABLE vom Typ JSON sein, da die generierten Spalten die zweite Spalte ersetzen. Aus diesem Grund geht Snowconvert davon aus, dass die Spalte den richtigen Typ hat, und verwendet ihn für die Transformation.
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Teradata¶
create table myJsonTable(
col1 integer,
col2 JSON(1000)
);
insert into myJsonTable values(1,
new json('{
"name": "Matt",
"age" : 30,
"songs" : [
{"name" : "Late night", "genre" : "Jazz"},
{"name" : "Wake up", "genre" : "Rock"},
{"name" : "Who am I", "genre" : "Rock"},
{"name" : "Raining", "genre" : "Blues"}
]
}'));
Snowflake¶
CREATE OR REPLACE TABLE myJsonTable (
col1 integer,
col2 VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO myJsonTable
VALUES (1, TO_JSON(PARSE_JSON('{
"name": "Matt",
"age" : 30,
"songs" : [
{"name" : "Late night", "genre" : "Jazz"},
{"name" : "Wake up", "genre" : "Rock"},
{"name" : "Who am I", "genre" : "Rock"},
{"name" : "Raining", "genre" : "Blues"}
]
}')));
Mustercode 1¶
Teradata¶
SELECT * FROM
JSON_TABLE(ON (SELECT COL1, COL2 FROM myJsonTable WHERE col1 = 1)
USING rowexpr('$.songs[*]')
colexpr('[ {"jsonpath" : "$.name",
"type" : "CHAR(20)"},
{"jsonpath" : "$.genre",
"type" : "VARCHAR(20)"}]')) AS JT(ID, "Song name", Genre);
ID | Song name | Genre |
---+------------+-------+
1 | Late night | Jazz |
---+------------+-------+
1 | Wake up | Rock |
---+------------+-------+
1 | Who am I | Rock |
---+------------+-------+
1 | Raining | Blues |
Snowflake¶
SELECT
* FROM
(
SELECT
COL1 AS ID,
rowexpr.value:name :: CHAR(20) AS "Song name",
rowexpr.value:genre :: VARCHAR(20) AS Genre
FROM
myJsonTable,
TABLE(FLATTEN(INPUT => COL2:songs)) rowexpr
WHERE col1 = 1
) JT;
ID | Song name | Genre |
---+------------+-------+
1 | Late night | Jazz |
---+------------+-------+
1 | Wake up | Rock |
---+------------+-------+
1 | Who am I | Rock |
---+------------+-------+
1 | Raining | Blues |
Bekannte Probleme¶
1. Der Pfad JSON in COLEXPR darf keine mehreren Sternchenzugriffe haben
Die JSON-Pfad in den Spalten darf keine mehrere Listen mit Sternchenzugriff haben, zum Beispiel: $.Names[*].FullNames[*]
. Der JSON-Pfad von ROWEXP kann dies hingegen enthalten.
2. Die JSON-Struktur, die in dem COLEXPR-Literal definiert ist, muss eine gültige JSON-Struktur sein
Wenn dies nicht der Fall ist, wird der Benutzer gewarnt, dass die JSON-Struktur fehlerhaft ist.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
NEW JSON¶
Beschreibung¶
Weist eine neue Instanz eines JSON-Datentyps zu. Weitere Informationen finden Sie unter NEW JSON-Konstruktor-Ausdruck Expression.
NEW JSON ( [ JSON_string_spec | JSON_binary_data_spec ] )
JSON_string_spec := JSON_String_literal [, { LATIN | UNICODE | BSON | UBJSON } ]
JSON_binary_data_spec := JSON_binary_literal [, { BSON | UBJSON } ]
Der zweite Parameter der Funktion NEW JSON wird von SnowConvert immer weggelassen, da Snowflake nur mit UTF-8 funktioniert.
Beispielhafte Quellcode-Muster¶
NEW JSON mit Zeichenfolgen-Daten¶
Teradata¶
SELECT NEW JSON ('{"name" : "cameron", "age" : 24}'),
NEW JSON ('{"name" : "cameron", "age" : 24}', LATIN);
COLUMN1 | COLUMN2 |
----------------------------+-----------------------------+
{"age":24,"name":"cameron"} | {"age":24,"name":"cameron"} |
Snowflake¶
SELECT
TO_JSON(PARSE_JSON('{"name" : "cameron", "age" : 24}')),
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'LATIN' NOT SUPPORTED ***/!!!
TO_JSON(PARSE_JSON('{"name" : "cameron", "age" : 24}'));
COLUMN1 | COLUMN2 |
----------------------------+-----------------------------+
{"age":24,"name":"cameron"} | {"age":24,"name":"cameron"} |
Bekannte Probleme¶
1. Der zweite Parameter wird nicht unterstützt
Der zweite Parameter der Funktion, mit dem das Format der resultierenden JSON angegeben wird, wird nicht unterstützt, da Snowflake nur UTF-8 unterstützt, was bei einigen Verwendungen der Funktion zu Funktionsunterschieden führen kann.
2. JSON mit BINARY-Daten wird nicht unterstützt
Snowflake unterstützt das Parsen von Binärdaten zur Erstellung eines JSON-Wertes nicht. Der Benutzer wird gewarnt, wenn SnowConvert ein NEW JSON mit Binärdaten findet.
Zugehörige EWIs¶
[SSC-EWI-TD0039](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0039): Das Eingabeformat wird nicht unterstützt.
NVP¶
Beschreibung¶
Extrahiert den Wert des Schlüsselwert-Paares, bei dem der Schlüssel mit dem n-ten Vorkommen des angegebenen Suchnamens übereinstimmt. Siehe NVP.
[TD_SYSFNLIB.] NVP (
in_string,
name_to_search
[, name_delimiters ]
[, value_delimiters ]
[, occurrence ]
)
Beispielhafte Quellcode-Muster¶
NVP-Grundfall¶
Teradata¶
SELECT
NVP('entree=-orange chicken&entree+.honey salmon', 'entree', '&', '=- +.', 1),
NVP('Hello=bye|name=Lucas|Hello=world!', 'Hello', '|', '=', 2),
NVP('Player=Mario$Game&Tenis%Player/Susana$Game=Chess', 'Player', '% $', '= & /', 2);
COLUMN1 | COLUMN2 | COLUMN3 |
---------------+---------+---------+
orange chicken | world! | Susana |
Snowflake¶
SELECT
PUBLIC.NVP_UDF('entree=-orange chicken&entree+.honey salmon', 'entree', '&', '=- +.', 1),
PUBLIC.NVP_UDF('Hello=bye|name=Lucas|Hello=world!', 'Hello', '|', '=', 2),
PUBLIC.NVP_UDF('Player=Mario$Game&Tenis%Player/Susana$Game=Chess', 'Player', '% $', '= & /', 2);
COLUMN1 | COLUMN2 | COLUMN3 |
---------------+---------+---------+
orange chicken | world! | Susana |
NVP wobei optionale Parameter ignoriert werden¶
Teradata¶
SELECT
NVP('City=Los Angeles&Color=Green&Color=Blue&City=San Jose', 'Color'),
NVP('City=Los Angeles&Color=Green&Color=Blue&City=San Jose', 'Color', 2),
NVP('City=Los Angeles#Color=Green#Color=Blue#City=San Jose', 'City', '#', '=');
COLUMN1 | COLUMN2 | COLUMN3 |
--------+---------+-------------+
Green | Blue | Los Angeles |
Snowflake¶
SELECT
PUBLIC.NVP_UDF('City=Los Angeles&Color=Green&Color=Blue&City=San Jose', 'Color', '&', '=', 1),
PUBLIC.NVP_UDF('City=Los Angeles&Color=Green&Color=Blue&City=San Jose', 'Color', '&', '=', 2),
PUBLIC.NVP_UDF('City=Los Angeles#Color=Green#Color=Blue#City=San Jose', 'City', '#', '=', 1);
COLUMN1 | COLUMN2 | COLUMN3 |
--------+---------+-------------+
Green | Blue | Los Angeles |
NVP mit Leerzeichen als Trennzeichen¶
Teradata¶
SELECT
NVP('store = whole foods&&store: ?Bristol farms','store', '&&', '\ =\ :\ ?', 2),
NVP('Hello = bye|name = Lucas|Hello = world!', 'Hello', '|', '\ =\ ', 2);
COLUMN1 | COLUMN2 |
--------------+---------+
Bristol farms | world! |
Snowflake¶
SELECT
PUBLIC.NVP_UDF('store = whole foods&&store: ?Bristol farms', 'store', '&&', '\\ =\\ :\\ ?', 2),
PUBLIC.NVP_UDF('Hello = bye|name = Lucas|Hello = world!', 'Hello', '|', '\\ =\\ ', 2);
COLUMN1 | COLUMN2 |
--------------+---------+
Bristol farms | world! |
NVP mit nicht-literalen Trennzeichen¶
Teradata¶
SELECT NVP('store = whole foods&&store: ?Bristol farms','store', '&&', valueDelimiter, 2);
Snowflake¶
SELECT
PUBLIC.NVP_UDF('store = whole foods&&store: ?Bristol farms', 'store', '&&', valueDelimiter, 2) /*** SSC-FDM-TD0008 - WHEN NVP_UDF FOURTH PARAMETER IS NON-LITERAL AND IT CONTAINS A BACKSLASH, THAT BACKSLASH NEEDS TO BE ESCAPED ***/;
Bekannte Probleme¶
1. Bei Trennzeichen mit Leerzeichen () muss der Backslash in Snowflake weggelassen werden
In Teradata werden Trennzeichen, die ein Leerzeichen enthalten, mit „\“ angegeben (siehe NVP mit Leerzeichen als Trennzeichen), wie in den Beispielen gezeigt. In Teradata ist es nicht notwendig, den Backslash zu entschlüsseln, in Snowflake ist es jedoch notwendig. Das Escapen der Backslashes im Trennzeichen kann automatisch von SnowConvert durchgeführt werden, aber nur, wenn die Trennzeichenwerte literale Zeichenfolgen sind. Andernfalls wird der Benutzer gewarnt, dass die Backslashes nicht in Escape-Zeichen umgewandelt werden konnten, was zu unterschiedlichen Ergebnissen in Snowflake führen kann.
Zugehörige EWIs¶
[SSC-FDM-TD0008](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/teradataFDM. md#ssc-fdm-td0008): Bei nicht-literalen Trennzeichen mit Leerzeichen muss der Backslash in Snowflake weggelassen werden.
OVERLAPS¶
Beschreibung¶
Laut der Dokumentation von Teradata vergleicht der Operator OVERLAPS zwei oder mehr Zeitraumausdrücke. Wenn sie sich überschneiden, gibt er „true“ zurück.
Weitere Informationen zu OVERLAPS in Teradata finden Sie hier.
period_expression
OVERLAPS
period_expression
Die PERIOD_OVERLAPS_UDF ist eine Snowflake-Implementierung des OVERLAPS-Operators in Teradata.
Beispielhaftes Quellcode-Muster¶
Teradata¶
SELECT
PERIOD(DATE '2009-01-01', DATE '2010-09-24')
OVERLAPS
PERIOD(DATE '2009-02-01', DATE '2009-06-24');
Snowflake Scripting¶
SELECT
PUBLIC.PERIOD_OVERLAPS_UDF(ARRAY_CONSTRUCT(PUBLIC.PERIOD_UDF(DATE '2009-01-01', DATE '2010-09-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!, PUBLIC.PERIOD_UDF(DATE '2009-02-01', DATE '2009-06-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!)) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!;
Bekannte Probleme¶
1. Unsupported Period Expressions¶
Die Ausdrücke PERIOD(TIME WITH TIME ZONE) und PERIOD(TIMESTAMP WITH TIME ZONE) werden noch nicht unterstützt.
Zugehörige EWIs¶
[SSC-EWI-TD0053](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0053): Snowflake unterstützt den Datentyp Zeitraum nicht, alle Zeiträume werden stattdessen als Varchar behandelt
P_INTERSECT¶
Beschreibung¶
Laut der Dokumentation von Teradata vergleicht der Operator P_INTERSECT zwei oder mehr Zeitraumausdrücke. Wenn sie sich überschneiden, wird der gemeinsame Teil der Zeitraumausdrücke zurückgegeben.
Weitere Informationen zu P_INTERSECT in Teradata finden Sie unter [hier] (https://docs.teradata.com/r/kmuOwjp1zEYg98JsB8fu_A/iW6iefgeyOypFOMY2qGG_A).
period_expression
P_INTERSECT
period_expression
Die PERIOD_INTERSECT_UDF ist eine Snowflake-Implementierung des Operators P_INTERSECT in Teradata.
Beispielhaftes Quellcode-Muster¶
Teradata¶
SELECT
PERIOD(DATE '2009-01-01', DATE '2010-09-24')
P_INTERSECT
PERIOD(DATE '2009-02-01', DATE '2009-06-24');
Snowflake Scripting¶
SELECT
PUBLIC.PERIOD_INTERSECT_UDF(ARRAY_CONSTRUCT(PUBLIC.PERIOD_UDF(DATE '2009-01-01', DATE '2010-09-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!, PUBLIC.PERIOD_UDF(DATE '2009-02-01', DATE '2009-06-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!)) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!;
Bekannte Probleme¶
1. Unsupported Period Expressions¶
Die Ausdrücke PERIOD(TIME WITH TIME ZONE) und PERIOD(TIMESTAMP WITH TIME ZONE) werden noch nicht unterstützt.
Zugehörige EWIs¶
[SSC-EWI-TD0053](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0053): Snowflake unterstützt den Datentyp Zeitraum nicht, alle Zeiträume werden stattdessen als Varchar behandelt
PIVOT¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Die Pivot-Funktion wird verwendet, um Zeilen einer Tabelle in Spalten umzuwandeln. Weitere Informationen finden Sie in der PIVOT Teradata-Dokumentation.
PIVOT ( pivot_spec )
[ WITH with_spec [,...] ]
[AS] derived_table_name [ ( cname [,...] ) ]
pivot_spec := aggr_fn_spec [,...] FOR for_spec
aggr_fn_spec := aggr_fn ( cname ) [ [AS] pvt_aggr_alias ]
for_spec := { cname IN ( expr_spec_1 [,...] ) |
( cname [,...] ) IN ( expr_spec_2 [,...] ) |
cname IN ( subquery )
}
expr_spec_1 := expr [ [AS] expr_alias_name ]
expr_spec_2 := ( expr [,...] ) [ [AS] expr_alias_name ]
with_spec := aggr_fn ( { cname [,...] | * } ) [AS] aggr_alias
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Teradata¶
CREATE TABLE star1(
country VARCHAR(20),
state VARCHAR(10),
yr INTEGER,
qtr VARCHAR(3),
sales INTEGER,
cogs INTEGER
);
insert into star1 values ('USA', 'CA', 2001, 'Q1', 30, 15);
insert into star1 values ('Canada', 'ON', 2001, 'Q2', 10, 0);
insert into star1 values ('Canada', 'BC', 2001, 'Q3', 10, 0);
insert into star1 values ('USA', 'NY', 2001, 'Q1', 45, 25);
insert into star1 values ('USA', 'CA', 2001, 'Q2', 50, 20);
Snowflake¶
CREATE OR REPLACE TABLE star1 (
country VARCHAR(20),
state VARCHAR(10),
yr INTEGER,
qtr VARCHAR(3),
sales INTEGER,
cogs INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO star1
VALUES ('USA', 'CA', 2001, 'Q1', 30, 15);
INSERT INTO star1
VALUES ('Canada', 'ON', 2001, 'Q2', 10, 0);
INSERT INTO star1
VALUES ('Canada', 'BC', 2001, 'Q3', 10, 0);
INSERT INTO star1
VALUES ('USA', 'NY', 2001, 'Q1', 45, 25);
INSERT INTO star1
VALUES ('USA', 'CA', 2001, 'Q2', 50, 20);
Grundlegende PIVOT-Transformation¶
Teradata¶
SELECT *
FROM star1 PIVOT (
SUM(sales) FOR qtr
IN ('Q1',
'Q2',
'Q3')
)Tmp;
Country | State | yr | cogs | 'Q1' | 'Q2' | 'Q3' |
--------+-------+------+------+------+------+------+
Canada | BC | 2001 | 0 | null | null | 10 |
--------+-------+------+------+------+------+------+
USA | NY | 2001 | 25 | 45 | null | null |
--------+-------+------+------+------+------+------+
Canada | ON | 2001 | 0 | null | 10 | null |
--------+-------+------+------+------+------+------+
USA | CA | 2001 | 20 | null | 50 | null |
--------+-------+------+------+------+------+------+
USA | CA | 2001 | 15 | 30 | null | null |
--------+-------+------+------+------+------+------+
Snowflake¶
SELECT
*
FROM
star1 PIVOT(
SUM(sales) FOR qtr IN ('Q1',
'Q2',
'Q3'))Tmp;
Country | State | yr | cogs | 'Q1' | 'Q2' | 'Q3' |
--------+-------+------+------+------+------+------+
Canada | BC | 2001 | 0 | null | null | 10 |
--------+-------+------+------+------+------+------+
USA | NY | 2001 | 25 | 45 | null | null |
--------+-------+------+------+------+------+------+
Canada | ON | 2001 | 0 | null | 10 | null |
--------+-------+------+------+------+------+------+
USA | CA | 2001 | 20 | null | 50 | null |
--------+-------+------+------+------+------+------+
USA | CA | 2001 | 15 | 30 | null | null |
--------+-------+------+------+------+------+------+
PIVOT mit Transformation von Aliasen¶
Teradata¶
SELECT *
FROM star1 PIVOT (
SUM(sales) as ss1 FOR qtr
IN ('Q1' AS Quarter1,
'Q2' AS Quarter2,
'Q3' AS Quarter3)
)Tmp;
Country | State | yr | cogs | Quarter1_ss1 | Quarter2_ss1 | Quarter3_ss1 |
--------+-------+------+------+--------------+--------------+--------------+
Canada | BC | 2001 | 0 | null | null | 10 |
--------+-------+------+------+--------------+--------------+--------------+
USA | NY | 2001 | 25 | 45 | null | null |
--------+-------+------+------+--------------+--------------+--------------+
Canada | ON | 2001 | 0 | null | 10 | null |
--------+-------+------+------+--------------+--------------+--------------+
USA | CA | 2001 | 20 | null | 50 | null |
--------+-------+------+------+--------------+--------------+--------------+
USA | CA | 2001 | 15 | 30 | null | null |
--------+-------+------+------+--------------+--------------+--------------+
Snowflake¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/!!!
star1 PIVOT(
SUM(sales) FOR qtr IN (
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/!!!
'Q1',
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/!!!
'Q2',
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/!!!
'Q3'))Tmp;
Country | State | yr | cogs | Quarter1_ss1 | Quarter2_ss1 | Quarter3_ss1 |
--------+-------+------+------+--------------+--------------+--------------+
Canada | BC | 2001 | 0 | null | null | 10 |
--------+-------+------+------+--------------+--------------+--------------+
USA | NY | 2001 | 25 | 45 | null | null |
--------+-------+------+------+--------------+--------------+--------------+
Canada | ON | 2001 | 0 | null | 10 | null |
--------+-------+------+------+--------------+--------------+--------------+
USA | CA | 2001 | 20 | null | 50 | null |
--------+-------+------+------+--------------+--------------+--------------+
USA | CA | 2001 | 15 | 30 | null | null |
--------+-------+------+------+--------------+--------------+--------------+
Bekannte Probleme¶
1. WITH-Klausel nicht unterstützt
Die Verwendung der WITH-Klausel wird derzeit nicht unterstützt.
2. Pivot über mehrere Pivot-Spalten nicht unterstützt
Snowconvert wandelt die Funktion PIVOT in die Funktion PIVOT in Snowflake um, die nur die Anwendung der Funktion auf eine einzelne Spalte unterstützt.
3. Pivot mit mehreren Aggregatfunktionen nicht unterstützt
Die Funktion PIVOT in Snowflake unterstützt nur die Anwendung einer Aggregatfunktion auf die Daten.
4. Unterabfrage in der IN-Klausel nicht unterstützt
Die IN-Klausel der Snowflake PIVOT-Funktion akzeptiert keine Unterabfragen.
5. Aliase werden nur unterstützt, wenn alle IN-Klausel-Elemente sie haben und eine Tabellenspezifikation vorhanden ist
Damit die Spaltennamen mit Aliasen gleichwertig sind, verlangt SnowConvert, dass für alle in der IN-Klausel angegebenen Werte ein Alias angegeben ist und die Tabellenspezifikation im Eingabecode vorhanden ist. Dies ist notwendig, damit SnowConvert die Aliasliste für die resultierende Tabelle erfolgreich erstellen kann.
Zugehörige EWIs¶
[SSC-EWI-0015](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0015): Das Eingabeformular für PIVOT- und UNPIVOT-Anweisungen wird nicht unterstützt
RANK¶
Beschreibung¶
RANK sortiert ein Resultset und identifiziert den numerischen Rang jeder Zeile im Ergebnis. Das einzige Argument für RANK ist die Sortierspalte bzw. die Sortierspalten, und die Funktion gibt eine ganze Zahl zurück, die den Rang jeder Zeile im Ergebnis darstellt. (RANK in Teradata)
Teradata-Syntax¶
RANK ( sort_expression [ ASC | DESC ] [,...] )
Snowflake-Syntax¶
RANK() OVER
(
[ PARTITION BY <expr1> ]
ORDER BY <expr2> [ { ASC | DESC } ]
[ <window_frame> ]
)
Beispielhaftes Quellcode-Muster¶
Datenkonfiguration¶
Teradata¶
CREATE TABLE Sales (
Product VARCHAR(255),
Sales INT
);
INSERT INTO Sales (Product, Sales) VALUES ('A', 100);
INSERT INTO Sales (Product, Sales) VALUES ('B', 150);
INSERT INTO Sales (Product, Sales) VALUES ('C', 200);
INSERT INTO Sales (Product, Sales) VALUES ('D', 150);
INSERT INTO Sales (Product, Sales) VALUES ('E', 120);
INSERT INTO Sales (Product, Sales) VALUES ('F', NULL);
Snowflake¶
CREATE OR REPLACE TABLE Sales (
Product VARCHAR(255),
Sales INT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO Sales (Product, Sales)
VALUES ('A', 100);
INSERT INTO Sales (Product, Sales)
VALUES ('B', 150);
INSERT INTO Sales (Product, Sales)
VALUES ('C', 200);
INSERT INTO Sales (Product, Sales)
VALUES ('D', 150);
INSERT INTO Sales (Product, Sales)
VALUES ('E', 120);
INSERT INTO Sales (Product, Sales)
VALUES ('F', NULL);
RANK() mit der Reihenfolge ASC, DESC und DEFAULT¶
Teradata¶
Warnung
Beachten Sie, dass der Standardwert von Teradata für die Bestellung beim Aufruf von RANK() DESC ist. Die Standardeinstellung in Snowflake ist jedoch ASC. So wird DESC bei der Umwandlung von RANK() hinzugefügt, wenn keine Reihenfolge angegeben ist.
SELECT
Sales,
RANK(Sales ASC) AS SalesAsc,
RANK(Sales DESC) AS SalesDesc,
RANK(Sales) AS SalesDefault
FROM
Sales;
SALES | SALESASC | SALESDESC | SALESDEFAULT |
---|---|---|---|
NULL | 6 | 6 | 6 |
200 | 5 | 1 | 1 |
150 | 3 | 2 | 2 |
150 | 3 | 2 | 2 |
120 | 2 | 4 | 4 |
100 | 1 | 5 | 5 |
Snowflake¶
SELECT
Sales,
RANK() OVER (
ORDER BY
Sales ASC) AS SalesAsc,
RANK() OVER (
ORDER BY
Sales DESC NULLS LAST) AS SalesDesc,
RANK() OVER (
ORDER BY
Sales DESC NULLS LAST) AS SalesDefault
FROM
Sales;
SALES | SALESASC | SALESDESC | SALESDEFAULT |
---|---|---|---|
NULL | 6 | 6 | 6 |
200 | 5 | 1 | 1 |
150 | 3 | 2 | 2 |
150 | 3 | 2 | 2 |
120 | 2 | 4 | 4 |
100 | 1 | 5 | 5 |
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
Regex-Funktionen¶
Beschreibung¶
Sowohl Teradata als auch Snowflake bieten Unterstützung für Funktionen, die reguläre Ausdrücke auf Varchar-Eingaben anwenden. Weitere Einzelheiten finden Sie in der Teradata-Dokumentation und der Snowflake-Dokumentation.
REGEXP_SUBSTR(source. regexp [, position, occurrence, match])
REGEXP_REPLACE(source. regexp [, replace_string, position, occurrence, match])
REGEXP_INSTR(source. regexp [, position, occurrence, return_option, match])
REGEXP_SIMILAR(source. regexp [, match])
REGEXP_SPLIT_TO_TABLE(inKey. source. regexp, match)
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Teradata¶
CREATE TABLE regexpTable
(
col1 CHAR(35)
);
INSERT INTO regexpTable VALUES('hola');
Snowflake¶
CREATE OR REPLACE TABLE regexpTable
(
col1 CHAR(35)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO regexpTable
VALUES ('hola');
Beispiel einer Regex-Transformation¶
Teradata¶
SELECT
REGEXP_REPLACE(col1,'.*(h(i|o))','ha', 1, 0, 'x'),
REGEXP_SUBSTR(COL1,'.*(h(i|o))', 2, 1, 'x'),
REGEXP_INSTR(COL1,'.*(h(i|o))',1, 1, 0, 'x'),
REGEXP_SIMILAR(COL1,'.*(h(i|o))', 'xl')
FROM regexpTable;
COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
hala |null |1 |0 |
Snowflake¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "regexpTable" **
SELECT
REGEXP_REPLACE(col1, '.*(h(i|o))', 'ha', 1, 0),
REGEXP_SUBSTR(COL1, '.*(h(i|o))', 2, 1),
REGEXP_INSTR(COL1, '.*(h(i|o))', 1, 1, 0),
--** SSC-FDM-TD0016 - VALUE 'l' FOR PARAMETER 'match_arg' IS NOT SUPPORTED IN SNOWFLAKE **
REGEXP_LIKE(COL1, '.*(h(i|o))')
FROM
regexpTable;
COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
hala |null |1 |FALSE |
Bekannte Probleme¶
1. Snowflake unterstützt nur POSIX-reguläre Ausdrücke
Der Benutzer wird gewarnt, wenn SnowConvert einen regulären Ausdruck findet, der nicht-POSIX ist.
2. Die Teradata-Option „match_arg“ ‚l‘ wird in Snowflake nicht unterstützt
Die Option ‚l‘ hat kein Gegenstück in Snowflake und der Benutzer wird gewarnt, wenn SnowConvert sie findet.
3. Feste Größe des Datentyps CHAR kann zu einer unterschiedlichen Verhaltensweisen führen
Einige Regex-Funktionen in Teradata versuchen, die gesamte Spalte des Datentyps CHAR in einer Tabelle abzugleichen, auch wenn einige der Zeichen in der Spalte leer geblieben sind, weil eine kleinere Zeichenfolge eingefügt wurde. In Snowflake ist dies nicht der Fall, da der Datentyp CHAR eine variable Größe hat.
4. REGEXP_SPLIT\_TO\_TABLE nicht unterstützt
Diese Funktion wird derzeit nicht von Snowflake unterstützt.
Zugehörige EWIs¶
[SSC-FDM-0007](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0007): Element mit fehlenden Abhängigkeiten.
[SSC-FDM-TD0016](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/teradataFDM. md#ssc-fdm-td0016): Der Wert ‚l‘ für den Parameter ‚match_arg‘ wird in Snowflake nicht unterstützt.
STRTOK_SPLIT_TO_TABLE¶
Beschreibung¶
Zerlegt eine Zeichenfolge in eine Tabelle unter Verwendung der angegebenen Trennzeichen. Weitere Informationen finden Sie unter STRTOK_SPLIT_TO_TABLE.
[TD_SYSFNLIB.] STRTOK_SPLIT_TO_TABLE ( inkey, instring, delimiters )
RETURNS ( outkey, tokennum, token )
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Teradata¶
CREATE TABLE strtokTable
(
col1 INTEGER,
col2 VARCHAR(100)
);
INSERT INTO strtokTable VALUES(4, 'hello-world-split-me');
INSERT INTO strtokTable VALUES(1, 'string$split$by$dollars');
Snowflake¶
CREATE OR REPLACE TABLE strtokTable
(
col1 INTEGER,
col2 VARCHAR(100)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO strtokTable
VALUES (4, 'hello-world-split-me');
INSERT INTO strtokTable
VALUES (1, 'string$split$by$dollars');
STRTOK_SPLIT_TO_TABLE-Transformation¶
Teradata¶
SELECT outkey, tokennum, token FROM table(STRTOK_SPLIT_TO_TABLE(strtokTable.col1, strtokTable.col2, '-$')
RETURNS (outkey INTEGER, tokennum INTEGER, token VARCHAR(100))) AS testTable
ORDER BY outkey, tokennum;
outkey |tokennum | token |
-------+---------+--------+
1 |1 |string |
-------+---------+--------+
1 |2 |split |
-------+---------+--------+
1 |3 |by |
-------+---------+--------+
1 |4 |dollars |
-------+---------+--------+
4 |1 |hello |
-------+---------+--------+
4 |2 |world |
-------+---------+--------+
4 |3 |split |
-------+---------+--------+
4 |4 |me |
Snowflake¶
SELECT
CAST(strtokTable.col1 AS INTEGER) AS outkey,
CAST(INDEX AS INTEGER) AS tokennum,
CAST(VALUE AS VARCHAR) AS token
FROM
strtokTable,
table(STRTOK_SPLIT_TO_TABLE(strtokTable.col2, '-$')) AS testTable
ORDER BY outkey, tokennum;
outkey |tokennum | token |
-------+---------+--------+
1 |1 |string |
-------+---------+--------+
1 |2 |split |
-------+---------+--------+
1 |3 |by |
-------+---------+--------+
1 |4 |dollars |
-------+---------+--------+
4 |1 |hello |
-------+---------+--------+
4 |2 |world |
-------+---------+--------+
4 |3 |split |
-------+---------+--------+
4 |4 |me |
Bekannte Probleme¶
Keine bekannten Probleme.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
SUBSTRING¶
Beschreibung¶
Extrahiert eine Teilzeichenfolge aus einer gegebenen Eingabezeichenfolge. Weitere Informationen finden Sie unter SUBSTRING/SUBSTR.
SUBSTRING(string_expr FROM n1 [FOR n2])
SUBSTR(string_expr, n1, [, n2])
Wenn der Wert, mit dem die Teilzeichenkette (n1) beginnen soll, kleiner als eins ist, wird stattdessen SUBSTR_UDF eingefügt.
Beispielhafte Quellcode-Muster¶
SUBSTRING-Transformation¶
Teradata¶
SELECT SUBSTR('Hello World!', 2, 6),
SUBSTR('Hello World!', -2, 6),
SUBSTRING('Hello World!' FROM 2 FOR 6),
SUBSTRING('Hello World!' FROM -2 FOR 6);
COLUMN1 |COLUMN2 |COLUMN3 | COLUMN4 |
--------+--------+--------+---------+
ello W |Hel |ello W |Hel |
Snowflake¶
SELECT
SUBSTR('Hello World!', 2, 6),
PUBLIC.SUBSTR_UDF('Hello World!', -2, 6),
SUBSTRING('Hello World!', 2, 6),
PUBLIC.SUBSTR_UDF('Hello World!', -2, 6);
COLUMN1 |COLUMN2 |COLUMN3 | COLUMN4 |
--------+--------+--------+---------+
ello W |Hel |ello W |Hel |
Zugehörige EWIs¶
Keine zugehörigen EWIs.
TD_UNPIVOT¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
TD_UNPIVOT
in Teradata kann mehrere Spalten auf einmal aufheben, während Snowflake UNPIVOT
nur eine einzelne Spalte aufheben kann. Die Funktion Unpivot wird verwendet, um Spalten der angegebenen Tabelle in Zeilen umzuwandeln. Weitere Informationen finden Sie unter TD_UNPIVOT.
[TD_SYSFNLIB.] TD_UNPIVOT (
ON { tableName | ( query_expression ) }
USING VALUE_COLUMNS ( 'value_columns_value' [,...] )
UNPIVOT_COLUMN ( 'unpivot_column_value' )
COLUMN_LIST ( 'column_list_value' [,...] )
[ COLUMN_ALIAS_LIST ( 'column_alias_list_value' [,...] )
INCLUDE_NULLS ( { 'No' | 'Yes' } )
]
)
Die folgende Transformation ist in der Lage, eine SQL Abfrage in Snowflake zu generieren, die mehrere Spalten gleichzeitig entpivotiert, so wie es auch in Teradata funktioniert.
Beispielhafte Quellcode-Muster¶
Titel Datenkonfiguration¶
Teradata¶
CREATE TABLE superunpivottest (
myKey INTEGER NOT NULL PRIMARY KEY,
firstSemesterIncome DECIMAL(10,2),
secondSemesterIncome DECIMAL(10,2),
firstSemesterExpenses DECIMAL(10,2),
secondSemesterExpenses DECIMAL(10,2)
);
INSERT INTO superUnpivottest VALUES (2020, 15440, 25430.57, 10322.15, 12355.36);
INSERT INTO superUnpivottest VALUES (2018, 18325.25, 25220.65, 15560.45, 15680.33);
INSERT INTO superUnpivottest VALUES (2019, 23855.75, 34220.22, 14582.55, 24122);
Snowflake¶
CREATE OR REPLACE TABLE superunpivottest (
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"}}'
;
INSERT INTO superUnpivottest
VALUES (2020, 15440, 25430.57, 10322.15, 12355.36);
INSERT INTO superUnpivottest
VALUES (2018, 18325.25, 25220.65, 15560.45, 15680.33);
INSERT INTO superUnpivottest
VALUES (2019, 23855.75, 34220.22, 14582.55, 24122);
TD_UNPIVOT-Transformation¶
Teradata¶
SELECT * FROM
TD_UNPIVOT(
ON superunpivottest
USING
VALUE_COLUMNS('Income', 'Expenses')
UNPIVOT_COLUMN('Semester')
COLUMN_LIST('firstSemesterIncome, firstSemesterExpenses', 'secondSemesterIncome, secondSemesterExpenses')
COLUMN_ALIAS_LIST('First', 'Second')
)X ORDER BY mykey, Semester;
myKey |Semester |Income | Expenses |
------+---------+---------+----------+
2018 |First |18325.25 |15560.45 |
------+---------+---------+----------+
2018 |Second |25220.65 |15680.33 |
------+---------+---------+----------+
2019 |First |23855.75 |14582.55 |
------+---------+---------+----------+
2019 |Second |34220.22 |24122.00 |
------+---------+---------+----------+
2020 |First |15440.00 |10322.15 |
------+---------+---------+----------+
2020 |Second |25430.57 |12355.36 |
Snowflake¶
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('FIRSTSEMESTERINCOME', 'First', 'FIRSTSEMESTEREXPENSES', 'First', 'SECONDSEMESTERINCOME', 'Second', 'SECONDSEMESTEREXPENSES', 'Second'), Semester), '"') AS Semester,
Income,
Expenses
FROM
superunpivottest 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, Semester;
myKey |Semester |Income | Expenses |
------+---------+---------+----------+
2018 |First |18325.25 |15560.45 |
------+---------+---------+----------+
2018 |Second |25220.65 |15680.33 |
------+---------+---------+----------+
2019 |First |23855.75 |14582.55 |
------+---------+---------+----------+
2019 |Second |34220.22 |24122.00 |
------+---------+---------+----------+
2020 |First |15440.00 |10322.15 |
------+---------+---------+----------+
2020 |Second |25430.57 |12355.36 |
Bekannte Probleme¶
TD_UNPIVOT mit INCLUDE_NULLS-Klausel auf YES gesetzt wird nicht unterstützt
Die Snowflake UNPIVOT-Funktion, die in der Transformation verwendet wird, ignoriert immer Nullwerte, und der Benutzer wird gewarnt, dass die INCLUDE_NULLS-Klausel nicht unterstützt wird, wenn sie auf YES gesetzt ist.
Die Tabelleninformationen werden benötigt, um die Funktion korrekt zu transformieren
SnowConvert benötigt die Namen der Spalten, die in der Funktion TD_UNPIVOT verwendet werden. Wenn der Benutzer die Spaltenliste nicht in den query_expression der Funktion aufnimmt, sondern den Namen der Tabelle angibt, die entpivotet werden soll, wird versucht, die Spaltennamen aus der Tabellendefinition zu ermitteln. Wenn die Namen nicht gefunden werden können, wird der Benutzer gewarnt, dass bei der Abfrage möglicherweise Spalten im Ergebnis verloren gehen.
Zugehörige EWIs¶
[SSC-EWI-TD0061](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0061): TD\UNPIVOT Transformation erfordert Spalteninformationen, die nicht gefunden werden konnten, Spalten fehlen im Ergebnis.
TO_CHAR¶
Beschreibung¶
Die Funktion TO_CHAR wandelt einen DateTime- oder numerischen Wert in eine Zeichenfolge um. Weitere Informationen finden Sie unter TO_CHAR(Numeric) und TO_CHAR(DateTime).
-- Numeric version
[TD_SYSFNLIB.]TO_CHAR(numeric_expr [, format_arg [, nls_param]])
-- DateTime version
[TD_SYSFNLIB.]TO_CHAR(dateTime_expr [, format_arg])
Sowohl Snowflake als auch Teradata haben ihre eigene Version der Funktion TO_CHAR. Teradata unterstützt jedoch eine Vielzahl von Formaten, die von Snowflake nicht nativ unterstützt werden. Um diese Formatelemente zu unterstützen, verwendet SnowConvert die in Snowflake integrierten Funktionen und die benutzerdefinierte Funktion UDFs, um einen Verkettungsausdruck zu erzeugen, der dieselbe Zeichenfolge wie die ursprüngliche Funktion TO\_CHAR in Teradata erzeugt.
Beispielhafte Quellcode-Muster¶
TO_CHAR(DateTime)-Transformation¶
Teradata¶
SELECT
TO_CHAR(date '2012-12-23'),
TO_CHAR(date '2012-12-23', 'DS'),
TO_CHAR(date '2012-12-23', 'DAY DD, MON YY');
COLUMN1 | COLUMN2 | COLUMN3 |
-----------+------------+-------------------+
2012/12/23 | 12/23/2012 | SUNDAY 23, DEC 12 |
Snowflake¶
SELECT
TO_CHAR(date '2012-12-23') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/,
TO_CHAR(date '2012-12-23', 'MM/DD/YYYY') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/,
PUBLIC.DAYNAME_LONG_UDF(date '2012-12-23', 'uppercase') || TO_CHAR(date '2012-12-23', ' DD, ') || PUBLIC.MONTH_SHORT_UDF(date '2012-12-23', 'uppercase') || TO_CHAR(date '2012-12-23', ' YY') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/;
COLUMN1 | COLUMN2 | COLUMN3 |
-----------+------------+-------------------+
2012/12/23 | 12/23/2012 | SUNDAY 23, DEC 12 |
TO_CHAR(Numeric)-Transformation¶
Teradata¶
SELECT
TO_CHAR(1255.495),
TO_CHAR(1255.495, '9.9EEEE'),
TO_CHAR(1255.495, 'SC9999.9999', 'nls_iso_currency = ''EUR''');
COLUMN1 | COLUMN2 | COLUMN3 |
---------+---------+---------------+
1255.495 | 1.3E+03 | +EUR1255.4950 |
Snowflake¶
SELECT
TO_CHAR(1255.495) /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/,
TO_CHAR(1255.495, '9.0EEEE') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/,
PUBLIC.INSERT_CURRENCY_UDF(TO_CHAR(1255.495, 'S9999.0000'), 2, 'EUR') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/;
COLUMN1 | COLUMN2 | COLUMN3 |
---------+---------+---------------+
1255.495 | 1.3E+03 | +EUR1255.4950 |
Bekannte Probleme¶
1. Formate mit unterschiedlichen oder nicht unterstützten Verhaltensweisen
Teradata bietet eine umfangreiche Liste von Formatelementen, die nach der Transformation der Funktion TO_CHAR eine andere Verhaltensweise in Snowflake zeigen können. Eine Liste der Elemente mit abweichenden oder nicht unterstützten Verhaltensweisen finden Sie unter [SSC-EWI-TD0029](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0029).
Zugehörige EWIs¶
[SSC-FDM-TD0029](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/teradataFDM. md#ssc-fdm-td0029): Die von Snowflake unterstützten Formate für TO_CHAR unterscheiden sich von Teradata und können fehlschlagen oder eine andere Verhaltensweise aufweisen.
XMLAGG¶
Beschreibung¶
Erstellen Sie einen XML-Wert, indem Sie eine Aggregation mehrerer Zeilen durchführen. Weitere Informationen dazu finden Sie unter XMLAGG.
XMLAGG (
XML_value_expr
[ ORDER BY order_by_spec [,...] ]
[ RETURNING { CONTENT | SEQUENCE } ]
)
order_by_spec := sort_key [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Teradata¶
create table orders (
o_orderkey int,
o_totalprice float);
insert into orders values (1,500000);
insert into orders values (2,100000);
insert into orders values (3,600000);
insert into orders values (4,700000);
Snowflake¶
CREATE OR REPLACE TABLE orders (
o_orderkey int,
o_totalprice float)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
INSERT INTO orders
VALUES (1,500000);
INSERT INTO orders
VALUES (2,100000);
INSERT INTO orders
VALUES (3,600000);
INSERT INTO orders
VALUES (4,700000);
XMLAGG-Transformation¶
Teradata¶
select
xmlagg(o_orderkey order by o_totalprice desc) (varchar(10000))
from orders
where o_totalprice > 5;
COLUMN1 |
--------+
4 3 1 2 |
Snowflake¶
SELECT
LEFT(TO_VARCHAR(LISTAGG ( o_orderkey, ' ')
WITHIN GROUP(
order by o_totalprice DESC NULLS LAST)), 10000)
from
orders
where o_totalprice > 5;
COLUMN1 |
--------+
4 3 1 2 |
Bekannte Probleme¶
1. Die RETURNING-Klausel wird derzeit nicht unterstützt.
Der Benutzer wird gewarnt, dass die Übersetzung der RETURNING-Klausel in Zukunft hinzugefügt wird.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.