SnowConvert : types de données Redshift¶
Types de données¶
Snowflake prend en charge la plupart des types de données de base SQL (avec quelques restrictions) pour une utilisation en colonnes, variables locales, expressions, paramètres et tout autre emplacement approprié.
Types de données numériques ¶
Redshift |
Snowflake |
Remarques |
---|---|---|
INT |
INT |
INT de Snowflake est un alias de NUMBER. |
INT2 |
SMALLINT |
INT2 de Snowflake est un alias de NUMBER. |
INT4 |
INTEGER |
INT4 de Snowflake est un alias de NUMBER. |
INT8 |
INTEGER |
INT8 de Snowflake est un alias de NUMBER. |
INTEGER |
INTEGER |
INTEGER de Snowflake est un alias de NUMBER. |
BIGINT |
BIGINT |
BIGINT de Snowflake est un alias de NUMBER. |
DECIMAL |
DECIMAL |
DECIMAL de Snowflake est un alias de NUMBER. |
DOUBLE PRECISION |
DOUBLE PRECISION |
DOUBLE PRECISION de Snowflake est un alias de FLOAT. |
NUMERIC |
NUMERIC |
NUMERIC de Snowflake est un alias de NUMBER. |
SMALLINT |
SMALLINT |
SMALLINT de Snowflake est un alias de NUMBER. |
FLOAT |
FLOAT |
Snowflake utilise des nombres à virgule flottante de double précision (bit64) IEEE 754. |
FLOAT4 |
FLOAT4 |
FLOAT4 de Snowflake est un alias de FLOAT. |
FLOAT8 |
FLOAT8 |
FLOAT8 de Snowflake est un alias de FLOAT. |
REAL |
REAL |
REAL de Snowflake est un alias de FLOAT. |
Types de caractères ¶
Redshift |
Snowflake |
Remarques |
---|---|---|
VARCHAR |
VARCHAR |
VARCHAR contient des caractères Unicode UTF-8. Si aucune longueur n’est spécifiée, la valeur par défaut est la longueur maximale autorisée (16 777 216). |
CHAR |
CHAR |
CHAR de Snowflake est un alias de VARCHAR. |
CHARACTER |
CHARACTER |
CHARACTER de Snowflake est un alias de VARCHAR. |
NCHAR |
NCHAR |
NCHAR de Snowflake est un alias de VARCHAR. |
BPCHAR |
VARCHAR |
Le type de données BPCHAR n’est pas pris en charge dans Snowflake. VARCHAR est utilisé à la place. Pour plus d’informations, veuillez consulter SSC-FDM-PG0002. |
NVARCHAR |
NVARCHAR |
NVARCHAR de Snowflake est un alias de VARCHAR. |
CHARACTER VARYING |
CHARACTER VARYING |
CHARACTER VARYING de Snowflake est un alias de VARCHAR. |
NATIONAL CHARACTER |
NCHAR |
NCHAR de Snowflake est un alias de VARCHAR. |
NATIONAL CHARACTER VARYING |
NCHAR VARYING |
NCHAR VARYING de Snowflake est un alias de VARCHAR. |
TEXT |
TEXT |
TEXT de Snowflake est un alias de VARCHAR. |
NAME (Type de caractère spécial) |
VARCHAR |
VARCHAR contient des caractères Unicode UTF-8. Si aucune longueur n’est spécifiée, la valeur par défaut est la longueur maximale autorisée (16 777 216). |
Note
Lorsque l’argument de précision MAX est présent dans les types de données Redshift, ceux-ci sont transformés en fonction de la précision maximale par défaut prise en charge par Snowflake.
Types booléens ¶
Redshift |
Snowflake |
Remarques |
---|---|---|
BOOL |
BOOLEAN |
|
BOOLEAN |
BOOLEAN |
Types de données binaires ¶
Redshift |
Snowflake |
Remarques |
---|---|---|
VARBYTE |
VARBINARY |
VARBINARY est synonyme de BINARY. |
VARBINARY |
VARBINARY |
VARBINARY est synonyme de BINARY. |
BINARY |
BINARY |
La longueur maximale est de 8 MB (8 388 608 octets) |
BINARY VARYING |
BINARY VARYING |
BINARYVARYING est synonyme de BINARY. |
Avertissement
La longueur maximale des types binaires dans Redshift est de 16 MB (16 777 216 octets), mais dans Snowflake, elle est de 8 MB (8 388 608 octets). Veuillez tenir compte de cette réduction de la longueur maximale.
Types de données date et heure ¶
Redshift |
Snowflake |
Remarques |
---|---|---|
DATE |
DATE |
DATE accepte les dates sous les formes les plus courantes ( |
TIME |
TIME |
Stockage des temps sous la forme |
TIMETZ |
TIME |
Fuseau horaire non pris en charge pour le type de données horaires. Pour plus d’informations, veuillez vous référer à SSC-FDM-0005. |
TIME WITH TIME ZONE |
TIME |
Fuseau horaire non pris en charge pour le type de données horaires. Pour plus d’informations, veuillez vous référer à SSC-FDM-0005. |
TIME WITHOUT TIME ZONE |
TIME |
Snowflake prend en charge un seul type de données TIME pour stocker les heures sous la forme de |
TIMESTAMP |
TIMESTAMP |
La précision de l’horodatage peut varier de 0 (secondes) à 9 (nanosecondes). |
TIMESTAMPTZ |
TIMESTAMP_TZ |
TIMESTAMP_TZ enregistre en interne l’heure UTC avec un time zone offset associé. |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP_TZ |
TIMESTAMP_TZ enregistre en interne l’heure UTC avec un time zone offset associé. |
TIMESTAMP WITHOUT TIME ZONE |
TIMESTAMP_NTZ |
TIMESTAMP_NTZ stocke en interne l’heure « horloge murale » avec une précision spécifiée. |
INTERVAL YEAR TO MONTH |
VARCHAR |
Le type de données intervalle n’est pas pris en charge par Snowflake. Transformé en VARCHAR. |
INTERVAL DAY TO SECOND |
VARCHAR |
Le type de données intervalle n’est pas pris en charge par Snowflake. Transformé en VARCHAR. |
Autres types de données ¶
Redshift |
Snowflake |
Remarques |
---|---|---|
GEOMETRY |
GEOMETRY |
Les coordonnées sont représentées par des paires de nombres réels (x, y). Actuellement, seules les coordonnées 2D sont prises en charge. |
GEOGRAPHY |
GEOGRAPHY |
Le type de données GEOGRAPHY suit la norme 84 WGS. |
HLLSKETCH |
N/A |
Type de données non pris en charge par Snowflake. Pour de plus amples informations, veuillez consulter SSC-EWI-RS0004. |
SUPER |
VARIANT |
Peut contenir une valeur de tout autre type de données, y compris les valeurs OBJECT et ARRAY. |
Type de données INTERVALDAYTOSECOND¶
Description¶
INTERVAL DAY TO SECOND spécifiez un littéral d’intervalle pour définir une durée en jours, heures, minutes et secondes. (Référence linguistique RedShift SQL type de données Intervalle)
Il n’y a pas d’équivalent pour ce type de données dans Snowflake, il est actuellement transformé en VARCHAR
.
Grammar 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 }
Avertissement
L’utilisation du type de données Intervalle est planifiée dans les prochaines mises à jour.
Modèles d’échantillons de sources¶
Intervalle entre le jour et la seconde dans Create table¶
Entrée¶
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));
Sortie¶
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');
La valeur de l’intervalle est transformée en un format Snowflake pris en charge, puis insérée sous forme de texte à l’intérieur de la colonne. Comme Snowflake ne prend pas en charge le type de données Interval, il n’est pris en charge que dans les opérations arithmétiques. Pour utiliser la valeur, il faut l’extraire et l’utiliser comme constante d’intervalle (si possible).
Valeur originale Oracle : INTERVAL « 1 2:3:4.567 » DAY TO SECOND
Valeur stockée dans la colonne Snowflake : '1days, 2hours, 3mins, 4secs, 56ms'
Valeur de la constante d’intervalle Snowflake : INTERVAL '1days, 2hours, 3mins, 4secs, 56ms'
Récupération des données d’une colonne Intervalle Jour à Seconde¶
Entrée¶
SELECT * FROM interval_day_to_second_table;
interval_day_col1 |
interval_day_col2 |
---|---|
1 jours 2 heures 0 min 0,0 sec |
NULL |
NULL |
1 jours 2 heures 3 minutes 4,56 secondes |
Sortie¶
SELECT * FROM
interval_day_to_second_table;
interval_day_col1 |
interval_day_col2 |
---|---|
1j, 2h |
NULL |
NULL |
1j, 2h, 3m, 4s, 56ms |
Problèmes connus¶
1. Only arithmetic operations are supported¶
Les intervalles Snowflake ont plusieurs limites. Seules les opérations arithmétiques entre DATE
ou TIMESTAMP
et les constantes d’intervalle sont prises en charge, tout autre scénario n’est pas pris en charge.
EWIs connexes¶
SSC-EWI-0036 : Type de données converti en un autre type de données.
Type de données INTERVALYEARTOMONTH¶
Description¶
INTERVAL YEAR TO MONTH spécifiez un type de données intervalles pour stocker une durée en années et en mois. (Référence linguistique RedShift SQL type de données Intervalle)
Il n’y a pas d’équivalent pour ce type de données dans Snowflake, il est actuellement transformé en VARCHAR.
Grammar Syntax ¶
INTERVAL {YEAR | MONTH | YEAR TO MONTH}
Avertissement
L’utilisation du type de données Intervalle est planifiée dans les prochaines mises à jour.
Modèles d’échantillons de sources¶
Intervalle entre l’année et le mois dans Create table¶
Entrée :¶
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 );
Sortie¶
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');
La valeur de l’intervalle est transformée en un format Snowflake pris en charge, puis insérée sous forme de texte à l’intérieur de la colonne. Comme Snowflake ne prend pas en charge le type de données Interval, il n’est pris en charge que dans les opérations arithmétiques. Pour utiliser la valeur, il faut l’extraire et l’utiliser comme constante d’intervalle (si possible).
Valeur originale de Redshift : INTERVAL '1-2' YEAR TO MONTH
Valeur stockée dans la colonne Snowflake : « 1y, 2m »
Valeur en tant que constante d’intervalle Snowflake : INTERVAL « 1y, 2m »
Récupération des données d’une colonne Intervalle année-mois¶
Entrée¶
SELECT * FROM interval_year_to_month_table;
interval_year_col1 |
interval_year_col2 |
interval_year_col2 |
---|---|---|
12 ans 0 mois |
NULL |
NULL |
NULL |
0 an 5 mois |
NULL |
NULL |
NULL |
1 000 ans 11 mois |
Sortie¶
SELECT * FROM
interval_year_to_month_table;
interval_year_col1 |
interval_year_col2 |
interval_year_col2 |
---|---|---|
12 a 0 mm |
NULL |
NULL |
NULL |
0 a 5 mm |
NULL |
NULL |
NULL |
1 000 a 11 mois |
Problèmes connus¶
1. Only arithmetic operations are supported¶
Les intervalles Snowflake ont plusieurs limites. Seules les opérations arithmétiques entre DATE
ou TIMESTAMP
et les constantes d’intervalle sont prises en charge, tout autre scénario n’est pas pris en charge.
EWIs connexes¶
SSC-EWI-0036 : Type de données converti en un autre type de données.
Modèles de format numérique¶
Description¶
Il s’agit des différents formats numériques supportés par Redshift et son équivalent dans Snowflake.
Redshift |
Snowflake |
Commentaires |
---|---|---|
0 |
0 |
|
9 |
9 |
|
. (point), D |
. (point), D |
|
, (virgule) |
, (virgule) |
|
CC |
Actuellement, il n’y a pas d’équivalent de Century Code dans Snowflake. |
|
FM |
FM |
|
PR |
Actuellement, il n’y a pas d’équivalent pour ce format dans Snowflake. |
|
S |
S |
Signe numérique explicite. |
L |
$ |
Caractère générique du symbole de la monnaie. |
G |
G |
|
MI |
MI |
Signe moins (pour les nombres négatifs) |
PL |
S |
Actuellement, il n’y a pas d’équivalent pour le signe plus dans Snowflake. Il est donc traduit en signe numérique explicite. |
SG |
S |
Signe numérique explicite à la position spécifiée. |
RN |
Actuellement, il n’y a pas d’équivalent pour les numériques romains dans Snowflake. |
|
TH |
Actuellement, il n’y a pas d’équivalent pour le suffixe ordinal dans Snowflake |
Modèles d’échantillons de sources¶
Utilisations dans la fonction To_Number¶
Entrée :¶
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 |
Sortie¶
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 |
Entrée :¶
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 |
Sortie :¶
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 |
Utilisations dans la fonction To_Char¶
Entrée :¶
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' |
Sortie :¶
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' |
Format non pris en charge¶
Le format suivant n’est pas pris en charge, ce qui signifie qu’il sera signalé par un EWI.
Entrée :¶
SELECT to_char(123031, 'th999,999')
Sortie :¶
SELECT
TO_CHAR(123031, 'th999,999') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - th999,999 FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
Problèmes connus¶
1. Using numeric signs inside the number not supported.¶
Lorsqu’un format de signe numérique (MI, SG ou PL) est utilisé à l’intérieur du nombre, au lieu du début ou de la fin du nombre, Snowflake ne le prend pas en charge
Exemple
select to_number('12,-454.88', '99GMI999D99')
EWIs connexes¶
SSC-EWI-PG0005 : le format de date/numérique actuel peut avoir un comportement différent dans Snowflake.