微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS Athena - 查询分区中不同年份的数据

如何解决AWS Athena - 查询分区中不同年份的数据

我们在 S3 中对大型数据集进行了分区,例如 s3://bucket/year=YYYY/month=MM/day=DD/file.csv

在 Athena 中查询不同年份的数据并利用分区的最佳方法是什么?

以下是我对 2018-03-07 至 2020-03-06 数据的尝试:

查询 1 - 在我取消之前运行 2 分 45 秒

SELECT dt,col1,col2
FROM mytable
WHERE year BETWEEN '2018' AND '2020'
AND dt BETWEEN '2018-03-07' AND '2020-03-06'
ORDER BY dt

查询 2 - 运行大约 2 分钟。但是我认为如果时间段是从 2005 年到 2020 年,效率会很低

SELECT dt,col2
FROM mytable
WHERE (year = '2018' AND month >= '03' AND dt >= '2018-03-07')
OR year = '2019' OR (year = '2020' AND month <= '03' AND dt <= '2020-03-06')
ORDER BY dt

解决方法

我建议仅通过 dt (yyyy-MM-dd) 而不是 year,month,day 重新分区表,这很简单,分区修剪将起作用,尽管查询仅使用年份过滤器(如 where year>'2020' 应重写为 dt>'2020-01-01' 等。

顺便说一句,Hive 分区修剪中的查询也适用于这样的查询:

where concat(year,'-',month,day) >= '2018-03-07'
      and 
      concat(year,day) <= '2020-03-06'

我无法检查是否在 Presto 中执行相同的工作,但值得一试。您可以使用 || 运算符代替 concat()

,

稍微修改了您的第二个查询 <script> var content=document.getElementById("content-blog").innerText.length; max_length = 1000 //characters if(content > max_length){ //Do something } </script> 而不是 (year > '2018' AND year < '2020') 并且在 year='2019' 而不是 day 上有条件(我没有在分区中看到日期)?>

dt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。