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
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

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‘)
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

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

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)

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
TO_BINARY

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

Siehe Datentypkonvertierungsfunktionen

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

Siehe DateTime und Intervallfunktionen und Ausdrücke

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
JSONExtractLargeValue

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

PERIOD_UDF(datetimeValue, ‚9999-12-31 23:59:59,999999‘)

Siehe Hinweise zu Endkonstante Konstanten

RDIFF

PERIOD_RDIFF_UDF

Siehe Periodenfunktionen und Operatoren

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

Siehe Zeichenfolge-Operatoren und -Funktionen​​​

St_Point-Funktionen

Teradata

Snowflake

Hinweis

ST_SPHERICALDISTANCE

HAVERSINE
ST_DISTANCE

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

Das Ergebnis ist 4, während die CHARINDEX-Entsprechung in Snowflake:

 SELECT CHARINDEX('5', 35);
Copy

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

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))||'"';
Copy
(('"'||12)||'"')|
----------------+
"12"            |

Copy
Snowflake
 SELECT
'"'|| LEFT(TO_VARCHAR(cast(12 as BYTEINT), 'TM'), 10) ||'"';
Copy
"'""'|| LEFT(TO_VARCHAR(CAST(12 AS BYTEINT), 'TM'), 10) ||'""'"
---------------------------------------------------------------
"12"            

Copy

SMALLINT

Teradata
 SELECT '"'||cast(cast(123 as SMALLINT) as varchar(10))||'"';
Copy
(('"'||123)||'"')|
-----------------+
"123"            |

Copy
Snowflake
 SELECT
'"'|| LEFT(TO_VARCHAR(CAST(123 AS SMALLINT), 'TM'), 10) ||'"';
Copy
"'""'|| LEFT(TO_VARCHAR(CAST(123 AS SMALLINT), 'TM'), 10) ||'""'"
-----------------------------------------------------------------
"123"
Copy

INTEGER

Teradata
 SELECT '"'||cast(cast(12345 as INTEGER) as varchar(10))||'"';
Copy
(('"'||12345)||'"')|
-------------------+
"12345"            |

Copy
Snowflake
 SELECT
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS INTEGER), 'TM'), 10) ||'"';
Copy
"'""'|| LEFT(TO_VARCHAR(CAST(12345 AS INTEGER), 'TM'), 10) ||'""'"
------------------------------------------------------------------
"12345"

Copy

BIGINT

Teradata
 SELECT '"'||cast(cast(12345 as BIGINT) as varchar(10))||'"';
Copy
(('"'||12345)||'"')|
-------------------+
"12345"            |

Copy
Snowflake
 SELECT
       '"'|| LEFT(TO_VARCHAR(CAST(12345 AS BIGINT), 'TM'), 10) ||'"';
Copy
"'""'|| LEFT(TO_VARCHAR(CAST(12345 AS BIGINT), 'TM'), 10) ||'""'"
-----------------------------------------------------------------
"12345"

Copy

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))||'"';
Copy
(('"'||12345)||'"')|(('"'||12345)||'"')|
-------------------+-------------------+
"12345."           |"12345.00"         |

Copy
Snowflake
 SELECT
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL), 'TM.'), 10) ||'"',
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL(12, 2)), 'TM'), 10) ||'"';
Copy
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL), 'TM.'), 10) ||'"'	'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL(12, 2)), 'TM'), 10) ||'"'
"12345."	"12345.00"    
Copy

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;
Copy
COLUMN1          |COLUMN2
-----------------+--------------+
"-.10"           |".10"         |

Copy
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;
Copy
COLUMN1           |COLUMN2
------------------+---------------+
"-0.10"           |"0.10"         |

Copy

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'}
Copy

Beispielhafte Quellcode-Muster

Umwandlung in DATE mit geschweiften Klammern

Teradata

 SELECT * FROM RESOURCE_DETAILS where change_ts >= {d '2022-09-10'};
Copy

Snowflake

 SELECT
* FROM
PUBLIC.RESOURCE_DETAILS
where change_ts >= DATE('2022-09-10');
Copy

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;
Copy
VARCHAR_TO_INTERVAL | NUMBER_TO_INTERVAL | OUTSIDE_DATETIME_OPERATION |
--------------------+--------------------+----------------------------+
2022-10-15 23:04:56 |2017-10-15 10:30:00 | 7:00                       |

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

