Types de données des tables Apache Iceberg™¶
Snowflake prend en charge la plupart des types de données définis par la spécification Apache Iceberg™, et écrit les types de données Iceberg dans les fichiers de table afin que vos tables Iceberg restent interopérables entre les différents moteurs de calcul lorsque vous utilisez Snowflake comme catalogue.
Pour une vue d’ensemble des types de données Iceberg pris en charge par Snowflake, voir Types de données pris en charge.
Types approximatifs¶
Si votre table utilise un type de données Iceberg pour lequel Snowflake ne prend pas en charge une correspondance exacte, Snowflake utilise un type Snowflake approximatif. Ce type de mappage affecte les valeurs des colonnes des tables converties et des tables Iceberg qui utilisent Snowflake comme catalogue.
Prenons l’exemple d’une table comportant une colonne de type Iceberg int
. Snowflake traite les valeurs des colonnes en utilisant le type de données Snowflake NUMBER(10,0).
NUMBER(10,0) a une plage de (-9,999,999,999, +9,999,999,999), mais int
a une plage plus limitée de (-2,147,483,648, +2,147,483,647). Si vous essayez d’insérer une valeur 3,000,000,000 dans cette colonne, Snowflake renvoie un message d’erreur hors plage.
Pour plus de détails sur les types approximatifs, voir les notes dans le tableau Types de données pris en charge.
Types de données pris en charge¶
Le tableau dans cette section montre la relation entre les types de données Iceberg et les types de données Snowflake. Les colonnes suivantes sont utilisées :
- Type Iceberg:
Type de données défini dans la spécification Apache Iceberg. Lorsque vous utilisez Snowflake comme catalogue, Snowflake écrit le type Iceberg dans les fichiers de données des tables afin que celles-ci restent interopérables entre les différents moteurs de calcul.
- Type Snowflake:
Type de données Snowflake utilisé pour traiter et renvoyer les données de table. Par exemple, si votre schéma spécifie le type Iceberg
timestamp
, Snowflake traite et renvoie des valeurs utilisant le type de données Snowflake TIMESTAMP_NTZ(6) à une précision de l’ordre de la microseconde.- Remarques:
Notes sur l’utilisation supplémentaires, notamment pour utiliser les types approximatifs.
Types numériques¶
Snowflake comme catalogue¶
Le tableau suivant montre comment les types de données numériques Iceberg mappent les types de données numériques Snowflake pour les tables qui utilisent Snowflake comme catalogue Iceberg (tables gérées par Snowflake). Lorsque vous créez une table Iceberg gérée par Snowflake, vous pouvez utiliser les types de données Iceberg pour définir les colonnes numériques.
Type de données Iceberg |
Type de données Snowflake |
Remarques |
---|---|---|
|
L’insertion d’un nombre à 10 chiffres inférieur à la valeur minimale ou supérieur à la valeur maximale d’un entier signé de 32 bits entraîne une erreur hors plage. |
|
|
L’insertion d’un nombre à 19 chiffres inférieur à la valeur minimale ou supérieur à la valeur maximale d’un entier signé de 64 bits entraîne une erreur hors plage. |
|
|
Synonyme du type de données DOUBLE Snowflake. Snowflake traite tous les nombres à virgule flottante comme des nombres à virgule flottante de 64 bits double précision, mais écrit les nombres à virgule flottante Iceberg comme des nombres à virgule flottante de 32 bits dans les fichiers de données des tables. Le fait de réduire les conversions de 64 bits à 32 bits entraîne une perte de précision. Vous ne pouvez pas utiliser |
|
|
Synonyme du type de données DOUBLE Snowflake. Snowflake traite tous les nombres à virgule flottante comme des nombres à virgule flottante de 64 bits double précision. Le fait de réduire les conversions de 64 bits à 32 bits entraîne une perte de précision. Vous ne pouvez pas utiliser |
|
|
En spécifiant |
Catalogue externe¶
Lorsque vous créez une table Iceberg qui utilise un catalogue Iceberg externe, les types numériques Iceberg sont mappés aux types numériques Snowflake selon le tableau suivant.
Type de données Iceberg |
Type de données Snowflake |
---|---|
|
|
|
|
|
|
|
|
|
Note
Vous ne pouvez pas utiliser float
ni double
comme clés primaires (conformément à la spécification Apache Iceberg).
Autres types de données¶
Type de données Iceberg |
Type de données Snowflake |
Remarques |
---|---|---|
|
||
|
||
|
Précision à la microseconde selon les spécifications de la table Apache Iceberg. |
|
|
TIMESTAMP_NTZ(6) ou TIMESTAMP_LTZ(6), en fonction de la valeur du paramètre Snowflake TIMESTAMP_TYPE_MAPPING. |
Précision à la microseconde selon les spécifications de la table Apache Iceberg. Vous pouvez également utiliser le type physique Parquet |
|
Précision à la microseconde selon les spécifications de la table Apache Iceberg. Vous pouvez également utiliser le type physique Parquet |
|
|
||
|
Le type de données Lorsque vous utilisez un catalogue externe ou que vous créez une table à partir de fichiers dans le stockage d’objets, Snowflake mappe le type Iceberg |
|
|
Les colonnes de type structuré prennent en charge un maximum de 1 000 sous-colonnes. |
|
|
Les colonnes de type structuré prennent en charge un maximum de 1 000 sous-colonnes. |
|
|
Les colonnes de type structuré prennent en charge un maximum de 1 000 sous-colonnes. |
Types de données Delta¶
Le tableau suivant montre comment les types de données Delta mappent les types de données Snowflake pour les tables Iceberg créées à partir de fichiers de table Delta.
Type Delta |
Type de données Snowflake |
---|---|
BYTE |
NUMBER(3,0) |
SHORT |
NUMBER(5,0) |
INTEGER |
NUMBER(10,0) |
LONG |
NUMBER(20,0) |
FLOAT |
REAL |
DOUBLE |
REAL |
TIMESTAMP |
TIMESTAMP_LTZ(6) |
TIMESTAMP_NTZ |
TIMESTAMP_NTZ(6) |
BINARY |
BINARY |
STRING |
TEXT |
BOOLEAN |
BOOLEAN |
DECIMAL(P,S) |
NUMBER(P,S) |
Le tableau suivant montre comment les types de données imbriqués Delta mappent les types de données Snowflake.
Type imbriqué Delta |
Type de données Snowflake |
---|---|
STRUCT |
|
ARRAY |
|
MAP |
Considérations¶
Tenez compte des éléments suivants lorsque vous utilisez des types de données pour les tables Iceberg :
La conversion d’une table dont les colonnes utilisent les types de données Iceberg suivants n’est pas prise en charge :
uuid
fixed(L)
Pour les tables qui utilisent Snowflake comme catalogue, la création d’une table qui utilise le type de données Iceberg
uuid
n’est pas prise en charge.Pour tous les types de table Iceberg :
Les colonnes de type structuré prennent en charge un maximum de 1 000 sous-colonnes.
Iceberg prend en charge la précision à la microseconde pour les types time (temps) et timestamp (horodatage). Par conséquent, vous ne pouvez pas créer une table Iceberg dans Snowflake qui utilise une autre précision comme une précision à la milliseconde ou à la nanoseconde.
Vous ne pouvez pas utiliser
float
nidouble
comme clés primaires (conformément à la spécification Apache Iceberg).
Pour les tables créées à partir de fichiers Delta :
Les fichiers Parquet (fichiers de données pour les tables Delta) qui utilisent l’une des fonctionnalités ou l’un des types de données suivants ne sont pas pris en charge :
IDs de champ.
Le type de données est INTERVAL.
Le type de données DECIMAL avec une précision supérieure à 38.
Types LIST ou MAP avec représentation à un ou deux niveaux.
Types d’entiers non signés (INT(signé = faux)).
Le type de données est FLOAT16.