Erstellen der Tabelle für ALB-Verbindungsprotokolle in Athena mithilfe der Partitionsprojektion
Da ALB-Verbindungsprotokolle ü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-Verbindungsprotokollen 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-Verbindungsprotokolle angeben. Weitere Informationen zum Speicherort der Verbindungsprotokolldatei finden Sie unter Verbindungsprotokolldateien im Benutzerhandbuch für Application Load Balancers. Ersetzen Sie für projection.day.range den 01.01.2023 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 Verbindungsprotokolleinträge.
CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs ( time string, client_ip string, client_port int, listener_port int, tls_protocol string, tls_cipher string, tls_handshake_latency double, leaf_client_cert_subject string, leaf_client_cert_validity string, leaf_client_cert_serial_number string, tls_verify_status 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]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?' ) LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/' TBLPROPERTIES ( "projection.enabled" = "true", "projection.day.type" = "date", "projection.day.range" = "2023/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.