Copy

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;
Copy
DATETIME_OPERATION  | OUTSIDE_DATETIME_OPERATION |
--------------------+----------------------------+
2022-11-04 20:30:00 | 20 10                      |

Copy
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;
Copy
DATETIME_OPERATION      | OUTSIDE_DATETIME_OPERATION |
------------------------+----------------------------+
2022-11-04 20:30:00.000 | 20 10                      |

Copy

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;
Copy
DATETIME_OPERATION  | OUTSIDE_DATETIME_OPERATION |
--------------------+----------------------------+
2022-10-19 13:30:00 | 4 03                       |

Copy
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;
Copy
DATETIME_OPERATION      | OUTSIDE_DATETIME_OPERATION |
------------------------+----------------------------+
2022-10-19 13:30:00.000 | 4 03                       |

Copy

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])

Copy

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_varcharinstringumgewandelt, 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'));
Copy
COLUMN1|
-------+
125    |

Copy
Snowflake
 SELECT
 COALESCE(TO_VARCHAR(125), 'hello', TO_VARCHAR(850, '9000'));
Copy
COLUMN1|
-------+
125    |

Copy

Zeitstempel gemischt mit Datumsparametern

Teradata
 SELECT COALESCE(cast(TIMESTAMP '2021-09-14 10:14:59' as format 'HH:MI:SSBDD-MM-YYYY'), current_date);
Copy
COLUMN1    |
-----------+
2021-09-14 |

Copy
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());
Copy
COLUMN1    |
-----------+
2021-09-14 |

Copy

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;
Copy
Ausgabecode:
 SELECT
current_timestamp(4);
Copy

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])

Copy

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');
Copy
COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
22     |22     |22     |22     |

Copy
Snowflake
 SELECT
    DAYOFMONTH(DATE'2022-12-22'),
    DAYOFMONTH(DATE'2022-12-22'),
    DAYOFMONTH(DATE'2022-12-22'),
    DAYOFMONTH(DATE'2022-12-22');
Copy
COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
22     |22     |22     |22     |

Copy

ISO-Kalender

Teradata
 SELECT DAYNUMBER_OF_MONTH (DATE'2022-12-22', 'ISO');
Copy
COLUMN1|
-------+
25     |

Copy
Snowflake
 SELECT
PUBLIC.DAYNUMBER_OF_MONTH_UDF(DATE'2022-12-22');
Copy
COLUMN1|
-------+
25     |

Copy

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'
Copy
COLUMN1    | COLUMN2    | COLUMN3 |
-----------+------------+---------+
23067      |  Z\ESC     | 5A1B    |

Copy
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'
Copy
COLUMN1    | COLUMN2    | COLUMN3 |
-----------+------------+---------+
23067      |  Z\ESC     | 5A1B    |

Copy

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Bekannte Probleme

  1. TO_NUMBER-Formatparameter muss mit den Ziffern der Eingabezeichenfolge übereinstimmen.

  2. Es gibt keine funktional äquivalente integrierte Funktion für FROM_BYTES bei der Kodierung nach ANSI

Zugehörige EWIs

  1. [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);

Copy

Beispielhafte Quellcode-Muster

Datenkonfiguration

Teradata
 SET QUERY_BAND = 'hola=hello;adios=bye;' FOR SESSION;
Copy
Snowflake
 ALTER SESSION SET QUERY_TAG = 'hola=hello;adios=bye;';
Copy

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;
Copy
+----------+----------+----------+----------+----------+----------+
| EXAMPLE1 | EXAMPLE2 | EXAMPLE3 | EXAMPLE4 | EXAMPLE5 | EXAMPLE6 |
+----------+----------+----------+----------+----------+----------+
| Mark200  | Mark200  | SaraDB   | Peter3   | DbAdmin  |          |
+----------+----------+----------+----------+----------+----------+

