这篇文章主要以日期表为例子,讨论hive和spark在处理分组语句时的异同点,以及substr和substring函数的区别。
我们在写hive sql做数据查询时,我们经常会遇到分组的字段需要截取字符串或者处理一下,这时候我们会有一个疑问,我们是要用这个截取字符串的别名做分组呢?还是用截取串的那个函数做分组呢?
下面我有以一个日期表为例,来讨论一下这个问题。
表名: d_cod_dt
表中数据:
我这里写了6个sql语句,分别用mr引擎和spark引擎做测试。
(1)
select substring(dt_id,1,6) ,count(1)
from hdp_bic_bd_dwd.d_cod_dt
where mth_id = ‘201911’
group by substring(dt_id,1,6)
(2)
select substr(dt_id,1,6) ,count(1)
from hdp_bic_bd_dwd.d_cod_dt
where mth_id = ‘201911’
group by substr(dt_id,1,6)
(3)
select substring(dt_id,1,6) as pt_mt ,count(1)
from hdp_bic_bd_dwd.d_cod_dt
where mth_id = ‘201911’
group by substring(dt_id,1,6)
(4)
select substring(dt_id,1,6) as pt_mt ,count(1)