Creazione della tabella per i log di accesso ALB in Athena utilizzando la proiezione delle partizioni - Amazon Athena

Creazione della tabella per i log di accesso ALB in Athena utilizzando la proiezione delle partizioni

Poiché i log ALB dispongono di una struttura nota il cui schema di partizione può essere specificato in anticipo, è possibile ridurre il runtime delle query e automatizzare la gestione delle partizioni utilizzando la funzionalità di proiezione delle partizioni di Athena. La proiezione delle partizioni aggiunge automaticamente nuove partizioni man mano che vengono aggiunti nuovi dati. Ciò elimina la necessità di aggiungere manualmente le partizioni utilizzando ALTER TABLE ADD PARTITION.

L'esempio di istruzione seguente CREATE TABLE utilizza automaticamente la proiezione delle partizioni nei log ALB da una data specificata fino alla presente per una singola regione AWS. L'istruzione si basa sull'esempio della sezione precedente, ma aggiunge le clausole PARTITIONED BY e TBLPROPERTIES per abilitare la proiezione delle partizioni. Nelle clausole LOCATION e storage.location.template, sostituire i segnaposto con valori che identificano la posizione del bucket Amazon S3 dei propri log di accesso ALB. Per maggiori informazioni sulla posizione del file del log di accesso consultare File del log di accesso nella Guida utente per Application Load Balancers. Per projection.day.range, sostituire 2022/01/01 con la data di inizio che si desidera usare. Dopo aver eseguito la query con esito positivo, è possibile eseguire query sulla tabella. Non è necessario eseguire ALTER TABLE ADD PARTITION per caricare le partizioni. Per informazioni su ogni campo del file di registro, vedere Elenco log di accesso.

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

Per maggiori informazioni sulla proiezione delle partizioni, consulta Proiezione delle partizioni con Amazon Athena.

Nota

Suggeriamo che lo schema? (.*)? alla fine del parametro input.regex rimanga sempre attivo per gestire le future voci di log nel caso in cui vengano aggiunti nuovi campi di registro ALB.