Athena 分区投影未按预期工作
Athena Partition Projection Not Working As Expected
我正在从注册分区转移到分区投影。
以前我的数据按 p_year={yyyy}/p_month={MM}/p_day={dd}/p_hour={HH}/...
分区,我正在将它们移动到 p_date={yyyy}-{MM}-{dd} {HH}:00:00/..
我有一个最近的事件 table,它存储了过去 2 天的事件。所以我的 p_date
范围是 NOW-2DAYS,NOW
。完整的 table 参数是-
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
,我会得到结果。
分区投影的相对日期范围似乎有些不对劲。谁能看出我做错了什么,或者这是一个错误?
如果您确定您的存储桶 p_date={yyyy}-{MM}-{dd} {HH}:00:00/..
包含数据,那么您需要确保分区已正确加载。尝试 运行
MSCK REPAIR TABLE recent_events_2d_v2
并重新运行查询。
您需要将日期格式更改为 'yyyy-MM-dd HH:\'00:00\''
(即文字“00:00”而不是分钟和秒占位符)。
分区投影处理日期的方式有一些不足之处。如果您说间隔是一小时,那么时间戳会四舍五入到最接近的小时,这似乎是合理的,但事实并非如此。 Athena 将使用实际的“现在”来生成分区值,如果您的日期格式包含分钟和秒字段,这些字段也会被填充。
我假设当您使用硬编码时间戳时它起作用的原因是 Athena 使用该值作为序列的种子,并且所有其他时间戳也将与小时对齐。
我正在从注册分区转移到分区投影。
以前我的数据按 p_year={yyyy}/p_month={MM}/p_day={dd}/p_hour={HH}/...
分区,我正在将它们移动到 p_date={yyyy}-{MM}-{dd} {HH}:00:00/..
我有一个最近的事件 table,它存储了过去 2 天的事件。所以我的 p_date
范围是 NOW-2DAYS,NOW
。完整的 table 参数是-
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
,我会得到结果。
分区投影的相对日期范围似乎有些不对劲。谁能看出我做错了什么,或者这是一个错误?
如果您确定您的存储桶 p_date={yyyy}-{MM}-{dd} {HH}:00:00/..
包含数据,那么您需要确保分区已正确加载。尝试 运行
MSCK REPAIR TABLE recent_events_2d_v2
并重新运行查询。
您需要将日期格式更改为 'yyyy-MM-dd HH:\'00:00\''
(即文字“00:00”而不是分钟和秒占位符)。
分区投影处理日期的方式有一些不足之处。如果您说间隔是一小时,那么时间戳会四舍五入到最接近的小时,这似乎是合理的,但事实并非如此。 Athena 将使用实际的“现在”来生成分区值,如果您的日期格式包含分钟和秒字段,这些字段也会被填充。
我假设当您使用硬编码时间戳时它起作用的原因是 Athena 使用该值作为序列的种子,并且所有其他时间戳也将与小时对齐。