场景:查看交接文档讲解,其中有一句话勾起了我的学习欲望,话是这么说的:“此逻辑有split函数impala不支持所以用的hive去执行”。
思考:难道impala不能使用其他函数替代吗?只能使用hive执行吗?
实践:impala不支持split函数,但是impala支持split_part函数
hive语句:
select
organization_name
,split(organization_name, '_')[size(split(organization_name, '_'))-1] as ood_root_organization_name
from ods_org_organization_definitions ;
impala语句:
select
organization_name
,case when length(split_part(organization_name,'_',3)) = 0 then split_part(organization_name,'_',2)
else split_part(organization_name,'_',3) end as ood_root_organization_name
from ods_org_organization_definitions;
备注:这里为什么使用case when呢?因为这一列字段值不是规则统一的,有的是一个"_",有的是两个"_"
结论:比较两段sql,hive语句比impala语句短、简洁,但impala执行时间比hive执行快,是hive执行速度的约210倍。