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

Sql AWS Athena-在分区中查询不同年份的数据,sql,amazon-web-services,hive,partitioning,amazon-athena,Sql,Amazon Web Services,Hive,Partitioning,Amazon Athena,我们在S3中对大型数据集进行了分区,如S3://bucket/year=YYYY/month=MM/day=DD/file.csv 在雅典娜中查询不同年份的数据并利用分区的最佳方式是什么 以下是我为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' A

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

在雅典娜中查询不同年份的数据并利用分区的最佳方式是什么

以下是我为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
选择dt、col1、col2
从mytable
其中(年份='2018'和月份>='03'和dt>='2018-03-07')

或者年份='2019'或者(年份='2020'和月份稍微修改了您的第二个查询
(年份>'2018'和年份<'2020')
,而不是
年份='2019'
,并且条件是
天而不是
dt
(我在分区中没有看到日期)

选择*
从何处得奖
(年份='2018'和((月份='03'和日期>'07')或月份>'03'))
或
(2018年和2020年)
或

(年份='2020'和(月份<'03'或(月份='03'或日期我建议仅按dt(yyyy-MM-dd)重新划分表)这很简单,分区修剪可以工作,而不是
,尽管使用仅年份过滤器的查询,如
其中年份>'2020'
应该重写为
dt>'2020-01-01'
,依此类推

另外,顺便说一句,配置单元分区修剪可以很好地处理以下查询:

where concat(year, '-', month, '-', day) >= '2018-03-07'
      and 
      concat(year, '-', month, '-', day) <= '2020-03-06'
其中concat(年、月、日)>=“2018-03-07”
及

concat(年、“-”、月、“-”、日)不,在
2018-04-01
2020-02-20
这样的日期不起作用
dt
是CSV文件中的一列。更新的答案@marius我用
concat
尝试过,查询大约需要45秒才能完成。查询如下
从concat所在的mytable中选择dt、col1、col2(年,月,日)>='2018-03-07'和concat(年,月,日)@Marius太棒了!然后它在Presto-tooI中工作就像这个答案!
where concat(year, '-', month, '-', day) >= '2018-03-07'
      and 
      concat(year, '-', month, '-', day) <= '2020-03-06'