首页 / 更多教程 / Hive中统计数组中非0元素的个数
Hive中统计数组中非0元素的个数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Hive中统计数组中非0元素的个数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2177字,纯文字阅读大概需要4分钟。
内容图文
![Hive中统计数组中非0元素的个数](/upload/InfoBanner/zyjiaocheng/1019/1ff8948ab7104c5ba2920a7e486017b8.jpg)
0 需求
hive中怎么统计array中非零的个数
【0,1,3,6,0】
结果:非0的个数为3
1 实现
(1)将array转换成字符串,采用concat_ws()函数
select concat_ws(',',array) from test_array
返回:0,1,3,6,0
注意区分concat函数和concat_ws函数
- concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
- concat_ws函数在连接字符串的时候,只要有一个字符串不是NULL,就不会返回NULL。
hive> select concat('a','b');
OK
ab
Time taken: 0.477 seconds, Fetched: 1 row(s)
hive> select concat('a','b',null);
OK
NULL
Time taken: 0.181 seconds, Fetched: 1 row(s)
hive> select concat_ws('-','a','b');
OK
a-b
Time taken: 0.245 seconds, Fetched: 1 row(s)
hive> select concat_ws('-','a','b',null);
OK
a-b
Time taken: 0.177 seconds, Fetched: 1 row(s)
hive> select concat_ws('','a','b',null);
OK
ab
Time taken: 0.184 seconds, Fetched: 1 row(s)
(2) 使用regexp_replace()函数将0值替换成''或null
select regexp_replace("0,1,3,6,0",'0','null')
+------------------+--+
| _c0 |
+------------------+--+
| null,1,3,6,null |
+------------------+--+
注意此处null需要引号引起来,因为是串。不引起来则是如下结果
select regexp_replace("0,1,3,6,0",'0',null)
+-------+--+
| _c0 |
+-------+--+
| NULL |
+-------+--+
(3)解析字符串,求其非0个数。注意这里不能用length(),length()是求字符串的长度,上述结果用length()求出返回结果是15,因为length()会对每个字符进行计算。
select length(regexp_replace("0,1,3,6,0",'0','null'))
+------+--+
| _c0 |
+------+--+ null:4
| 15 |
+------+--+
我们需要对字符串解析split()返回一个数组,计算数组大小。数组大小用size()函数会忽略null或''的统计
0: jdbc:hive2://10.9.4.117:10000> select size(split(regexp_replace("0,1,3,6,0",'0',''),','));
+------+--+
| _c0 |
+------+--+
| 5 |
+------+--+
1 row selected (0.309 seconds)
0: jdbc:hive2://10.9.4.117:10000> select size(split(regexp_replace("0,1,3,6,0",'0','null'),','));
+------+--+
| _c0 |
+------+--+
| 5 |
+------+--+
1 row selected (0.147 seconds)
(4)最终SQL如下
select size(split(regexp_replace(array_str,'0',''),',')) as cnt
from(
select concat_ws(',',array) array_str from test_array) t
2 小结
- (1)数组转字符串的方法
- (2)字符串的正则匹配(非0值统计技巧)
- (3)字符串的解析,split()转换成数组,size()统计点位个数。
内容总结
以上是互联网集市为您收集整理的Hive中统计数组中非0元素的个数全部内容,希望文章能够帮你解决Hive中统计数组中非0元素的个数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。