雅典娜分区投影无法按预期工作

时间:2020-09-17 18:08:56

标签: amazon-web-services aws-glue amazon-athena

我正在从注册的分区转移到分区投影。

以前,我的数据已按p_year={yyyy}/p_month={MM}/p_day={dd}/p_hour={HH}/...进行分区,而我将其移至p_date={yyyy}-{MM}-{dd} {HH}:00:00/..

我有一个最近的事件表,该表存储了最近2天的事件。因此,我的p_date范围是NOW-2DAYS,NOW。完整的表参数是-

projection.enabled: 'True'
projection.p_date.type: 'date'
projection.p_date.range: NOW-2DAYS,NOW
projection.p_date.format: 'yyyy-MM-dd HH:mm:ss'
projection.p_date.interval: 1
projection.p_date.interval.unit: 'HOURS'

但是当我尝试查询这个时,我没有任何结果。

SELECT COUNT(*) FROM recent_events_2d_v2
> 0

但是,如果我将日期范围更改为2020-09-01 00:00:00,NOW,则会得到结果。

相对日期范围和分区投影似乎有些偏差。谁能看到我可能在做错什么,还是这是一个错误?

2 个答案:

答案 0 :(得分:1)

您需要将日期格式更改为'yyyy-MM-dd HH:\'00:00\''(即,文字“ 00:00”而不是分钟和秒的占位符)。

分区投影处理日期的方式还有一些不足之处。如果您说间隔为一小时,则将时间戳四舍五入到最接近的小时似乎是合理的,但是事实并非如此。雅典娜将使用实际的“现在”来生成分区值,如果您的日期格式包含分钟和秒的字段,那么这些字段也会被填写。

我认为当您使用硬编码时间戳时它起作用的原因是Athena使用该值作为序列的种子,而所有其他时间戳也将与小时对齐。

答案 1 :(得分:-1)

如果您确定存储区p_date={yyyy}-{MM}-{dd} {HH}:00:00/..中包含数据,则需要确保正确加载了分区。尝试运行

MSCK REPAIR TABLE recent_events_2d_v2

并重新运行查询。