Athena 分区投影未按预期工作

mic*_*cah 5 amazon-web-services amazon-athena aws-glue

我正在从注册分区转向分区投影。

以前我的数据被分区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'
Run Code Online (Sandbox Code Playgroud)

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

SELECT COUNT(*) FROM recent_events_2d_v2
> 0
Run Code Online (Sandbox Code Playgroud)

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

分区投影的相对日期范围似乎有些不对劲。谁能看到我可能做错了什么,或者这是一个错误?

The*_*heo 4

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

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

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