我的数据是以标准的hive格式按天分区的。
/year=2020/month=10/day=01
/year=2020/month=10/day=02
/year=2020/month=10/day=03
/year=2020/month=10/day=04
...
我想用amazon athena(即:presto)查询过去60天的所有数据。我想让这个查询使用分区列(年
,月
,日
),这样只扫描必要的分区文件。假设我不能改变文件分区格式,解决这个问题的最佳方法是什么?
我的数据是以标准的hive格式按天分区的。
/year=2020/month=10/day=01
/year=2020/month=10/day=02
/year=2020/month=10/day=03
/year=2020/month=10/day=04
...
我想用amazon athena(即:presto)查询过去60天的所有数据。我想让这个查询使用分区列(年
,月
,日
),这样只扫描必要的分区文件。假设我不能改变文件分区格式,解决这个问题的最佳方法是什么?
2条答案
按热度按时间8ehkhllq1#
Theo所提出的另一种方法是使用以下语法,如
当 "年"、"月 "和 "日 "列的格式是字符串时,这个功能就会起作用,它对跨月查询特别有用。
6gpjuf902#
你不必使用 "年"、"月"、"日 "作为表的分区键,你可以使用一个名为 "日期 "的分区键,然后像这样添加分区。
通过这种设置,你甚至可以将分区密钥的类型设置为
日期
。现在你有了一个带有
日期
列的表,你可以使用任何日期和时间函数对它进行计算。在这个设置下,你不能使用
MSCK REPAIR TABLE
来加载分区,但是你真的不应该这样做--它非常慢而且效率低下,只有当你有几个分区要加载到一个新的表中时才会这样做。