Sql AWS Athena-在分区中查询不同年份的数据
我们在S3中对大型数据集进行了分区,如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://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'