hive size计算数组长度的一个坑
2017-08-09 11:40
246 查看
hive上有个表,其中某列p_9的数据格式是用逗号分隔的字符串。通过下面的方式计算p_9列使用逗号分隔后元素的长度。
select rg,sum(size(split(p_9,","))) from ttengine_api_data where dt='2017-08-07' group by rg;
OK
0 137683
1 150155
如果p_9列不为空,那么计算是没问题的。如果是空(“”或者null),则计算后是有问题的。仔细查了一下,发现是size(split(p_9,",")) 有问题,即:
如果p_9是空或者null,那么split成数组后,在计算数据的长度居然是1.知道了原因,那么改起来很简单,使用下面的方式统计就没问题了:
select rg,sum(if(length(p_9)==0,0,size(split(p_9,",")))) from ttengine_api_data where dt='2017-08-07' group by rg;
OK
0 0
1 6373
select rg,sum(size(split(p_9,","))) from ttengine_api_data where dt='2017-08-07' group by rg;
OK
0 137683
1 150155
如果p_9列不为空,那么计算是没问题的。如果是空(“”或者null),则计算后是有问题的。仔细查了一下,发现是size(split(p_9,",")) 有问题,即:
如果p_9是空或者null,那么split成数组后,在计算数据的长度居然是1.知道了原因,那么改起来很简单,使用下面的方式统计就没问题了:
select rg,sum(if(length(p_9)==0,0,size(split(p_9,",")))) from ttengine_api_data where dt='2017-08-07' group by rg;
OK
0 0
1 6373
相关文章推荐
- 假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 而已」
- 假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 而已」
- 一个神奇的实现:计算数组尾部对称长度
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- ARRAYSIZE:计算数组长度
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- 一个计算数组长度的perl脚本
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- 一个计算数组长度的perl脚本
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- C语言中计算一个数组长度
- randnumber_mn.c 生成一个数组,包括k个不重复的整数,并且要求这些整数范围为[m,n),生成的结果中不能包含inum中的数字,size表示inum的长度
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- 计算一个数组的长度
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目
- 一个班级的学生成绩存在长度为10的数组中,计算不及格的学生数目