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

TIME

TIME

Stockage des temps sous la forme HH:MI:SS. La précision temporelle peut varier de 0 (secondes) à 9 (nanosecondes). La précision par défaut est 9.

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

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

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

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

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

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

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

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

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

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

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

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

EWIs connexes

  • SSC-EWI-PG0005 : le format de date/numérique actuel peut avoir un comportement différent dans Snowflake.