SnowConvert: Redshift-Datentypen¶
Datentypen¶
Snowflake unterstützt die meisten grundlegenden SQL-Datentypen (mit einigen Einschränkungen) bei Verwendung in Spalten, lokalen Variablen, Ausdrücken, Parametern und anderen geeigneten Orten.
Numerische Datentypen ¶
Redshift |
Snowflake |
Anmerkungen |
---|---|---|
INT |
INT |
Snowflakes INT ist ein Alias für NUMBER. |
INT2 |
SMALLINT |
Snowflakes INT2 ist ein Alias für NUMBER. |
INT4 |
INTEGER |
Snowflakes INT4 ist ein Alias für NUMBER. |
INT8 |
INTEGER |
Snowflakes INT8 ist ein Alias für NUMBER. |
INTEGER |
INTEGER |
Snowflakes INTEGER ist ein Alias für NUMBER. |
BIGINT |
BIGINT |
Snowflakes BIGINT ist ein Alias für NUMBER. |
DECIMAL |
DECIMAL |
Snowflakes DECIMAL ist ein Alias für NUMBER. |
DOUBLE PRECISION |
DOUBLE PRECISION |
Snowflakes DOUBLEPRECISION ist ein Alias für FLOAT. |
NUMERIC |
NUMERIC |
Snowflakes NUMERIC ist ein Alias für NUMBER. |
SMALLINT |
SMALLINT |
Snowflakes SMALLINT ist ein Alias für NUMBER. |
FLOAT |
FLOAT |
Snowflake verwendet Fließkommazahlen mit doppelter Genauigkeit (64 Bit) IEEE 754. |
FLOAT4 |
FLOAT4 |
Snowflakes FLOAT4 ist ein Alias für FLOAT. |
FLOAT8 |
FLOAT8 |
Snowflakes FLOAT8 ist ein Alias für FLOAT. |
REAL |
REAL |
Snowflakes REAL ist ein Alias für FLOAT. |
Zeichentypen ¶
Redshift |
Snowflake |
Anmerkungen |
---|---|---|
VARCHAR |
VARCHAR |
VARCHAR enthält Unicode/UTF-8-Zeichen. Wenn keine Länge angegeben wird, ist der Standard die maximal zulässige Länge (16.777.216). |
CHAR |
CHAR |
Snowflakes CHAR ist ein Alias für VARCHAR. |
CHARACTER |
CHARACTER |
Snowflakes CHARACTER ist ein Alias für VARCHAR. |
NCHAR |
NCHAR |
Snowflakes NCHAR ist ein Alias für VARCHAR. |
BPCHAR |
VARCHAR |
BPCHAR-Datentyp wird in Snowflake nicht unterstützt. VARCHAR wird stattdessen verwendet. Weitere Informationen finden Sie unter [SSC-FDM-PG0002](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/postgresqlFDM. md#ssc-fdm-pg0002). |
NVARCHAR |
NVARCHAR |
Snowflakes NVARCHAR ist ein Alias für VARCHAR. |
CHARACTER VARYING |
CHARACTER VARYING |
Snowflakes CHARACTERVARYING ist ein Alias für VARCHAR. |
NATIONAL CHARACTER |
NCHAR |
Snowflakes NCHAR ist ein Alias für VARCHAR. |
NATIONAL CHARACTER VARYING |
NCHAR VARYING |
Snowflakes NCHARVARYING ist ein Alias für VARCHAR. |
TEXT |
TEXT |
Snowflakes TEXT ist ein Alias für VARCHAR. |
NAME (Sonderzeichentyp) |
VARCHAR |
VARCHAR enthält Unicode/UTF-8-Zeichen. Wenn keine Länge angegeben wird, ist der Standard die maximal zulässige Länge (16.777.216). |
Bemerkung
Wenn das Argument MAX precision in den Redshift-Datentypen vorhanden ist, werden sie in die von Snowflake unterstützte Standardpräzision umgewandelt.
Boolesche Typen ¶
Redshift |
Snowflake |
Anmerkungen |
---|---|---|
BOOL |
BOOLEAN |
|
BOOLEAN |
BOOLEAN |
Binäre Datentypen ¶
Redshift |
Snowflake |
Anmerkungen |
---|---|---|
VARBYTE |
VARBINARY |
VARBINARY ist gleichbedeutend mit BINARY. |
VARBINARY |
VARBINARY |
VARBINARY ist gleichbedeutend mit BINARY. |
BINARY |
BINARY |
Die maximale Länge beträgt 8 MB (8.388.608 Bytes). |
BINARY VARYING |
BINARY VARYING |
BINARYVARYING ist gleichbedeutend mit BINARY. |
Warnung
Die maximale Länge für binäre Typen in Redshift beträgt 16 MB (16.777.216 Bytes), in Snowflake jedoch 8 MB (8.388.608 Bytes). Bitte berücksichtigen Sie diese Kürzung der maximalen Länge.
Datum & Zeit Datentypen ¶
Redshift |
Snowflake |
Anmerkungen |
---|---|---|
DATE |
DATE |
DATE akzeptiert Datumsangaben in den gebräuchlichsten Formen ( |
TIME |
TIME |
Speichern von Zeiten in der Form |
TIMETZ |
TIME |
Zeitzone wird für den Datentyp Zeit nicht unterstützt. Weitere Informationen finden Sie unter [SSC-FDM-0005](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0005). |
TIME WITH TIME ZONE |
TIME |
Zeitzone wird für den Datentyp Zeit nicht unterstützt. Weitere Informationen finden Sie unter [SSC-FDM-0005](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0005). |
TIME WITHOUT TIME ZONE |
TIME |
Snowflake unterstützt einen einzigen TIME-Datentyp zum Speichern von Zeiten im Format |
TIMESTAMP |
TIMESTAMP |
Die Genauigkeit eines Zeitstempels kann zwischen 0 (Sekunden) und 9 (Nanosekunden) liegen. |
TIMESTAMPTZ |
TIMESTAMP_TZ |
TIMESTAMP_TZ speichert intern die UTC-Zeit zusammen mit einem zugehörigen Zeitzonenoffset. |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP_TZ |
TIMESTAMP_TZ speichert intern die UTC-Zeit zusammen mit einem zugehörigen Zeitzonenoffset. |
TIMESTAMP WITHOUT TIME ZONE |
TIMESTAMP_NTZ |
TIMESTAMP_NTZ speichert intern die „Wanduhr“-Zeit mit einer bestimmten Genauigkeit. |
INTERVAL YEAR TO MONTH |
VARCHAR |
Der Datentyp Intervall wird von Snowflake nicht unterstützt. Verwandelt in VARCHAR. |
INTERVAL DAY TO SECOND |
VARCHAR |
Der Datentyp Intervall wird von Snowflake nicht unterstützt. Verwandelt in VARCHAR. |
Andere Datentypen ¶
Redshift |
Snowflake |
Anmerkungen |
---|---|---|
GEOMETRY |
GEOMETRY |
Die Koordinaten werden als Paare von reellen Zahlen (x, y) dargestellt. Derzeit werden nur 2D-Koordinaten unterstützt. |
GEOGRAPHY |
GEOGRAPHY |
Der Datentyp GEOGRAPHY verwendet WGS-84 als globales Georeferenzsystem. |
HLLSKETCH |
N/A |
Datentyp wird in Snowflake nicht unterstützt. Weitere Informationen finden Sie unter [SSC-EWI-RS0004](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/redshiftEWI. md#ssc-ewi-rs0004). |
SUPER |
VARIANT |
Kann einen Wert eines beliebigen anderen Datentyps enthalten, einschließlich der Werte OBJECT und ARRAY. |
INTERVALDAYTOSECOND-Datentyp¶
Beschreibung¶
INTERVAL DAY TO SECOND ein Intervall-Literal angeben, um eine Dauer in Tagen, Stunden, Minuten und Sekunden zu definieren. (RedShift SQL-Referenz: Intervall-Datentyp)
Es gibt keine Entsprechung für diesen Datentyp in Snowflake, er wird derzeit in VARCHAR
umgewandelt.
Grammatikalische Syntax ¶
INTERVAL day_to_second_qualifier [ (fractional_precision) ]
day_to_second_qualifier:
{ DAY | HOUR | MINUTE | SECOND | DAY TO HOUR | DAY TO MINUTE | DAY TO SECOND |
HOUR TO MINUTE | HOUR TO SECOND | MINUTE TO SECOND }
Warnung
Die Verwendung des Datentyps Intervall ist für zukünftige Updates geplant.
Beispielhafte Quellcode-Muster¶
Intervall Tag bis Sekunde in Create Table¶
Eingabe¶
CREATE TABLE interval_day_to_second_table
(
interval_day_col1 INTERVAL DAY TO HOUR,
interval_day_col2 INTERVAL DAY TO SECOND(4)
);
INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ( INTERVAL '1 2' DAY TO HOUR );
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ( INTERVAL '1 2:3:4.56' DAY TO SECOND(4));
Ausgabe¶
CREATE TABLE interval_day_to_second_table
(
interval_day_col1 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO HOUR DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_day_col2 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO SECOND(4) DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"redshift"}}'
;
INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ('1days, 2hours');
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ('1days, 2hours, 3mins, 4secs, 56ms');
Der Intervallwert wird in ein unterstütztes Snowflake-Format umgewandelt und dann als Text in die Spalte eingefügt. Da Snowflake Intervall nicht als Datentyp unterstützt, wird er nur bei arithmetischen Operationen unterstützt. Um den Wert zu verwenden, muss er extrahiert und als Intervallkonstante verwendet werden (falls möglich).
Ursprünglicher Oracle-Wert: INTERVAL '1 2:3:4.567' DAY TO SECOND
In der Spalte Snowflake gespeicherter Wert: '1days, 2hours, 3mins, 4secs, 56ms'
Wert als Snowflake-Intervall-Konstante: INTERVAL '1days, 2hours, 3mins, 4secs, 56ms'
Abrufen von Daten aus einer Spalte Intervall Tag bis Sekunde¶
Eingabe¶
SELECT * FROM interval_day_to_second_table;
interval_day_col1 |
interval_day_col2 |
---|---|
1 days 2 hours 0 mins 0.0 secs |
NULL |
NULL |
1 days 2 hours 3 mins 4.56 secs |
Ausgabe¶
SELECT * FROM
interval_day_to_second_table;
interval_day_col1 |
interval_day_col2 |
---|---|
1d, 2h |
NULL |
NULL |
1d, 2h, 3m, 4s, 56ms |
Bekannte Probleme¶
1. Only arithmetic operations are supported¶
Snowflake-Intervalle haben mehrere Beschränkungen. Es werden nur arithmetische Operationen zwischen DATE
oder TIMESTAMP
und Intervallkonstanten unterstützt, alle anderen Szenarien werden nicht unterstützt.
Zugehörige EWIs¶
[SSC-EWI-0036](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.
INTERVALYEARTOMONTH-Datentyp¶
Beschreibung¶
INTERVAL YEAR TO MONTH einen Intervall-Datentyp angeben, um eine Zeitdauer in Jahren und Monaten zu speichern. (RedShift SQL-Referenz: Intervall-Datentyp)
Es gibt keine Entsprechung für diesen Datentyp in Snowflake, er wird derzeit in VARCHAR umgewandelt.
Grammatikalische Syntax ¶
INTERVAL {YEAR | MONTH | YEAR TO MONTH}
Warnung
Die Verwendung des Datentyps Intervall ist für zukünftige Updates geplant.
Beispielhafte Quellcode-Muster¶
Intervall Jahr bis Monat in Create Table¶
Eingabe:¶
CREATE TABLE interval_year_to_month_table
(
interval_year_col1 INTERVAL YEAR,
interval_year_col2 INTERVAL MONTH,
interval_year_col3 INTERVAL YEAR TO MONTH
);
INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ( INTERVAL '12' YEAR);
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ( INTERVAL '5' MONTH);
INSERT INTO interval_year_to_month_table(interval_year_col3) VALUES ( INTERVAL '1000-11' YEAR TO MONTH );
Ausgabe¶
CREATE TABLE interval_year_to_month_table
(
interval_year_col1 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_year_col2 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_year_col3 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR TO MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"redshift"}}'
;
INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ('12year, 0mons');
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ('0year, 5mons');
INSERT INTO interval_year_to_month_table(interval_year_col3) VALUES ('1000year, 11mons');
Der Intervallwert wird in ein unterstütztes Snowflake-Format umgewandelt und dann als Text in die Spalte eingefügt. Da Snowflake Intervall nicht als Datentyp unterstützt, wird er nur bei arithmetischen Operationen unterstützt. Um den Wert zu verwenden, muss er extrahiert und als Intervallkonstante verwendet werden (falls möglich).
Ursprünglicher Redshift-Wert: INTERVAL '1-2' YEAR TO MONTH
In der Spalte Snowflake gespeicherter Wert: '1y, 2m'
Wert als Snowflake-Intervall-Konstante: INTERVAL '1y, 2m'
Abrufen von Daten aus einer Spalte Intervall Jahr bis Monat¶
Eingabe¶
SELECT * FROM interval_year_to_month_table;
interval_year_col1 |
interval_year_col2 |
interval_year_col2 |
---|---|---|
12 years 0 mons |
NULL |
NULL |
NULL |
0 years 5 mons |
NULL |
NULL |
NULL |
1000 years 11 mons |
Ausgabe¶
SELECT * FROM
interval_year_to_month_table;
interval_year_col1 |
interval_year_col2 |
interval_year_col2 |
---|---|---|
12 y 0 mm |
NULL |
NULL |
NULL |
0 y 5 mm |
NULL |
NULL |
NULL |
1000 y 11 mons |
Bekannte Probleme¶
1. Only arithmetic operations are supported¶
Snowflake-Intervalle haben mehrere Beschränkungen. Es werden nur arithmetische Operationen zwischen DATE
oder TIMESTAMP
und Intervallkonstanten unterstützt, alle anderen Szenarien werden nicht unterstützt.
Zugehörige EWIs¶
[SSC-EWI-0036](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.
Numerische Formatmodelle¶
Beschreibung¶
Dies sind die verschiedenen numerischen Formate, die von Redshift und seiner Entsprechung in Snowflake unterstützt werden.
Redshift |
Snowflake |
Kommentare |
---|---|---|
0 |
0 |
|
9 |
9 |
|
. (Punkt), D |
. (Punkt), D |
|
, (Komma) |
, (Komma) |
|
CC |
Derzeit gibt es keine Entsprechung für Century Code in Snowflake. |
|
FM |
FM |
|
PR |
Derzeit gibt es keine Entsprechung für dieses Format in Snowflake. |
|
S |
S |
Explizites numerisches Zeichen. |
L |
$ |
Platzhalter für das Währungssymbol. |
G |
G |
|
MI |
MI |
Minuszeichen (für negative Zahlen) |
PL |
S |
Derzeit gibt es keine Entsprechung für das Pluszeichen in Snowflake. Es wird also in das explizite numerische Zeichen übersetzt. |
SG |
S |
Explizites numerisches Vorzeichen an der angegebenen Position. |
RN |
Derzeit gibt es keine Entsprechung für römische Ziffern in Snowflake. |
|
TH |
Derzeit gibt es keine Entsprechung für Ordnungszahlsuffixe in Snowflake |
Beispielhafte Quellcode-Muster¶
Verwendungen in der Funktion To_Number¶
Eingabe:¶
select to_number('09423', '999999999') as multiple_nines
, to_number('09423', '00000') as exact_zeros
, to_number('123.456', '999D999') as decimals
, to_number('123,031.30', 'FM999,999D999') as fill_mode
, to_number('$ 12,454.88', '$999,999.99') as currency
;
multiple_nines | exact_zeros | decimals | fill_mode | currency |
---|---|---|---|---|
9423 | 9423 | 123.456 | 123031.30 | 1254.88 |
Ausgabe¶
select to_number('09423', '999999999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999999999'' NODE ***/!!! as multiple_nines
, to_number('09423', '00000') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''00000'' NODE ***/!!! as exact_zeros
, to_number('123.456', '999D999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999D999'' NODE ***/!!! as decimals
, to_number('123,031.30', 'FM999,999D999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''FM999,999D999'' NODE ***/!!! as fill_mode
, to_number('$ 12,454.88', '$999,999.99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''$999,999.99'' NODE ***/!!! as currency
;
multiple_nines | exact_zeros | decimals | fill_mode | currency |
---|---|---|---|---|
9423 | 9423 | 123.456 | 123031.300 | 12454.88 |
Eingabe:¶
select to_number('$ 12,454.88', 'FML99G999D99') as currency_L
, to_number('123-', '999S') as signed_number_end
, to_number('+12454.88', 'PL99G999D99') as plus_sign
, to_number('-12,454.88', 'MI99G999D99') as minus_sign
, to_number('-12,454.88', 'SG99G999D99') as signed_number
;
currency_L | signed_number_end | plus_sign | minus_sign | signed_number |
---|---|---|---|---|
12454.8 | -123 | 1254.88 | -12454.88 | -12454.88 |
Ausgabe:¶
select to_number('$ 12,454.88', 'FML99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - 'FML99G999D99' FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!! as currency_L
, to_number('123-', '999S') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999S'' NODE ***/!!! as signed_number_end
, to_number('+12454.88', 'PL99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - 'PL99G999D99' FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!! as plus_sign
, to_number('-12,454.88', 'MI99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''MI99G999D99'' NODE ***/!!! as minus_sign
, to_number('-12,454.88', 'SG99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''SG99G999D99'' NODE ***/!!! as signed_number
;
currency_L | signed_number_end | plus_sign | minus_sign | signed_number |
---|---|---|---|---|
12454.8 | -123 | 1254.88 | -12454.88 | -12454.88 |
Verwendungen in der Funktion To_Char¶
Eingabe:¶
select to_char(-123, '999S') as signed_number
, to_char(12454.88, 'FM99G999D99') as decimal_number
, to_char(-12454.88, '99G999D99') as negative
, to_char(-12454.88, 'MI99G999D99') as minus_sign
, to_char(+12454.88, 'PL99G999D99') as plus_sign
, to_char(09423, '999999999') as multiple_nines
, to_char(09423, '00000') as exact_zeros
;
signed_number | decimal_number | negative | minus_sign | plus_sign | multiple_ninesmultiple_nines | exact_zerosexact_zeros |
---|---|---|---|---|---|---|
'123-' | '12,454.88' | '-12,454.88' | '12454.88' | '-12,454.88' | '09423' | '09423' |
Ausgabe:¶
select
TO_CHAR(-123, '999S') as signed_number,
TO_CHAR(12454.88, 'FM99G999D99') as decimal_number,
TO_CHAR(-12454.88, '99G999D99') as negative,
TO_CHAR(-12454.88, 'MI99G999D99') as minus_sign,
TO_CHAR(+12454.88, 'S99G999D99') as plus_sign,
TO_CHAR(09423, '999999999') as multiple_nines,
TO_CHAR(09423, '00000') as exact_zeros
;
signed_number | decimal_number | negative | minus_sign | plus_sign | multiple_ninesmultiple_nines | exact_zerosexact_zeros |
---|---|---|---|---|---|---|
'123-' | '12,454.88' | '-12,454.88' | '12454.88' | '-12,454.88' | '09423' | '09423' |
Nicht unterstütztes Format¶
Das folgende Format wird nicht unterstützt und ist mit einem EWI gekennzeichnet.
Eingabe:¶
SELECT to_char(123031, 'th999,999')
Ausgabe:¶
SELECT
TO_CHAR(123031, 'th999,999') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - th999,999 FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
Probleme kennen¶
1. Using numeric signs inside the number not supported.¶
Wenn ein beliebiges numerisches Vorzeichenformat (MI, SG oder PL) innerhalb der Zahl verwendet wird, anstatt am Anfang oder am Ende der Zahl, wird dies von Snowflake nicht unterstützt
Beispiel
select to_number('12,-454.88', '99GMI999D99')
Zugehörige EWIs¶
[SSC-EWI-PG0005](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/postgresEWI. md#ssc-ewi-pg0005): Das aktuelle Datums-/Nummernformat kann sich in Snowflake anders verhalten.