在hive分区列上进行日期计算

utugiqy6  于 2021-04-03  发布在  Hive
关注(0)|答案(2)|浏览(740)

我的数据是以标准的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天的所有数据。我想让这个查询使用分区列(),这样只扫描必要的分区文件。假设我不能改变文件分区格式,解决这个问题的最佳方法是什么?

8ehkhllq

8ehkhllq1#

Theo所提出的另一种方法是使用以下语法,如

select ... from my_table where year||month||day between '2020630' and '20201010'

当 "年"、"月 "和 "日 "列的格式是字符串时,这个功能就会起作用,它对跨月查询特别有用。

6gpjuf90

6gpjuf902#

你不必使用 "年"、"月"、"日 "作为表的分区键,你可以使用一个名为 "日期 "的分区键,然后像这样添加分区。

ALTER TABLE the_table ADD
PARTITION (`date` = '2020-10-01') LOCATION 's3://the-bucket/data/year=2020/month=10/day=01'
PARTITION (`date` = '2020-10-02') LOCATION 's3://the-bucket/data/year=2020/month=10/day=02'
...

通过这种设置,你甚至可以将分区密钥的类型设置为日期

PARTITIONED BY (`date` date)

现在你有了一个带有日期列的表,你可以使用任何日期和时间函数对它进行计算。
在这个设置下,你不能使用MSCK REPAIR TABLE来加载分区,但是你真的不应该这样做--它非常慢而且效率低下,只有当你有几个分区要加载到一个新的表中时才会这样做。

相关问题