如何从数组中获取第一个非空元素<;字符串>;在Hive2.2.0中

如何从数组中获取第一个非空元素<;字符串>;在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

我有一个如下的配置单元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    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,你说得对!我已经更新了帖子。如果我的答案有用,请投票赞成!