Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Types de données dans Amazon Athena
Lorsque vous exécutez CREATE TABLE (CRÉER UNE TABLE), vous spécifiez des noms de colonne et le type de données que chaque colonne peut contenir. Athena prend en charge les types de données répertoriés ci-dessous. Pour plus d'informations sur les mappages de types de données que le pilote JDBC prend en charge entre Athena, JDBC et Java, consultez la rubrique Types de données
-
boolean
: les valeurs sonttrue
etfalse
. -
tinyint
– Un entier signé de 8 bits au format de complément à deux avec une valeur minimum de -27 et une valeur maximum de 27-1. -
smallint
– Un entier signé de 16 bits au format de complément à deux avec une valeur minimum de -215 et une valeur maximum de 215-1. -
int
etinteger
: Athena utilise différentes expressions pour les entiers en fonction du type de requête.-
int
: dans les requêtes DDL (Data Definition Language) telles queCREATE TABLE
, utilisez le type de donnéesint
. -
integer
: dans les requêtes DML telles queSELECT * FROM
, utilisez le type de donnéesinteger
.integer
est représenté sous la forme d'une valeur de 32 bits signée au format de complément à deux, avec une valeur minimum de -231 et une valeur maximum de 231-1.-
Afin de garantir la compatibilité avec les applications d'analyse d'entreprise, le pilote JDBC renvoie le type
integer
.
-
-
-
bigint
– Un entier signé de 64 bits au format de complément à deux avec une valeur minimum de -263 et une valeur maximum de 263-1. -
double
: un nombre à virgule flottante signé de 64 bits en double précision. La plage va de 4.94065645841246544e-324d à 1.79769313486231570e+308d, positif ou négatif.double
suit le standard IEEE pour l'arithmétique à virgule flottante (IEEE 754). -
float
: un nombre à virgule flottante signé à simple précision de 32 bits. La plage va de 1.40129846432481707e-45 à 3.40282346638528860e+38, positif ou négatif.float
suit le standard IEEE pour l'arithmétique à virgule flottante (IEEE 754). Équivalent àreal
dans Presto. Dans Athena, utilisezfloat
dans les Instructions DDL commeCREATE TABLE
etreal
dans les fonctions SQL commeSELECT CAST
. Le AWS Glue crawler renvoie des valeursfloat
, et Athena lesreal
traduitfloat
et les saisit en interne (voir 5 juin 2018 les notes de publication). -
decimal
(
–precision
,scale
)
est le nombre total de chiffres.precision
(facultatif) est le nombre de chiffres dans la partie fractionnaire avec une valeur par défaut de 0. Par exemple, utilisez ces définitions de type :scale
decimal(11,5)
,decimal(15)
. La valeur maximale pour laprécision
est de 38, et la valeur maximale pour l'échelle
est de 38.Pour spécifier des valeurs décimales comme les littéraux, par exemple lorsque vous sélectionnez des lignes avec une valeur décimale dans une expression de requête DDL, spécifiez la définition de type
decimal
et répertoriez la valeur décimale en tant que valeur littérale (entre des guillemets simples) dans votre requête, comme dans l'exemple suivant :decimal_value = decimal '0.12'
. -
char
: données en caractères de longueur fixe, avec une longueur spécifiée entre 1 et 255, par exemplechar(10)
. Pour plus d'informations, consultez la section relative au type de données Hive CHAR. Note
Pour utiliser la fonction
substr
pour renvoyer une sous-chaîne de longueur spécifiée à partir d'un type de donnéeschar
, vous devez d'abord convertir la valeurchar
sous la forme devarchar
, comme dans l'exemple suivant.substr(cast(col1 as varchar), 1, 4)
-
varchar
: données en caractères de longueur variable, avec une longueur spécifiée entre 1 et 65535, par exemplevarchar(10)
. Pour plus d'informations, consultez la section relative au type de données Hive VARCHAR. -
string
: libellé chaîne entre guillemets simples ou doubles. Pour plus d'informations, consultez la section relative au type de données Hive STRING. Note
Les types de données autres que les chaînes de caractères ne peuvent pas être convertis en
string
dans Athena ; convertissez-les plutôt envarchar
. -
ipaddress
— Représente une adresse IP dans les requêtes DML. Non pris en charge pour le DDL. Pour plus d'informations, consultez IPADDRESS. -
binary
: utilisé pour les données au format Parquet. -
date
: date au format ISO, par exemple
. Par exemple,YYYY
-MM
-DD
date '2008-09-15'
. Une exception est l'SerDeOpenCSV, qui utilise le nombre de jours écoulés depuis le 1er janvier 1970. Pour de plus amples informations, veuillez consulter OpenCSVSerDe pour le traitement CSV. -
timestamp
: date et heure instantanée dansjava.sql.Timestamp
jusqu'à une résolution maximale de millisecondes, comme
. Par exemple,yyyy
-MM
-dd
HH
:mm
:ss
[.f...
]timestamp '2008-09-15 03:04:05.324'
. L'SerDeOpenCSV constitue une exception, car iltimestamp
utilise des données au format numérique UNIX (par exemple,).1579059880000
Pour plus d'informations sur l'utilisation d'horodatages, consultez Utilisation des données d'horodatage plus loin dans ce document.
-
array
<
: un tableau du type de composant donné.data_type
>Exemple
CREATE TABLE table array_table (c1 array<integer>) LOCATION '...'; INSERT INTO array_table values(ARRAY[1,2,3]);
-
map
<
: une carte entre les types de composants donnés.primitive_type
,data_type
>Exemple
CREATE TABLE map_table(c1 map<string, integer>) LOCATION '...'; INSERT INTO map_table values(MAP(ARRAY['foo', 'bar'], ARRAY[1, 2]));
-
struct
<
: un ensemble d'éléments de différents types de composants.col_name
:data_type
,...
>Exemple
CREATE TABLE struct_table(c1 struct<name:varchar(10), age:integer>) LOCATION '...'; INSERT INTO struct_table SELECT CAST(ROW('Bob', 38) AS ROW(name VARCHAR(10), age INTEGER));
Utilisation des données d'horodatage
Cette section décrit certaines considérations relatives à l'utilisation des données d'horodatage dans Athena.
Note
Le traitement des horodatages a quelque peu changé entre les versions 2 et 3 du moteur Athena. Pour plus d'informations sur les erreurs liées à l'horodatage qui peuvent se produire dans la version 3 du moteur Athena et sur les solutions proposées, consultez Modifications d'horodatage dans la référence Version 3 du moteur Athena.
Format pour écrire des données d'horodatage dans des objets Amazon S3
Le format dans lequel les données d'horodatage doivent être écrites dans les objets Amazon S3 dépend à la fois du type de données de colonne et de la SerDebibliothèque que vous utilisez.
-
Si vous avez une colonne de table de type
DATE
, Athena s'attend à ce que la colonne ou la propriété correspondante des données soit une chaîne au format ISOYYYY-MM-DD
ou un type de date intégré comme ceux de Parquet ou ORC. -
Si vous avez une colonne de table de type
TIME
, Athena s'attend à ce que la colonne ou la propriété correspondante des données soit une chaîne au format ISOHH:MM:SS
ou un type d'heure intégré comme ceux de Parquet ou ORC. -
Si vous avez une colonne de table de type
TIMESTAMP
, Athena s'attend à ce que la colonne ou la propriété correspondante des données soit une chaîne au formatYYYY-MM-DD HH:MM:SS.SSS
(notez l'espace entre la date et l'heure) ou un type d'heure intégré comme ceux de Parquet, ORC ou Ion.Note
Les horodatages SerDe OpenCSV constituent une exception et doivent être codés sous forme d'époques UNIX d'une résolution de l'ordre de la milliseconde.
S'assurer que les données partitionnées dans le temps correspondent au champ d'horodatage d'un enregistrement
Le producteur des données doit s'assurer que les valeurs de partition correspondent aux données contenues dans la partition. Par exemple, si vos données ont une timestamp
propriété et que vous utilisez Firehose pour les charger dans Amazon S3, vous devez utiliser le partitionnement dynamique car le partitionnement par défaut de Firehose est le suivant. wall-clock-based
Utiliser STRING comme type de données pour les clés de partition
Pour des raisons de performances, il est préférable d'utiliser STRING
comme type de données pour les clés de partition. Même si Athena reconnaît les valeurs de partition au format YYYY-MM-DD
comme des dates lorsque vous utilisez le type DATE
, cela peut entraîner de mauvaises performances. Pour cette raison, nous vous recommandons d'utiliser plutôt le type de données STRING
pour les clés de partition.
Comment écrire des requêtes pour des champs d'horodatage qui sont également partitionnés dans le temps
La façon dont vous rédigez les requêtes pour les champs d'horodatage partitionnés dans le temps dépend du type de table que vous souhaitez interroger.
Tables Hive
Avec les tables Hive les plus couramment utilisées dans Athena, le moteur de requête n'a aucune connaissance des relations entre les colonnes et les clés de partition. Pour cette raison, vous devez toujours ajouter des prédicats dans vos requêtes pour la colonne et pour la clé de partition.
Supposons, par exemple, que vous disposiez d'une colonne event_time
et d'une clé de partition event_date
et que vous souhaitiez interroger des événements survenus entre 23 h 00 et 03 h 00. Dans ce cas, vous devez inclure des prédicats dans votre requête pour la colonne et pour la clé de partition, comme dans l'exemple suivant.
WHERE event_time BETWEEN
start_time
ANDend_time
AND event_date BETWEENstart_time_date
ANDend_time_date
Tables Iceberg
Avec les tables Iceberg, vous pouvez utiliser des valeurs de partition calculées, ce qui simplifie vos requêtes. Supposons, par exemple, que votre table Iceberg ait été créée avec une clause PARTITIONED BY
comme celle-ci :
PARTITIONED BY (event_date month(event_time))
Dans ce cas, le moteur de requête réduit automatiquement les partitions en fonction des valeurs des prédicats event_time
. Pour cette raison, votre requête doit uniquement spécifier un prédicat pour event_time
, comme dans l'exemple suivant.
WHERE event_time BETWEEN
start_time
ANDend_time
Pour de plus amples informations, veuillez consulter Création de tables Iceberg.