Types de données - Amazon Redshift

Types de données

Chaque valeur qu'Amazon Redshift stocke ou extrait possède un type de données avec un ensemble fixe de propriétés associées. Les types de données sont déclarés lorsque les tables sont créées. Un type de données contraint l'ensemble des valeurs qu'une colonne ou un argument peut contenir.

Le tableau suivant répertorie les types de données que vous pouvez utiliser dans les tables Amazon Redshift.

Type de données Alias Description
SMALLINT INT2 Entier signé sur deux octets
INTEGER INT, INT4 Entier signé sur quatre octets
BIGINT INT8 Entier signé sur huit octets
DECIMAL NUMERIC Valeur numérique exacte avec précision sélectionnable
REAL FLOAT4 Nombre à virgule flottante simple précision
DOUBLE PRECISION FLOAT8, FLOAT Nombre à virgule flottante de double précision
BOOLEAN BOOL Booléen logique (true/false)
CHAR CHARACTER, NCHAR, BPCHAR Chaîne de caractères de longueur fixe
VARCHAR CHARACTER VARYING, NVARCHAR, TEXT Chaîne de caractères de longueur variable avec une limite définie par l'utilisateur
DATE Date calendaire (année, mois, jour)
TIMESTAMP TIMESTAMP WITHOUT TIME ZONE Date et heure (sans fuseau horaire)
TIMESTAMPTZ TIMESTAMP WITH TIME ZONE Date et heure (avec fuseau horaire)
GEOMETRY Données spatiales
GEOGRAPHY Données spatiales
HLLSKETCH Type utilisé avec les esquisses HyperLogLog.
SUPER Type de données superset qui englobe tous les types scalaires d'Amazon Redshift, y compris les types complexes tels que ARRAY et STRUCTS.
TIME TIME WITHOUT TIME ZONE Time of day
TIMETZ TIME WITH TIME ZONE Time of day with time zone
VARBYTE VARBINARY, BINARY VARYING Valeur binaire de longueur variable
Note

Pour plus d'informations sur les types de données non pris en charge, tels que "char" (notez que char est placé entre guillemets), consultez Types de données PostgreSQL non pris en charge.

Caractères multioctets

Le type de données VARCHAR prend en charge les caractères multioctets UTF-8 jusqu'à un maximum de quatre octets. Les caractères de cinq octets ou plus ne sont pas pris en charge. Pour calculer la taille d'une colonne VARCHAR qui contient des caractères multioctets, multipliez le nombre de caractères par le nombre d'octets par caractère. Par exemple, si une chaîne possède quatre caractères chinois et que chaque caractère est long de trois octets, vous avez besoin d'une colonne VARCHAR(12) pour stocker la chaîne.

Le type de données VARCHAR ne prend pas en charge les points de code UTF-8 non valides suivants :

0xD800 – 0xDFFF (Séquences d'octets :ED A0 80ED BF BF)

Le type de données CHAR ne prend pas en charge les caractères multioctets.

Compatibilité et conversion de types

Vous trouverez ci-dessous une discussion sur la façon dont les règles de conversion de type et la compatibilité des types de données fonctionnent dans Amazon Redshift.

Compatibilité

La correspondance des types de données et la correspondance des valeurs littérales et des constantes avec les types de données se produisent lors de différentes opérations de base de données, dont les suivantes :

  • Opérations DML (Data Manipulation Language) sur les tables

  • Requêtes UNION, INTERSECT et EXCEPT

  • Expressions CASE

  • Evaluation de prédicats, tels que LIKE et IN

  • Evaluation de fonctions SQL qui effectuent des comparaisons ou des extractions de données

  • Comparaisons avec les opérateurs mathématiques

Les résultats de ces opérations dépendent des règles de conversion de types et de la compatibilité des types de données. La compatibilité implique qu'une correspondance un-à-un d'une certaine valeur et d'un certain type de données ne soit pas toujours obligatoire. Comme certains types de données sont compatibles, une conversion implicite ou forçage de type, est possible (pour plus d'informations, consultez Types de conversion implicite). Lorsque les types de données sont incompatibles, vous pouvez parfois convertir une valeur d'un type de données en un autre à l'aide d'une fonction de conversion explicite.

Compatibilité générale et règles de conversion

