Création d’une table pour les journaux CloudFront dans Athena à l’aide du partitionnement manuel avec un format JSON - Amazon Athena

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.

Création d’une table pour les journaux CloudFront dans Athena à l’aide du partitionnement manuel avec un format JSON

Pour créer une table pour les champs de fichiers journaux standard CloudFront avec un format JSON
  1. Copiez et collez l'exemple d'instruction DDL suivante dans l'éditeur de requête de la console Athena. L'exemple d'instruction utilise les champs du fichier journal décrits dans la section Champs de fichier journal standard du Guide du développeur Amazon CloudFront. Modifiez l'emplacement (LOCATION) pour le compartiment Simple Storage Service (Amazon S3) qui stocke vos journaux.

    Cette requête utilise le SerDe OpenX JSON avec les propriétés SerDe suivantes pour lire correctement les champs JSON dans Athena.

    CREATE EXTERNAL TABLE `cf_logs_manual_partition_json`( `date` string , `time` string , `x-edge-location` string , `sc-bytes` string , `c-ip` string , `cs-method` string , `cs(host)` string , `cs-uri-stem` string , `sc-status` string , `cs(referer)` string , `cs(user-agent)` string , `cs-uri-query` string , `cs(cookie)` string , `x-edge-result-type` string , `x-edge-request-id` string , `x-host-header` string , `cs-protocol` string , `cs-bytes` string , `time-taken` string , `x-forwarded-for` string , `ssl-protocol` string , `ssl-cipher` string , `x-edge-response-result-type` string , `cs-protocol-version` string , `fle-status` string , `fle-encrypted-fields` string , `c-port` string , `time-to-first-byte` string , `x-edge-detailed-result-type` string , `sc-content-type` string , `sc-content-len` string , `sc-range-start` string , `sc-range-end` string ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'paths'='c-ip,c-port,cs(Cookie),cs(Host),cs(Referer),cs(User-Agent),cs-bytes,cs-method,cs-protocol,cs-protocol-version,cs-uri-query,cs-uri-stem,date,fle-encrypted-fields,fle-status,sc-bytes,sc-content-len,sc-content-type,sc-range-end,sc-range-start,sc-status,ssl-cipher,ssl-protocol,time,time-taken,time-to-first-byte,x-edge-detailed-result-type,x-edge-location,x-edge-request-id,x-edge-response-result-type,x-edge-result-type,x-forwarded-for,x-host-header') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/'
  2. Exécutez la requête dans la console Athena. Une fois que la requête est terminée, Athena enregistre la table cf_logs_manual_partition_json, de telle sorte que les données soient prêtes pour que vous puissiez émettre des requêtes.

Exemples de requêtes

La requête suivante ajoute le nombre d’octets diffusés par CloudFront pour le 15 janvier 2025.

SELECT sum(cast("sc-bytes" as BIGINT)) as sc FROM cf_logs_manual_partition_json WHERE "date"='2025-01-15'

Pour éliminer les lignes en double (par exemple, les lignes vides en double) des résultats de la requête, vous pouvez utiliser l'instruction SELECT DISTINCT, comme dans l'exemple suivant.

SELECT DISTINCT * FROM cf_logs_manual_partition_json