CREATE TABLE
Permet de créer une table avec le nom et les paramètres que vous spécifiez.
Note
Cette page contient un résumé des informations de référence. Pour plus d'informations sur la création des tables dans Athena et un exemple de déclaration CREATE TABLE, consultez Création de tables dans Athena. En guise d'exemple en matière de création d'une base de données, de création d'une table et d'exécution d'une requête SELECT sur la table dans Athena, voir Premiers pas.
Résumé
CREATE EXTERNAL TABLE [IF NOT EXISTS]
[db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[WITH SERDEPROPERTIES (...)]
[LOCATION 's3://amzn-s3-demo-bucket/[folder]/']
[TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]
Paramètres
- EXTERNAL
-
Indique que la table est basée sur un fichier de données sous-jacent qui existe dans Simple Storage Service (Amazon S3), dans l'emplacement
LOCATIONque vous avez spécifié. Sauf lors de la création de tables Iceberg, utilisez toujours le mot-cléEXTERNAL. Si vous utilisezCREATE TABLEsans le mot cléEXTERNALpour des tables non Iceberg, Athena émet une erreur. Lorsque vous créez une table externe, les données référencées doivent respecter le format par défaut ou le format que vous spécifiez à l'aide des clausesROW FORMAT,STORED ASetWITH SERDEPROPERTIES.
- [IF NOT EXISTS]
-
Ce paramètre vérifie si une table ayant le même nom existe déjà. Si c'est le cas, le paramètre renvoie
TRUEet Amazon Athena annule l'actionCREATE TABLE. L'annulation ayant lieu avant qu'Athéna n'appelle le catalogue de données, aucun événement AWS CloudTrail n'est émis. - [db_name.]table_name
-
Spécifie un nom pour la table à créer. Le paramètre facultatif
db_nameindique la base de données dans laquelle se trouve la table. Si ce paramètre n'est pas spécifié, la base de données en cours est utilisée par défaut. Si le nom de la table comporte des chiffres, metteztable_nameentre guillemets, par exemple"table123". Sitable_namecommence par un trait de soulignement, utilisez des accents graves, par exemple`_mytable`. Les caractères spéciaux (autres que le trait de soulignement) ne sont pas pris en charge.Les noms de table Athena ne sont pas sensibles à la casse. Cependant, si vous travaillez avec Apache Spark, les noms de table doivent être en minuscule. Concernant les restrictions relatives aux noms de tables dans Athena, consultez Attribution de noms aux tables, aux bases de données et aux colonnes.
- [ ( col_name data_type [COMMENT col_comment] [, ...] ) ]
-
Indique le nom de chaque colonne à créer, ainsi que le type de données de la colonne. Les noms de colonne n'acceptent pas de caractères spéciaux autres que le trait de soulignement
(_). Sicol_namecommence par un trait de soulignement, placez le nom de colonne entre des accents graves, par exemple`_mycolumn`. Concernant les restrictions relatives aux noms de colonnes dans Athena, consultez Attribution de noms aux tables, aux bases de données et aux colonnes.data_typepeut avoir l'une des valeurs suivantes :-
boolean– les valeurs sonttrueetfalse. -
tinyint– Un entier signé de 8 bits au format de complément à deux avec une valeur minimum de -2^7 et une valeur maximum de 2^7-1. -
smallint– Un entier signé de 16 bits au format de complément à deux avec une valeur minimum de -2^15 et une valeur maximum de 2^15-1. -
int– Dans les requêtes en langage de définition de données (DDL) telles queCREATE TABLE, utilisez le mot-cléintpour représenter un entier. Dans d'autres requêtes, utilisez le mot cléinteger, oùintegerest représenté comme une valeur signée de 32 bits au format complément à deux, avec une valeur minimale de -2^31 et une valeur maximale de 2^31-1. Dans le pilote JDBC,integerest renvoyé, pour assurer la compatibilité avec les applications d'analyse d'entreprise. -
bigint– Un entier signé de 64 bits au format de complément à deux avec une valeur minimum de -2^63 et une valeur maximum de 2^63-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.doublesuit 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.floatsuit le standard IEEE pour l'arithmétique à virgule flottante (IEEE 754). Équivalent àrealdans Presto. Dans Athena, utilisezfloatdans les Instructions DDL commeCREATE TABLEetrealdans les fonctions SQL commeSELECT CAST. Le Crawler AWS Glue renvoie les valeurs en formatfloatet Athena traduit les typesrealetfloaten interne (voir les notes de mise à jour 5 juin 2018). -
decimal [ (, oùprecision,scale) ]est le nombre total de chiffres etprecision(facultatif) est le nombre de chiffres dans la partie fraction, la valeur par défaut est 0. Par exemple, utilisez ces définitions de type :scaledecimal(11,5),decimal(15). La valeur maximale pour laprécisionest de 38, et la valeur maximale pour l'échelleest 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
decimalet 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. -
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.Note
Les types de données autres que les chaînes de caractères ne peuvent pas être convertis en
stringdans Athena ; convertissez-les plutôt envarchar. -
binary– (pour les données au format Parquet) -
date– date au format ISO, par exemple. Par exemple,YYYY-MM-DDdate '2008-09-15'. Une exception est l'OpenCSVSerDe, qui utilise le nombre de jours écoulés depuis le 1er janvier 1970. Pour plus d’informations, consultez SerDe Open CSV pour le traitement de données CSV. -
timestamp- Date et heure instantanées dans un format compatiblejava.sql.Timestampdont la résolution maximale est de l'ordre de la milliseconde, comme . Par exemple,yyyy-MM-ddHH:mm:ss[.f...]timestamp '2008-09-15 03:04:05.324'. Une exception est l'OpenCSVSerDe, qui utilise des donnéesTIMESTAMPau format numérique UNIX (par exemple,1579059880000). Pour plus d’informations, consultez SerDe Open CSV pour le traitement de données CSV. -
array< data_type > -
map< primitive_type, data_type > -
struct< col_name : data_type [comment col_comment] [, ...] >
-
- [COMMENT table_comment]
-
Crée la propriété de table
commentet la renseigne avec l'informationtable_commentque vous spécifiez. - [PARTITIONED BY (col_name data_type [ COMMENT col_comment ], ... ) ]
-
Crée une table partitionnée avec une ou plusieurs colonnes de partition dont les valeurs
col_name,data_typeetcol_commentsont spécifiées. Une table peut comporter une ou plusieurs partitions, qui se composent d'une combinaison nom/valeur de colonne distincte. Un répertoire de données distinct est créé pour chaque combinaison spécifiée, ce qui peut améliorer les performances des requêtes dans certaines circonstances. Les colonnes partitionnées n’existent pas au sein même des données de la table. Si la valeur decol_nameest identique à celle d'une colonne de table, une erreur est renvoyée. Pour en savoir plus, consultez Partitionnement de données.Note
Une fois que vous avez créé une table avec des partitions, exécutez une requête ultérieure composée de la clause MSCK REPAIR TABLE pour actualiser les métadonnées de partition, par exemple
MSCK REPAIR TABLE cloudfront_logs;. Pour les partitions qui ne sont pas compatibles avec Hive, utilisez ALTER TABLE ADD PARTITION pour charger les partitions de manière à pouvoir interroger les données.
- [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
-
Divise, avec ou sans partitionnement, les données des colonnes
col_namespécifiées en sous-ensembles de données appelés compartiments. Le paramètrenum_bucketsindique le nombre de compartiments à créer. Le compartimentage peut améliorer les performances de certaines requêtes sur de grands jeux de données.
- [ROW FORMAT row_format]
-
Spécifie le format de ligne de la table et, le cas échéant, de ses données source sous-jacentes. Pour
row_format, vous pouvez spécifier un ou plusieurs délimiteurs avec la clauseDELIMITED, ou utiliser la clauseSERDEcomme décrit ci-dessous. SiROW FORMATn'est pas spécifié ou que vous spécifiezROW FORMAT DELIMITED, un SerDe natif est utilisé.-
[DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]
-
[DELIMITED COLLECTION ITEMS TERMINATED BY char]
-
[MAP KEYS TERMINATED BY char]
-
[LINES TERMINATED BY char]
-
[NULL DEFINED AS char]
Disponible uniquement avec Hive 0.13 et lorsque le format de fichier STORED AS a pour valeur
TEXTFILE.
--OU--
-
SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value", "property_name" = "property_value" [, ...] )]
Le
serde_nameindique le SerDe à utiliser. La clauseWITH SERDEPROPERTIESvous permet de fournir une ou plusieurs propriétés personnalisées autorisées par le SerDe.
-
- [STORED AS format_fichier]
-
Spécifie le format de fichier pour les données de table. Si ce paramètre n'est pas spécifié,
TEXTFILEest la valeur par défaut. Les options defile_formatsont les suivantes :-
SEQUENCEFILE
-
TEXTFILE
-
RCFILE
-
ORC
-
PARQUET
-
AVRO
-
ION
-
INPUTFORMAT nom_classe_format_entrée OUTPUTFORMAT nom_classe_format_sortie
-
- [LOCATION 's3://amzn-s3-demo-bucket/[folder]/']
-
Indique l'emplacement des données sous-jacentes dans Simple Storage Service (Amazon S3) à partir duquel la table est créée. Le chemin d'accès de l'emplacement doit être un nom de compartiment ou un nom de compartiment et un ou plusieurs dossiers. Si vous utilisez des partitions, spécifiez la racine des données partitionnées. Pour plus d’informations sur l’emplacement des tables, consultez Spécification de l’emplacement d’une table dans Amazon S3. Pour obtenir des informations sur le format des données et les autorisations, consultez Éléments à prendre en compte concernant Amazon S3.
Utilisez une barre oblique pour votre dossier ou compartiment. N'utilisez pas de noms de fichiers ou de caractères généraux.
Utilisez:
s3://amzn-s3-demo-bucket/s3://amzn-s3-demo-bucket/folder/s3://amzn-s3-demo-bucket/folder/anotherfolder/N'utilisez pas:
s3://amzn-s3-demo-buckets3://amzn-s3-demo-bucket/*s3://amzn-s3-demo-bucket/mydatafile.dat - [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='classification_value',] property_name=property_value [, ...] ) ]
-
Spécifie des paires clés-valeurs de métadonnées personnalisées pour la définition de la table en plus des propriétés de table prédéfinies, par exemple
"comment".has_encrypted_data : Athena dispose d'une propriété intégrée,
has_encrypted_data. Attribuez la valeurtrueà cette propriété pour indiquer que l’ensemble de données sous-jacent spécifié parLOCATIONest chiffré. Si ce paramètre n’est pas spécifié et si les paramètres du groupe de travail ne remplacent pas les paramètres côté client,falseest utilisé. Si ce paramètre n’est pas spécifié ou si la valeurfalseest définie lorsque des données sous-jacentes sont chiffrées, la requête génère une erreur. Pour de plus amples informations, consultez Chiffrement au repos.classification : les tables créées pour Athena dans la console CloudTrail sont ajoutent
cloudtrailcomme valeur pour la propriétéclassification. Pour exécuter les tâches ETL, AWS Glue exige de votre part la création d’une table avec la propriétéclassificationpour indiquer le type de données pour AWS Glue :csv,parquet,orc,avrooujson. Par exemple,'classification'='csv'. Les tâches ETL échoueront si vous ne spécifiez pas cette propriété. Vous pouvez par conséquent la spécifier à l'aide de la console AWS Glue, de l'API ou de l'interface de ligne de commande (CLI). Pour plus d'informations, consultez Création de tables dans le cadre de tâches d’extraction, de transformation et de chargement (ETL) et Création de tâches dans AWS Glue dans le AWS Glue Guide du développeur.compression_level : la propriété
compression_levelspécifie le niveau de compression à utiliser. Cette propriété s’applique uniquement à la compression ZSTD. Les valeurs possibles sont comprises entre 1 et 22. La valeur par défaut est 3. Pour plus d’informations, consultez Utilisation des niveaux de compression ZSTD.Pour plus d’informations sur les autres propriétés de table, consultez ALTER TABLE SET TBLPROPERTIES.
Exemples
L’exemple d’instruction CREATE TABLE ci-dessous crée une table basée sur des données de planète séparées par des tabulations et stockées dans Amazon S3.
CREATE EXTERNAL TABLE planet_data ( planet_name string, order_from_sun int, au_to_sun float, mass float, gravity_earth float, orbit_years float, day_length float ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/tsv/'
Notez les points suivants :
-
La clause
ROW FORMAT DELIMITEDindique que les données sont délimitées par un caractère spécifique. -
La clause
FIELDS TERMINATED BY '\t'indique que les champs des données TSV sont séparés par le caractère de tabulation ('\t'). -
La clause
STORED AS TEXTFILEindique que les données sont stockées sous forme de fichiers de texte brut dans Amazon S3.
Pour interroger les données, vous pouvez utiliser une instruction SELECT simple telle que celle-ci :
SELECT * FROM planet_data
Pour utiliser cet exemple afin de créer votre propre table TSV dans Athena, remplacez les noms de table et de colonnes par les noms et types de données de votre propre table et de vos colonnes et mettez à jour la clause LOCATION pour qu’elle pointe vers le chemin Amazon S3 au niveau duquel vos fichiers TSV sont stockés.
Pour plus d’informations sur la création de tables, consultez Création de tables dans Athena.