AWS Athena - 分区查询不同年份的数据
AWS Athena - Query data from different years in partitions
我们在 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, col1, 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
稍微修改了您的第二个查询 (year > '2018' AND year < '2020')
而不是 year='2019'
并在 day
而不是 dt
上设置条件(我没有在分区中看到日期)?
SELECT *
FROM award WHERE
(year = '2018' AND ((month = '03' AND day >= '07') OR month > '03'))
OR
(year > '2018' AND year < '2020')
OR
(year = '2020' AND (month < '03' OR (month = '03' OR day <= '06')))
我建议仅按 dt (yyyy-MM-dd) 重新分区 table 而不是 year
、month
、day
,这很简单且分区修剪将起作用,但使用 where year>'2020'
等仅年份过滤器的查询应重写为 dt>'2020-01-01'
等。
Hive 分区修剪中的 BTW 也适用于这样的查询:
where concat(year, '-', month, '-', day) >= '2018-03-07'
and
concat(year, '-', month, '-', day) <= '2020-03-06'
我无法检查在 Presto 中是否同样有效,但值得一试。您可以使用 ||
运算符代替 concat()
.
我们在 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, col1, 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
稍微修改了您的第二个查询 (year > '2018' AND year < '2020')
而不是 year='2019'
并在 day
而不是 dt
上设置条件(我没有在分区中看到日期)?
SELECT *
FROM award WHERE
(year = '2018' AND ((month = '03' AND day >= '07') OR month > '03'))
OR
(year > '2018' AND year < '2020')
OR
(year = '2020' AND (month < '03' OR (month = '03' OR day <= '06')))
我建议仅按 dt (yyyy-MM-dd) 重新分区 table 而不是 year
、month
、day
,这很简单且分区修剪将起作用,但使用 where year>'2020'
等仅年份过滤器的查询应重写为 dt>'2020-01-01'
等。
Hive 分区修剪中的 BTW 也适用于这样的查询:
where concat(year, '-', month, '-', day) >= '2018-03-07'
and
concat(year, '-', month, '-', day) <= '2020-03-06'
我无法检查在 Presto 中是否同样有效,但值得一试。您可以使用 ||
运算符代替 concat()
.