本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1、cancat、collect_set、sort_array
废话不多说,我们直接使用一个使用例子来进行说明他们的功能
例如:将periodical_code表中的p_year、p_year_stage两个字段连接成json字符串,然后分组收集到array里,最后再对array里的元素进行排序
select periodical_code,
sort_array(collect_set(
concat(
"{",
concat(
concat("\"", p_year, "\""),
":",
concat("\"", p_year_stage, "\"")
),
"}"
)
)) as year_stage_set
from ods_medical group by periodical_code;
这边使用了hive中的3个函数,concat、collect_set、sort_array
1、cancat 可以将多个字符串连接
2、collect_set 可以将分组后的数据一条一条收集成一个array,而且会去除重复数据
3、sort_array 可以对一个array中的所有元素进行字典序排序
2、split
注意:我们经常会使用split对字符串做切分,但要注意一点,当原来的值为空值时,容易产生大小为1的空字符串数组[""],在我们查询时,它和空数组[]输出来是很相似的,但它的大小却是1,如果我们再根据array的size判断做一下操作时,很可能出现意想不到的错误。 例如:
| one_cate_name | |
|---|---|
| 工程科技 | |
| 哲学与人文科学;医药卫生科技 | |
| 社会科学I |
SELECT split(one_cate_name, ";") as split_name, size(split(one_cate_name, ";")) as num from table_name
得到:
为避免出现空字符串数组[""],可以切分时加条件
SELECT
case when (one_cate_name="") then array() else split(one_cate_name, ";") end as split_name,
size(split(one_cate_name, ";")) as num from table_name
hive空字符串数组和空数组
空字符串数组 :array(‘’) 空数组:array()
如果想查找表中的空字符串数组: 方法:可以使用查找数组中的第一个值是否为空字符串
select classify from table where classify[0]='';
想查找表中空数组: 方法:使用size判断数据大小是否为0
select classify from table where size(classify)=0;
总结:
concat:直接连接多个字符串列
concat_ws:使用给定的分隔符将多个输入字符串列连接成为一个。
collect_set:聚合函数,返回去除重复元素后的集合。
sort_array:属于集合函数,操作集合类型,对输入数组元素按升序或降序排序。空元素将按升序放在返回数组的开头,或按降序放在返回数组的末尾。