如何从hive 2.2.0中的ARRAY <string>获取第一个非null元素

时间:2018-04-27 10:27:47

标签: hive hiveql

我有一个hive SQL,如下所示返回以下输出,现在我想从数组中得到第一个not null值,即&#34; 11&#34;。

SQ ::

  

选择cod_cust,split(反向(concat_ws(&#39;&#39;,collect_list)   acc_status =&#39;休眠&#39;然后&#34; 1&#34;别的&#34; 0&#34;结束))),&#39; 0&#39;)来自的状态   account_status group by cod_cust;

输出:

  

cod_cust status

     

1023 [&#34;&#34;,&#34; 11&#34;,&#34; 1&#34;,&#34; 111&#34;,&#34;&#34;, &#34;&#34;]

     

2209 [&#34;&#34;,&#34; 11&#34;,&#34; 1&#34;,&#34; 111&#34;,&#34;&#34;, &#34;&#34;]

1 个答案:

答案 0 :(得分:2)

不使用split函数,输出将如下所示:

cod_cust    status
1023        01101011100
2209        01101011100

所以任务是找到1的第一个子序列,可以通过regexp_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;