Erstellen Sie eine Tabelle für CloudFront-Protokolle in Athena mithilfe manueller Partitionierung mit Parquet
Um eine Tabelle für CloudFront-Standardprotokolldateifelder im Parquet-Format zu erstellen
-
Kopieren Sie die folgende beispielhafte DDL-Anweisung und fügen Sie sie in den Abfrageeditor der Athena-Konsole ein. Die Beispielanweisung verwendet die Protokolldateifelder, die im Abschnitt Standard-Protokolldateifelder des Amazon-CloudFront-Entwicklerhandbuchs dokumentiert sind.
Diese Abfrage verwendet ParquetHiveSerDe mit den folgenden SerDe-Eigenschaften, um Parquet-Felder in Athena korrekt zu lesen.
CREATE EXTERNAL TABLE `cf_logs_manual_partition_parquet`( `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) 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/' -
Führen Sie die Abfrage in der Athena-Konsole aus. Nach Beendigung der Abfrage registriert Athena die
cf_logs_manual_partition_parquet-Tabelle, sodass Sie die Daten zum Ausgeben von Abfragen nutzen können.
Beispielabfragen
Die folgende Abfrage addiert die Anzahl der von CloudFront für den 19. Januar 2025 bereitgestellten Bytes.
SELECT sum(cast("sc_bytes" as BIGINT)) as sc FROM cf_logs_manual_partition_parquet WHERE "date"='2025-01-19'
Um doppelte Zeilen (z. B. doppelte Leerzeilen) aus den Abfrageergebnissen zu entfernen, können Sie, wie im folgenden Beispiel die SELECT DISTINCT-Anweisung verwenden.
SELECT DISTINCT * FROM cf_logs_manual_partition_parquet