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 (YYYY-MM-DD, DD-MON-YYYY, usw.)

TIME

TIME

Speichern von Zeiten in der Form HH:MI:SS. Die Zeitgenauigkeit kann zwischen 0 (Sekunden) und 9 (Nanosekunden) liegen. Die Standardgenauigkeit ist 9.

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 HH:MI:SS.

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

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

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

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

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

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

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

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

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

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
;
Copy
multiple_ninesexact_zerosdecimalsfill_modecurrency
94239423123.456123031.301254.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
;
Copy
multiple_ninesexact_zerosdecimalsfill_modecurrency
94239423123.456123031.30012454.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
;
Copy
currency_Lsigned_number_endplus_signminus_signsigned_number
12454.8-1231254.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
;
Copy
currency_Lsigned_number_endplus_signminus_signsigned_number
12454.8-1231254.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
;
Copy
signed_numberdecimal_numbernegativeminus_signplus_signmultiple_ninesmultiple_ninesexact_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
;
Copy
signed_numberdecimal_numbernegativeminus_signplus_signmultiple_ninesmultiple_ninesexact_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')
Copy
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. ***/!!!
Copy

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

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.