我正在从注册的分区转移到分区投影。
以前,我的数据已按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
,则会得到结果。
相对日期范围和分区投影似乎有些偏差。谁能看到我可能在做错什么,还是这是一个错误?
答案 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
并重新运行查询。