为 CloudFront 标准日志创建表 - Amazon Athena

为 CloudFront 标准日志创建表

注意

以下过程适用于 CloudFront 中的 Web 分配访问日志。它不适用于 RTMP 分配中的流日志。

为 CloudFront 标准日志文件字段创建表
  1. 将以下示例 DDL 语句复制并粘贴到 Athena 控制台的查询编辑器中。该示例语句使用《Amazon CloudFront 开发人员指南》标准日志文件字段部分中记录的日志文件字段。修改用于存储日志的 Amazon S3 存储桶的 LOCATION。有关使用查询编辑器的信息,请参阅 开始使用

    此查询指定了 ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t',表示字段由制表符分隔。对于 ROW FORMAT DELIMITED,Athena 默认使用 LazySimpleSerDe。列 date 使用反引号 (`) 转义,因为它是 Athena 中的保留字。有关信息,请参阅转义查询中的保留关键字

    CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_standard_logs ( `date` DATE, time STRING, x_edge_location STRING, sc_bytes BIGINT, c_ip STRING, cs_method STRING, cs_host STRING, cs_uri_stem STRING, sc_status INT, cs_referrer 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 BIGINT, time_taken FLOAT, 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 INT, c_port INT, time_to_first_byte FLOAT, x_edge_detailed_result_type STRING, sc_content_type STRING, sc_content_len BIGINT, sc_range_start BIGINT, sc_range_end BIGINT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://amzn-s3-demo-bucket/' TBLPROPERTIES ( 'skip.header.line.count'='2' )
  2. 在 Athena 控制台中运行查询。查询完成后,Athena 将注册 cloudfront_standard_logs 表,使其中的数据可以供您发出查询。

示例查询

以下查询将累计 2018 年 6 月 9 日到 6 月 11 日之间由 CloudFront 提供的字节的数量。将日期列名称用双引号引起来,因为它是保留字。

SELECT SUM(bytes) AS total_bytes FROM cloudfront_standard_logs WHERE "date" BETWEEN DATE '2018-06-09' AND DATE '2018-06-11' LIMIT 100;

要从查询结果中消除重复的行(例如,重复的空行),您可以使用 SELECT DISTINCT 语句,如以下示例所示。

SELECT DISTINCT * FROM cloudfront_standard_logs LIMIT 10;