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.
Maintenant que vous avez une base de données, vous pouvez créer une table Athena pour celle-ci. Le tableau que vous créez sera basé sur des exemples de données de CloudFront journal Amazon indiquant l'emplacements3://athena-examples-
, où se myregion
/cloudfront/plaintext/myregion
trouve votre emplacement actuel Région AWS.
Les exemples de données du journal sont au format valeurs séparées par des TSV tabulations (), ce qui signifie qu'un caractère de tabulation est utilisé comme séparateur pour séparer les champs. Les données ressemblent à l'exemple suivant. Pour plus de lisibilité, les onglets de l'extrait ont été convertis en espaces et le champ final a été raccourci.
2014-07-05 20:00:09 DFW3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-1.jpeg 200 - Mozilla/5.0[...]
2014-07-05 20:00:09 DFW3 4252 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-2.jpeg 200 - Mozilla/5.0[...]
2014-07-05 20:00:10 AMS1 4261 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-3.jpeg 200 - Mozilla/5.0[...]
Pour permettre à Athéna de lire ces données, vous pouvez créer une CREATE
EXTERNAL TABLE
déclaration simple comme celle-ci. L'instruction qui crée la table définit les colonnes qui correspondent aux données, spécifie comment les données sont délimitées et spécifie l'emplacement Simple Storage Service (Amazon S3) qui contient les exemples de données. Notez qu'Athena prévoit d'analyser tous les fichiers d'un dossier, la LOCATION
clause indique l'emplacement du dossier Amazon S3, et non un fichier spécifique.
N'utilisez pas cet exemple pour l'instant car il comporte une limitation importante qui sera expliquée sous peu.
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
`Date` DATE,
Time STRING,
Location STRING,
Bytes INT,
RequestIP STRING,
Method STRING,
Host STRING,
Uri STRING,
Status INT,
Referrer STRING,
ClientInfo STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
LOCATION 's3://athena-examples-my-region
/cloudfront/plaintext/';
L'exemple crée une table appelée cloudfront_logs
et spécifie un nom et un type de données pour chaque champ. Ces champs deviennent les colonnes de la table. Comme il date
s'agit d'un mot réservé, il est masqué par des caractères backtick (`). ROW FORMAT DELIMITED
signifie qu'Athena utilisera une bibliothèque par défaut appelée LazySimpleSerDepour effectuer le travail réel d'analyse des données. L'exemple spécifie également que les champs sont séparés par des tabulations (FIELDS TERMINATED BY '\t'
) et que chaque registre dans le fichier se termine par un saut de ligne (LINES TERMINATED BY '\n
). Enfin, la clause LOCATION
indique le chemin d'accès dans Simple Storage Service (Amazon S3) où se trouvent les données à lire.
Si vous avez vos propres données séparées par des tabulations ou des virgules, vous pouvez utiliser une CREATE
TABLE
déclaration comme dans l'exemple qui vient d'être présenté, à condition que vos champs ne contiennent pas d'informations imbriquées. Toutefois, si une colonne de ClientInfo
ce type contient des informations imbriquées qui utilisent un séparateur différent, une approche différente est requise.
Extraction de données depuis le terrain ClientInfo
En regardant les exemples de données, voici un exemple complet du champ final ClientInfo
:
Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9
Comme vous pouvez le voir, ce champ est à valeurs multiples. Comme l'exemple d'CREATE
TABLE
instruction qui vient d'être présenté spécifie les onglets comme délimiteurs de champs, il ne peut pas diviser les différents composants du ClientInfo
champ en colonnes distinctes. Une nouvelle CREATE TABLE
déclaration est donc requise.
Pour créer des colonnes à partir des valeurs contenues dans le ClientInfo
champ, vous pouvez utiliser une expression régulièreCREATE TABLE
, utilisez une syntaxe comme la suivante. Cette syntaxe indique à Athena d'utiliser la bibliothèque Régex SerDe et l'expression rationnelle que vous spécifiez.
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "
regular_expression
")
Les expressions régulières peuvent être utiles pour créer des tables à partir de TSV données complexes CSV ou complexes, mais elles peuvent être difficiles à écrire et à gérer. Heureusement, il existe d'autres bibliothèques que vous pouvez utiliser pour des formats tels que JSON Parquet etORC. Pour de plus amples informations, veuillez consulter Choisissez un SerDe pour vos données.
Vous êtes maintenant prêt à créer la table dans l'éditeur de requête Athena. L'instruction CREATE
TABLE
et la regex sont fournies pour vous.
Pour créer une table dans Athena
-
Dans le panneau de navigation, pour Database (Base de données), assurez-vous que
mydatabase
est sélectionnée. -
Pour vous donner plus d'espace dans l'éditeur de requêtes, vous pouvez choisir l'icône de flèche pour réduire le panneau de navigation.
-
Pour créer un onglet pour une nouvelle requète, choisissez le signe plus (+) dans l'éditeur de requête. Vous pouvez ouvrir jusqu'à dix onglets de requête à la fois.
-
Pour fermer un ou plusieurs onglets de requête, choisissez la flèche à côté du signe plus. Pour fermer tous les onglets en même temps, choisissez la flèche, puis choisissez Close all tabs (Fermer tous les onglets).
-
Dans le volet de requête, saisissez l'instruction
CREATE EXTERNAL TABLE
suivante. La regex extrait les informations relatives au système d'exploitation, au navigateur et à la version du navigateur du champClientInfo
des données du journal.Note
L'expression régulière utilisée dans l'exemple suivant est conçue pour fonctionner avec les données de CloudFront journal d'échantillons accessibles au public sur le site
athena-examples
Amazon S3 et n'est fournie qu'à titre indicatif. Pour d'autres up-to-date expressions régulières qui interrogent à la fois des fichiers CloudFront journaux standard et en temps réel, consultez. Interrogez les CloudFront journaux d'AmazonCREATE EXTERNAL TABLE IF NOT EXISTS 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-
myregion
/cloudfront/plaintext/'; -
Dans la
LOCATION
déclaration, remplacezmyregion
par celui Région AWS que vous utilisez actuellement (par exemple,us-west-1
). -
Cliquez sur Run (Exécuter).
La table
cloudfront_logs
est créée et apparaît sous la liste Tables pour la base de donnéesmydatabase
.