Hadoop 配置单元分区查询正在扫描所有分区
当我像下面这样编写配置单元查询时Hadoop 配置单元分区查询正在扫描所有分区,hadoop,hive,Hadoop,Hive,当我像下面这样编写配置单元查询时 select count(*) from order where order_month >= '2016-11'; 阶段1的Hadoop作业信息:映射者数量:5;减速器数量:1 我只得到5个映射器,这意味着只读取所需分区(2016-11和2016-12) 与我使用函数编写的查询相同 select count(*) from order where order_month >= concat(year(DATE_SUB(to_date(from_u
select count(*)
from order
where order_month >= '2016-11';
阶段1的Hadoop作业信息:映射者数量:5;减速器数量:1
我只得到5个映射器,这意味着只读取所需分区(2016-11和2016-12)
与我使用函数编写的查询相同
select count(*)
from order
where order_month >= concat(year(DATE_SUB(to_date(from_unixtime(UNIX_TIMESTAMP())),10)),'-',month(DATE_SUB(to_date(from_unixtime(UNIX_TIMESTAMP())),10)));
注意:
concat(年份(日期(至日期)(自UNIX时间戳()),10)),“-”,月份(日期(至日期)(自UNIX时间戳()),10)))
='2016-11'
阶段1的Hadoop作业信息:映射者数量:216;减速器数量:1
这次它读取所有分区{2004-10到2016-12}
如何修改查询以仅读取所需分区 unix\u timestamp()
函数是不确定的,会妨碍查询的正确优化-自2.0以来,该函数一直被弃用,取而代之的是CURRENT\u timestamp
和CURRENT\u DATE
使用当前_日期,也不需要单独计算年和月:
where order_month >= substr(date_sub(current_date, 10),1,7)
unix\u timestamp()
函数是不确定的,会妨碍查询的正确优化-自2.0以来,该函数一直被弃用,取而代之的是CURRENT\u timestamp
和CURRENT\u DATE
使用当前_日期,也不需要单独计算年和月:
where order_month >= substr(date_sub(current_date, 10),1,7)
也可以看这个问题,也可以看这个问题