首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对配置单元分区列执行日期数学运算

问对配置单元分区列执行日期数学运算
EN

Stack Overflow用户
提问于 2020-10-13 22:15:44
回答 2查看 137关注 0票数 0

我的数据以标准配置单元格式按天进行分区:

代码语言:javascript
复制
/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 (IE: Presto)查询过去60天的所有数据。我希望这个查询使用分区列(year、month、day),以便只扫描必要的分区文件。假设我不能更改文件分区格式,那么解决这个问题的最佳方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2020-10-14 03:06:34

您不必使用year、month、day作为表的分区键。您可以拥有一个名为date的分区键,并像这样添加分区:

代码语言:javascript
复制
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'
...

使用此设置,您甚至可以将分区键的类型设置为date

代码语言:javascript
复制
PARTITIONED BY (`date` date)

现在,您有了一个表,其中的date列被类型化为DATE,您可以使用任何date and time functions对其进行计算。

使用这种设置不能做的是使用MSCK REPAIR TABLE加载分区,但无论如何都不应该这样做--它非常慢,效率很低,而且只有在有几个分区要加载到新表中时才会这样做。

票数 1
EN

Stack Overflow用户

发布于 2020-10-14 20:27:27

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

代码语言:javascript
复制
select ... from my_table where year||month||day between '2020630' and '20201010' 

当列year、month和day的格式为字符串时,此方法有效。这对于跨月查询特别有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64336952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档