如何从数组中获取第一个非空元素<;字符串>;在Hive2.2.0中
我有一个如下的配置单元SQL,它返回以下输出,现在我想从数组中获取第一个NOTNULL值,即“11” SQ:: 选择货到付款、拆分(反向)货到付款、收款清单 acc_status='Dormant'然后是“1”或“0”结束)),“0”)状态来自 按cod客户划分的账户状态组 输出:: 客户状态 1023[,“11”,“1”,“111”,“11”,“11” 2209[,“11”,“1”,“111”,“11”,“11”]如何从数组中获取第一个非空元素<;字符串>;在Hive2.2.0中,hive,hiveql,Hive,Hiveql,我有一个如下的配置单元SQL,它返回以下输出,现在我想从数组中获取第一个NOTNULL值,即“11” SQ:: 选择货到付款、拆分(反向)货到付款、收款清单 acc_status='Dormant'然后是“1”或“0”结束)),“0”)状态来自 按cod客户划分的账户状态组 输出:: 客户状态 1023[,“11”,“1”,“111”,“11”,“11” 2209[,“11”,“1”,“111”,“11”,“11”] 如果不使用split函数,输出将如下所示: cod_cust statu
如果不使用
split
函数,输出将如下所示:
cod_cust status
1023 01101011100
2209 01101011100
因此,任务是找到1
的第一个子序列,这可以通过regexp\u extract
来解决。您还可以使用IF
而不是CASE
:
SELECT cod_cust,
regexp_extract(reverse(concat_ws('', collect_list(if((acc_status='Dormant'), '1', '0'))), '1+', 0) first_element
status
FROM account_status
GROUP BY cod_cust;
谢谢,Iskuskov,我刚刚将regexp_extract的第三个参数添加为“0”,这对我来说很好。。。。选择cod_cust、regexp_extract(按cod_cust从account_status组中选择concat_ws('',collect_list(如果((acc_status='Dorment'),'1','0')),'1+',0)第一个元素;谢谢again@Vivek,你说得对!我已经更新了帖子。如果我的答案有用,请投票赞成!