Crea una tabella per i log CloudFront in Athena utilizzando la proiezione delle partizioni con Parquet - Amazon Athena

Crea una tabella per i log CloudFront in Athena utilizzando la proiezione delle partizioni con Parquet

L'esempio seguente di istruzione CREATE TABLE utilizza automaticamente la proiezione delle partizioni nei log CloudFront da una distribuzione specifica CloudFront fino al presente per una singola Regione AWS. Dopo aver eseguito la query con esito positivo, è possibile eseguire query sulla tabella.

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}/')

Di seguito sono riportate alcune considerazioni sulle proprietà utilizzate nell'esempio precedente.

  • Nome tabella: il nome della tabella cloudfront_logs_pp è sostituibile. È possibile cambiarlo con il nome che si desidera.

  • Posizione: modificare s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/ in modo che punti al proprio bucket Amazon S3.

  • ID di distribuzione: per projection.distributionid.values, è possibile specificare più ID di distribuzione separandoli con virgole. Ad esempio,<distributionID1>,<distributionID2>.

  • Intervallo di anni: nel projection.year.range, è possibile definire l'intervallo di anni in base ai propri dati. Ad esempio, è possibile adattarlo a qualsiasi periodo, come 2025, 2026.

    Nota

    L'inclusione di partizioni vuote, come quelle per date future (esempio: 2025-2040), può influire sulle prestazioni delle query. Tuttavia, la proiezione delle partizioni è progettata proprio per gestire in maniera efficace date future. Per mantenere prestazioni ottimali, assicurarsi che le partizioni siano gestite con attenzione ed evitare troppe partizioni vuote quando possibile.

  • Modello di posizione di archiviazione: è necessario assicurarsi di aggiornare il storage.location.template correttamente in base alla seguente struttura di partizionamento CloudFront e al percorso S3.

    Parametro Pattern
    Struttura del partizionamento CloudFront AWSLogs/{AWS_ACCOUNT_ID}/CloudFront/{DistributionId}/folder2/{yyyy}/{MM}/{dd}/{HH}/folder3
    Percorso S3 s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/E2Oxxxxxxxxxxx/folder2/2025/01/25/03/folder3/

    Dopo aver verificato che la struttura di partizionamento di CloudFront e la struttura S3 corrispondono ai modelli richiesti, aggiornare storage.location.template come segue:

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

    La corretta configurazione del storage.location.template è fondamentale per garantire la corretta archiviazione e recupero dei dati.