Créez une table pour les CloudFront bûches dans Athena à l'aide de la projection de partitions avec Parquet - 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éez une table pour les CloudFront bûches dans Athena à l'aide de la projection de partitions avec Parquet

L'exemple d'instruction CREATE TABLE suivant utilise automatiquement la projection de partitions sur CloudFront les journaux dans Parquet, depuis une CloudFront distribution spécifiée jusqu'à ce qu'un seul soit présent Région AWS. Après avoir exécuté la requête avec succès, vous pouvez interroger la table.

CREATE EXTERNAL TABLE `cloudfront_logs_parquet_pp`( `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) PARTITIONED BY( distributionid string, year int, month int, day int, hour int ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/' TBLPROPERTIES ( 'projection.distributionid.type'='enum', 'projection.distributionid.values'='E3OK0LPUNWWO3', 'projection.day.range'='01,31', 'projection.day.type'='integer', 'projection.day.digits'='2', 'projection.enabled'='true', 'projection.month.range'='01,12', 'projection.month.type'='integer', 'projection.month.digits'='2', 'projection.year.range'='2019,2025', 'projection.year.type'='integer', 'projection.hour.range'='01,12', 'projection.hour.type'='integer', 'projection.hour.digits'='2', 'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/${distributionid}/${year}/${month}/${day}/${hour}/')

Voici quelques éléments à prendre en compte concernant les propriétés utilisées dans l’exemple précédent.

  • Nom de la table : le nom de la table cloudfront_logs_pp est remplaçable. Vous pouvez le remplacer par le nom de votre choix.

  • Emplacement : modifiez s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/ pour pointer vers votre compartiment Amazon S3.

  • Distribution IDs — Pourprojection.distributionid.values, vous pouvez spécifier plusieurs distributions IDs en les séparant par des virgules. Par exemple, <distributionID1>, <distributionID2>.

  • Plage d’années : dans projection.year.range, vous pouvez définir la plage d’années en fonction de vos données. Vous pouvez ainsi l’ajuster à n’importe quelle période, comme 2025, 2026.

    Note

    L’inclusion de partitions vides, telles que celles associées à des dates futures (exemple : 2025-2040), peut avoir un impact sur les performances des requêtes. La projection de partition est cependant conçue pour gérer efficacement les dates futures. Pour maintenir des performances optimales, veillez à ce que les partitions soient gérées de manière réfléchie et évitez autant que possible un nombre excessif de partitions vides.

  • Modèle d'emplacement de stockage : vous devez vous assurer de le mettre à jour storage.location.template correctement en fonction de la structure de CloudFront partitionnement et du chemin S3 suivants.

    Paramètre Modèle
    CloudFront structure de partitionnement AWSLogs/{AWS_ACCOUNT_ID}/CloudFront/{DistributionId}/folder2/{yyyy}/{MM}/{dd}/{HH}/folder3
    Chemin S3 s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/E2Oxxxxxxxxxxx/folder2/2025/01/25/03/folder3/

    Après avoir vérifié que la structure de CloudFront partitionnement et la structure S3 correspondent aux modèles requis, mettez-les à jour storage.location.template comme suit :

    'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/account_id/CloudFront/${distributionid}/folder2/${year}/${month}/${day}/${hour}/folder3/'
    Note

    Une configuration correcte de storage.location.template est essentielle pour garantir un stockage et une récupération corrects des données.