Copy
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;
Copy
+----------+----------+----------+----------+----------+----------+
| EXAMPLE1 | EXAMPLE2 | EXAMPLE3 | EXAMPLE4 | EXAMPLE5 | EXAMPLE6 |
+----------+----------+----------+----------+----------+----------+
| Mark200  | Mark200  | SaraDB   | Peter3   | DbAdmin  |          |
+----------+----------+----------+----------+----------+----------+

Copy

GetQueryBandValue ohne QueryBandIn-Parameter

Teradata
 SELECT
GETQUERYBANDVALUE(2, 'hola') as Example1,
GETQUERYBANDVALUE(2, 'adios') as Example2;
Copy
+----------+----------+
| EXAMPLE1 | EXAMPLE2 |
+----------+----------+
| hello    | bye      |
+----------+----------+

Copy
Snowflake
 SELECT
GETQUERYBANDVALUE_UDF('hola') as Example1,
GETQUERYBANDVALUE_UDF('adios') as Example2;
Copy
+----------+----------+
| EXAMPLE1 | EXAMPLE2 |
+----------+----------+
| hello    | bye      |
+----------+----------+

Copy

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

Beispielhaftes Quellcode-Muster

Grundlegendes Quellcode-Muster

Teradata
 SELECT JSON_CHECK('{"key": "value"}');
Copy
Snowflake Scripting
 SELECT
IFNULL(CHECK_JSON('{"key": "value"}'), 'OK');
Copy

JSON_CHECK innerhalb CASE-Transformation

Teradata
 SELECT CASE WHEN JSON_CHECK('{}') = 'OK' then 'OKK' ELSE 'NOT OK' END;
Copy
Snowflake Scripting
 SELECT
CASE
WHEN IFNULL(CHECK_JSON('{}'), 'OK') = 'OK'
THEN 'OKK' ELSE 'NOT OK'
END;
Copy

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

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

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"]
}
Copy

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" 
}
Copy

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 [,...])]
)

Copy

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

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);
Copy
ID | Song name  | Genre |
---+------------+-------+
1  | Late night | Jazz  |
---+------------+-------+
1  | Wake up    | Rock  |
---+------------+-------+
1  | Who am I   | Rock  |
---+------------+-------+
1  | Raining    | Blues |

Copy
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;
Copy
ID | Song name  | Genre |
---+------------+-------+
1  | Late night | Jazz  |
---+------------+-------+
1  | Wake up    | Rock  |
---+------------+-------+
1  | Who am I   | Rock  |
---+------------+-------+
1  | Raining    | Blues |

Copy

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 } ]

Copy

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);
Copy
COLUMN1                     | COLUMN2                     |
----------------------------+-----------------------------+
{"age":24,"name":"cameron"} | {"age":24,"name":"cameron"} |

Copy
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}'));
Copy
COLUMN1                     | COLUMN2                     |
----------------------------+-----------------------------+
{"age":24,"name":"cameron"} | {"age":24,"name":"cameron"} |

Copy

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

  1. [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 ]
)

Copy

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);
Copy
COLUMN1        | COLUMN2 | COLUMN3 |
---------------+---------+---------+
orange chicken | world!  | Susana  |

Copy
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);
Copy
COLUMN1        | COLUMN2 | COLUMN3 |
---------------+---------+---------+
orange chicken | world!  | Susana  |

Copy

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', '#', '=');
Copy
COLUMN1 | COLUMN2 | COLUMN3     |
--------+---------+-------------+
Green   | Blue    | Los Angeles |

Copy
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);
Copy
COLUMN1 | COLUMN2 | COLUMN3     |
--------+---------+-------------+
Green   | Blue    | Los Angeles |

Copy

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);
Copy
COLUMN1       | COLUMN2 |
--------------+---------+
Bristol farms | world!  |

Copy
Snowflake
 SELECT
PUBLIC.NVP_UDF('store = whole foods&&store: ?Bristol farms', 'store', '&&', '\\ =\\  :\\ ?', 2),
PUBLIC.NVP_UDF('Hello = bye|name = Lucas|Hello = world!', 'Hello', '|', '\\ =\\ ', 2);
Copy
 COLUMN1       | COLUMN2 |
--------------+---------+
Bristol farms | world!  |
Copy

NVP mit nicht-literalen Trennzeichen

Teradata
 SELECT NVP('store = whole foods&&store: ?Bristol farms','store', '&&', valueDelimiter, 2);