Notez les règles de compatibilité et de conversion suivantes :

  • En général, les types de données qui appartiennent à la même catégorie (comme les différents types de données numériques) sont compatibles et peuvent être convertis implicitement.

    Par exemple, avec une conversion implicite, vous pouvez insérer une valeur décimale dans une colonne de type entier. La partie décimale est arrondie pour produire un nombre entier. Ou vous pouvez extraire une valeur numérique, telle que 2008, d'une date et insérer cette valeur dans une colonne de type entier.

  • Les types de données numériques appliquent les conditions de dépassement de capacité qui se produisent lorsque vous essayez d'insérer des valeurs en dehors de la plage. Par exemple, une valeur décimale avec une précision de 5 ne peut contenir dans une colonne décimale dont la précision est 4. Un nombre entier ou la partie entière d'un nombre décimal ne sont jamais tronqués ; toutefois, la partie fractionnaire d'un nombre décimal peut être arrondie vers le haut ou vers le bas, selon le cas. Cependant, les résultats de conversions explicites de valeurs sélectionnées dans les tables ne sont pas arrondis.

  • Différents types de chaînes de caractères sont compatibles ; les chaînes de colonnes VARCHAR contenant des données codées sur un seul octet et les chaînes de colonne CHAR sont comparables et implicitement convertibles. Les chaînes VARCHAR qui contiennent des données codées sur plusieurs octets ne sont pas comparables. Vous pouvez également convertir une chaîne de caractères en une date, une heure, un horodatage ou une valeur numérique si la chaîne est une valeur littérale appropriée ; les espaces de début ou de fin sont ignorés. Inversement, vous pouvez convertir une date, une heure, un horodatage ou une valeur numérique en une chaîne de caractères de longueur fixe ou variable.

    Note

    Une chaîne de caractères que vous voulez convertir en type numérique doit comporter la représentation en caractères d'un nombre. Par exemple, vous pouvez convertir les chaînes '1.0' ou '5.9' en valeurs décimales, mais vous ne pouvez pas convertir la chaîne 'ABC' en un type numérique.

  • Si vous comparez les valeurs numériques aux chaînes de caractères, les valeurs numériques sont converties en chaînes de caractères. Pour appliquer la conversion inverse (convertir des chaînes de caractères en valeurs numériques), utilisez une fonction explicite, telles que CAST et CONVERT.

  • Pour convertir les valeurs DECIMAL ou NUMERIC 64 bits en une plus grande précision, vous devez utiliser une fonction de conversion explicite telle que les fonctions CAST ou CONVERT.

  • Lors de la conversion de DATE ou TIMESTAMP en TIMESTAMPTZ, ou de la conversion de TIME en TIMESTAMP, le fuseau horaire de la session en cours. Le fuseau horaire de session est UTC par défaut. Pour plus d'informations sur le réglage du fuseau horaire de la session, consultez timezone.

  • De même, TIMESTAMPTZ est converti en DATE, TIME ou TIMESTAMP en fonction du fuseau horaire de la session en cours. Le fuseau horaire de session est UTC par défaut. Après la conversion, les informations sur les fuseaux horaires sont abandonnées.

  • Les chaînes de caractères qui représentent un horodatage avec un fuseau horaire spécifié sont converties en TIMESTAMPTZ en utilisant le fuseau horaire de la session actuelle, qui est UTC par défaut. De même, les chaînes de caractères qui représentent un fuseau horaire spécifié sont converties en TIPZ à l'aide du fuseau horaire de la session en cours, UTC par défaut.

Types de conversion implicite

Il existe deux types de conversion implicite :

  • Conversions implicites d'affectations, telles que la définition de valeurs dans les commandes INSERT ou UPDATE.

  • Conversions implicites d'expressions, comme l'exécution de comparaisons dans la clause WHERE.

Le tableau suivant répertorie les types de données qui peuvent être convertis implicitement dans les affectations ou les expressions. Vous pouvez également utiliser une fonction de conversion explicite pour exécuter ces conversions.

Type de départ Type d'arrivée
BIGINT (INT8) BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
CHAR VARCHAR
DATE CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT (INT8)
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
INTEGER (INT, INT4) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
REAL (FLOAT4) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT, INT4)
SMALLINT (INT2)
VARCHAR
SMALLINT (INT2) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATE
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
DATE
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
TIMETZ VARCHAR
TIME
GEOMETRY GEOGRAPHY
GEOGRAPHY GEOMETRY
Note

Les conversions implicites entre TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ ou les chaînes de caractères utilisent le fuseau horaire actuel de la session. Pour plus d'informations sur la définition du fuseau horaire en cours, consultez timezone.

Les types de données GEOMETRY et GEOGRAPHY ne peuvent pas être convertis de façon implicite dans un autre type de données, excepté l'un dans l'autre. Pour plus d'informations, consultez Fonctions CAST et CONVERT.

Le type de données VARBYTE ne peut pas être converti de façon implicite dans un autre type de données. Pour plus d'informations, consultez Fonctions CAST et CONVERT.

Utilisation du typage dynamique pour le type de données SUPER

Amazon Redshift utilise le typage dynamique pour traiter des données SUPER sans schéma sans avoir à déclarer les types de données avant de les utiliser dans votre requête. Le typage dynamique utilise les résultats de la navigation dans les colonnes de données SUPER sans devoir les convertir explicitement en types Amazon Redshift. Pour plus d'informations sur l'utilisation du typage dynamique pour le type de données SUPER, veuillez consulter Typage dynamique.

Vous pouvez lancer des valeurs SUPER depuis et vers d'autres types de données, à quelques exceptions près. Pour plus d'informations, consultez Limites.