Erstellen der Tabelle für ALB-Zugriffsprotokolle in Athena mithilfe der Partitionsprojektion - Amazon Athena

Erstellen der Tabelle für ALB-Zugriffsprotokolle in Athena mithilfe der Partitionsprojektion

Da ALB-Zugriffsprotokolle über eine bekannte Struktur verfügen, deren Partitionsschema Sie im Voraus angeben können, können Sie die Abfragelaufzeit reduzieren und die Partitionsverwaltung mithilfe der Athena-Partitionsprojektion-Feature automatisieren. Partitionsprojektion fügt automatisch neue Partitionen hinzu, wenn neue Daten hinzugefügt werden. Dadurch entfällt die Notwendigkeit, Partitionen manuell mithilfe von hinzuzufügen ALTER TABLE ADD PARTITION.

Die folgende CREATE TABLE-Beispielanweisung verwendet automatisch die Partitionsprojektion in ALB-Zugriffsprotokollen von einem angegebenen Datum bis zur Gegenwart für eine einzelne AWS-Region. Die Anweisung basiert auf dem Beispiel im vorherigen Abschnitt, fügt jedoch PARTITIONED BY- und TBLPROPERTIES-Klauseln hinzu, um die Partitionsprojektion zu ermöglichen. Ersetzen Sie in den LOCATION- und storage.location.template-Klauseln die Platzhalter durch Werte, die den Amazon-S3-Bucket-Speicherort Ihrer ALB-Zugriffsprotokolle angeben. Weitere Informationen zum Speicherort der Zugriffsprotokolldatei finden Sie unter Zugriffsprotokoll-Dateien im Benutzerhandbuch für Application Load Balancer. Ersetzen Sie für projection.day.range den 01.01.2022 durch das Startdatum, das Sie verwenden möchten. Nach dem erfolgreichen Ausführen der Abfrage können Sie die Tabelle abfragen. Sie müssen ALTER TABLE ADD PARTITION nicht ausführen, um die Partitionen zu laden. Informationen zu den einzelnen Protokolldateifeldern finden Sie unter Zugriffsprotokolleinträge.

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}" )

Weitere Informationen zur Partitionsprojektion finden Sie unter Partitionsprojektion mit Amazon Athena verwenden.

Anmerkung

Wir empfehlen, das Muster ?( .*)? am Ende des input.regex-Parameters immer beizubehalten, um künftige Protokolleinträge zu verarbeiten, falls neue ALB-Protokollfelder hinzugefügt werden.