场景:查看交接文档讲解,其中有一句话勾起了我的学习欲望,话是这么说的:“此逻辑有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倍。