Amazon Athena
Guide de l'utilisateur

CREATE TABLE

Permet de créer une table avec le nom et les paramètres que vous spécifiez.

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], ...)] [ROW FORMAT row_format] [STORED AS file_format] [WITH SERDEPROPERTIES (...)] ] [LOCATION 's3_loc'] [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 Amazon S3, dans le LOCATION que vous spécifiez. 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 clauses ROW FORMAT, STORED AS et WITH SERDEPROPERTIES.

[IF NOT EXISTS]

Entraîne la suppression du message d'erreur s'il existe déjà une table nommée table_name.

[db_name.]table_name

Spécifie un nom pour la table à créer. Le paramètre facultatif db_name indique 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, mettez table_name entre guillemets, par exemple "table123". Si table_name commence 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.

[ ( 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 (_). Si col_name commence par un trait de soulignement, placez le nom de colonne entre des accents graves, par exemple `_mycolumn`.

data_type peut avoir l'une des valeurs suivantes :

  • BOOLEAN. Les valeurs sont true et false.

  • TINYINT. Un INTEGER de 8 bits signé au format de complément à deux avec une valeur minimum de -2^7 et une valeur maximum de 2^7-1.

  • SMALLINT. Un INTEGER de 16 bits signé au format de complément à deux avec une valeur minimum de -2^15 et une valeur maximum de 2^15-1.

  • INT. Athena combine deux implémentations différentes du type de données INTEGER. Dans les requêtes Langage de définition de données (DDL), Athena utilise le type de données INT. Dans toutes les autres requêtes, Athena utilise le type de donnéesINTEGER, où 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 2^31 et une valeur maximum de 2^31-1. Dans le pilote JDBC, INTEGER est renvoyé, pour assurer la compatibilité avec les applications d'analyse d'entreprise.

  • BIGINT.Un INTEGER de 64 bits signé au format de complément à deux avec une valeur minimum de -2^63 et une valeur maximum de 2^63-1.

  • DOUBLE

  • FLOAT

  • DECIMAL [ (precision, scale) ], où precision est le nombre total de chiffres et scale (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 : DECIMAL(11,5), DECIMAL(15).

    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 requête DDL, spécifiez la définition de typeDECIMAL 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 de caractères de longueur fixe, avec une longueur spécifiée entre 1 et 255, par exemple char(10). Pour plus d'informations, consultez la section relative au type de données Hive CHAR.

  • VARCHAR. Données de caractères de longueur variable, avec une longueur spécifiée entre 1 et 65535, par exemple varchar(10). Pour plus d'informations, consultez la section relative au type de données Hive VARCHAR.

  • BINARY (pour les données en Parquet)

  • Types de date et d'heure

  • DATE, au format UNIX, par exemple YYYY-MM-DD.

  • TIMESTAMP. Instantané dans le temps et date au format UNiX, par exemple yyyy-mm-dd hh:mm:ss[.f...]. Par exemple, TIMESTAMP '2008-09-15 03:04:05.324'. Ce format utilise le fuseau horaire de la session.

  • 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 comment et la renseigne avec l'information table_comment que 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_type et col_comment sont 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 de col_name est 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;.

[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 clause DELIMITED, ou utiliser la clause SERDE comme décrit ci-dessous. Si ROW FORMAT n'est pas spécifié ou que vous spécifiez ROW 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] - (Remarque : Disponible dans Hive 0.13 et ses versions ultérieures)

--OR--

  • SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value", "property_name" = "property_value" [, ...] )]

    Le serde_name indique le SerDe à utiliser. La clause WITH SERDEPROPERTIES vous 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é, TEXTFILE est la valeur par défaut. Les options de file_format sont les suivantes :

  • SEQUENCEFILE

  • TEXTFILE

  • RCFILE

  • ORC

  • PARQUET

  • AVRO

  • INPUTFORMAT nom_classe_format_entrée OUTPUTFORMAT nom_classe_format_sortie

[LOCATION 'S3_loc']

Indique l'emplacement des données sous-jacentes dans Amazon S3 à partir desquelles la table est créée, par exemple, 's3://mystorage/'. Pour plus d'informations sur des considérations telles que les autorisations et le format de données, reportez-vous à la section relative aux exigences pour les tables dans Athena et pour les données dans 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://mybucket/key/

N'utilisez pas : s3://path_to_bucket s3://path_to_bucket/* s3://path_to-bucket/mydatafile.dat

[TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',] 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".

Athena dispose d'une propriété intégrée, has_encrypted_data. Attribuez la valeur true à cette propriété pour indiquer que l'ensemble de données sous-jacent spécifié par LOCATION est 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, false est utilisé. Si ce paramètre n'est pas spécifié ou si la valeur false est définie lorsque des données sous-jacentes sont chiffrées, la requête génère une erreur. Pour plus d'informations, consultez Configuration des options de chiffrement.

Pour exécuter les tâches ETL, AWS Glue exige de votre part la création d'une table avec la propriété classification pour indiquer le type de données csv, parquet, orc, avro ou json pour AWS Glue. 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, reportez-vous aux sections relatives à l'Utilisation des tâches AWS Glue pour ETL avec Athena et à la Création de tâches dans Glue dans le Guide du développeur AWS Glue.

Exemples

CREATE EXTERNAL TABLE IF NOT EXISTS mydatabase.cloudfront_logs ( Date DATE, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, os STRING, Browser STRING, BrowserVersion STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples/cloudfront/plaintext/';

Sur cette page :