Création de la table des journaux d’accès ALB dans Athena en utilisant la projection de partition - Amazon Athena

Création de la table des journaux d’accès ALB dans Athena en utilisant la projection de partition

Étant donné que les journaux d’accès ALB possèdent une structure connue dont vous pouvez spécifier le schéma de partition à l’avance, vous pouvez réduire le temps d’exécution des requêtes et automatiser la gestion des partitions en utilisant la fonctionnalité de projection de partition Athena. La projection des partitions ajoute automatiquement de nouvelles partitions à mesure que de nouvelles données sont ajoutées. Vous n'avez donc plus besoin d'ajouter manuellement des partitions à l'aide de la commande ALTER TABLE ADD PARTITION.

L’exemple d’instruction CREATE TABLE suivant utilise automatiquement la projection de partition sur les journaux d’accès ALB à partir d’une date spécifiée jusqu’au moment présent pour une seule région AWS. L'instruction se base sur l'exemple de la section précédente, mais ajoute les clauses PARTITIONED BY et TBLPROPERTIES pour activer la projection de partition. Dans les clauses LOCATION et storage.location.template, remplacez les espaces réservés par des valeurs qui identifient l’emplacement du compartiment Amazon S3 de vos journaux d’accès ALB. Pour plus d’informations sur l’emplacement des fichiers journaux d’accès, consultez Access log files dans le Guide d’utilisation des équilibreurs de charge Application Load Balancer. Dans projection.day.range, remplacez 2022/01/01 par la date de début que vous souhaitez utiliser. Après avoir exécuté la requête avec succès, vous pouvez interroger la table. Vous n'avez pas besoin d'exécuter ALTER TABLE ADD PARTITION pour charger les partitions. Pour plus d’informations sur chaque champ des fichiers journaux, consultez Access log entries.

CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_logs ( type string, time string, elb string, client_ip string, client_port int, target_ip string, target_port int, request_processing_time double, target_processing_time double, response_processing_time double, elb_status_code int, target_status_code string, received_bytes bigint, sent_bytes bigint, request_verb string, request_url string, request_proto string, user_agent string, ssl_cipher string, ssl_protocol string, target_group_arn string, trace_id string, domain_name string, chosen_cert_arn string, matched_rule_priority string, request_creation_time string, actions_executed string, redirect_url string, lambda_error_reason string, target_port_list string, target_status_code_list string, classification string, classification_reason string, conn_trace_id string ) PARTITIONED BY ( day STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)? ?( .*)?' ) LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/' TBLPROPERTIES ( "projection.enabled" = "true", "projection.day.type" = "date", "projection.day.range" = "2022/01/01,NOW", "projection.day.format" = "yyyy/MM/dd", "projection.day.interval" = "1", "projection.day.interval.unit" = "DAYS", "storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}" )

Pour plus d'informations sur la projection de partition, voir Utilisation de la projection de partition avec Amazon Athena.

Note

Nous suggérons que le modèle ?( .*)? à la fin du paramètre input.regex reste toujours en place pour gérer les futures entrées de journaux au cas où de nouveaux champs de journaux ALB seraient ajoutés.