【问题标题】:Athena query does not return any results newer than table creationAthena 查询不返回比创建表更新的任何结果
【发布时间】:2018-03-12 06:21:52
【问题描述】:

the formal instructions for querying CloudFront access logs using Athena 之后,我在 Athena 中创建了一个名为 default.cloudfront_logs 的表,它指向我在 S3 中的路径,我的 CloudFront 分配的访问日志正在其中写入:

CREATE EXTERNAL TABLE `cloudfront_logs`( <fields here> )
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES ( 
  'input.regex'='^(?!#)([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)\\s+([^ \\t]+)$') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://mybucket/examplecom'
TBLPROPERTIES (
  'transient_lastDdlTime'='1520796451')

然后我验证了一个查询返回数据:

SELECT date, count(*)
FROM cloudfront_logs
order by date
group by date;

但是,在创建表后的几天内,我的查询中没有出现更新的数据,尽管我的 S3 存储桶中出现了更多的访问日志文件(用于后续日期)。

我已尝试删除并重新创建表,但查询仍然返回相同的结果(在原始 Athena 表创建后没有更新的访问日志数据)。

为什么在 S3 中出现的较新数据没有出现在我的 Athena 查询结果中?

【问题讨论】:

  • 是因为你加入了transient_lastDdlTime吗?我不确定那是什么,但在线参考资料表明它与数据更新有关。
  • 事实证明,CloudFront 访问日志格式在 2018 年 1 月 10 日发生了变化,因此我的正则表达式在解析具有 2 个 addtl 列的日志文件时静默失败。我很遗憾(a)查询没有以某种方式失败,并且(b)日志格式更改没有更公开地宣布——我找不到关于更改的公开公告。文档已更新以反映新架构,因此删除我在 1 月 10 日之前创建的表并在此处使用 CREATE TABLE 语句解决了我的问题:docs.aws.amazon.com/athena/latest/ug/cloudfront-logs .html 感谢您与我交流!
  • 哦,好发现!我认为现在的格式看起来太干净了!您是否参考了格式更改时的内容?
  • 我在任何地方都找不到任何公开公告——我设法通过反向渠道与 Glue/Athena 员工进行了沟通,他们让我知道了日志格式的变化。

标签: amazon-web-services amazon-cloudfront amazon-athena


【解决方案1】:

如果您的数据被划分为子目录,那么 Athena 可能不知道新创建的目录。

使用MSCK REPAIR TABLE 扫描分区:

MSCK REPAIR TABLE cloudfront_logs;

然后,再次运行您的查询。

每当文件夹结构发生变化时,这都是必需的。

【讨论】:

  • 我几乎可以肯定这不是我的数据被分区的情况。我所有的访问日志文件都位于 S3 的同一级别——没有子“文件夹”,查看我的 Athena CREATE TABLE 我没有包含任何分区子句/说明。我已将我的CREATE TABLE DDL 添加到问题详细信息中,希望有助于澄清情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
相关资源
最近更新 更多