Copy
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 ***/;
Copy

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

  1. [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
Copy

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

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 ***/!!!;
Copy

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

  1. [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
Copy

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

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 ***/!!!;
Copy

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

  1. [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

Copy

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

Grundlegende PIVOT-Transformation

Teradata
 SELECT *
FROM star1 PIVOT (
	SUM(sales) FOR qtr                                                                                               
    IN ('Q1',                                                                                                     
    	'Q2', 
        'Q3')
)Tmp;
Copy
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 |
--------+-------+------+------+------+------+------+

Copy
Snowflake
 SELECT
	*
FROM
	star1 PIVOT(
	SUM(sales) FOR qtr IN ('Q1',
	   	'Q2',
	       'Q3'))Tmp;
Copy
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 |
--------+-------+------+------+------+------+------+

Copy

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;
Copy
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         |
--------+-------+------+------+--------------+--------------+--------------+

Copy
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;
Copy
 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         |
--------+-------+------+------+--------------+--------------+--------------+
Copy

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

  1. [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 ] [,...] )
Copy

Snowflake-Syntax

 RANK() OVER 
( 
    [ PARTITION BY <expr1> ]
    ORDER BY <expr2> [ { ASC | DESC } ] 
    [ <window_frame> ]
)
Copy

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

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;
Copy
SALESSALESASCSALESDESCSALESDEFAULT
NULL666
200511
150322
150322
120244
100155
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;
Copy
SALESSALESASCSALESDESCSALESDEFAULT
NULL666
200511
150322
150322
120244
100155

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)

Copy

Beispielhafte Quellcode-Muster

Datenkonfiguration

Teradata
 CREATE TABLE regexpTable
(
    col1 CHAR(35)
);

INSERT INTO regexpTable VALUES('hola');
Copy
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');
Copy

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;
Copy
COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
hala   |null   |1      |0      |

Copy
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;
Copy
COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
hala   |null   |1      |FALSE  |

Copy

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

  1. [SSC-FDM-0007](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0007): Element mit fehlenden Abhängigkeiten.

  2. [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 )

Copy

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

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

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

Copy

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])

Copy

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);
Copy
COLUMN1 |COLUMN2 |COLUMN3 | COLUMN4 |
--------+--------+--------+---------+
ello W  |Hel     |ello W  |Hel      |

Copy
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);
Copy
COLUMN1 |COLUMN2 |COLUMN3 | COLUMN4 |
--------+--------+--------+---------+
ello W  |Hel     |ello W  |Hel      |

Copy

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' } )
  ]
)

Copy

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

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


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

Copy

Bekannte Probleme

  1. 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.

  2. 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

  1. [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])

Copy

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');
Copy
COLUMN1    | COLUMN2    | COLUMN3           |
-----------+------------+-------------------+
2012/12/23 | 12/23/2012 | SUNDAY 23, DEC 12 |

Copy
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 ***/;
Copy
COLUMN1    | COLUMN2    | COLUMN3           |
-----------+------------+-------------------+
2012/12/23 | 12/23/2012 | SUNDAY 23, DEC 12 |

Copy

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''');
Copy
COLUMN1  | COLUMN2 | COLUMN3       |
---------+---------+---------------+
1255.495 | 1.3E+03 | +EUR1255.4950 |

Copy
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 ***/;
Copy
COLUMN1  | COLUMN2 | COLUMN3       |
---------+---------+---------------+
1255.495 | 1.3E+03 | +EUR1255.4950 |

Copy

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

  1. [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 } ]

Copy

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

XMLAGG-Transformation

Teradata
 select 
    xmlagg(o_orderkey order by o_totalprice desc) (varchar(10000))
from orders
where o_totalprice > 5;
Copy
COLUMN1 |
--------+
4 3 1 2 |

Copy
Snowflake
 SELECT
    LEFT(TO_VARCHAR(LISTAGG ( o_orderkey, ' ')
    WITHIN GROUP(
 order by o_totalprice DESC NULLS LAST)), 10000)
    from
    orders
    where o_totalprice > 5;
Copy
COLUMN1 |
--------+
4 3 1 2 |

Copy

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.