hive中的拼接函数(concat,group_concat,concat_ws,collect_set)

1、concat
concat() 函数用于将多个字符串连接成一个字符串。
concat(string s1, string s2, string s3,…)表示通过s1、s2和s3连接一起
举例:

+----+--------+
| id | name   |
+----+--------+
|  1 | city   |
+----+--------+

CONCAT(id,’:’,name) = 1:city

2、concat_ws
concat_ws() 指定参数之间的分隔符
concat_ws(separator,str1,str2,…)中第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为null,则结果为null。函数会忽略任何分隔符参数后的null 值。但是concat_ws()不会忽略任何空字符串。 (然而会忽略所有的 null)
举例:数据如1
concat_ws(’_’,id,name)
结果:1_city

3、group_concat函数
group_concat() 函数返回一个字符串结果,该结果由分组中的值连接组合而成

GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])

在 MySQL 中,你可以得到表达式结合体的连结值。通过使用 DISTINCT 可以排除重复值。如果希望对结果中的值进行排序,可以使用 ORDER BY 子句。
SEPARATOR 是一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (","),可以通过指定 SEPARATOR “” 完全地移除这个分隔符。
可以通过变量 group_concat_max_len 设置一个最大的长度。在运行时执行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大长度被设置,结果值被剪切到这个最大长度。如果分组的字符过长,可以对系统参数进行设置:SET @@global.group_concat_max_len=40000;
举例:

+---------+---------+-----------+
| uid	  |	  age	| 	address	|
+---------+---------+-----------+
| 100001  |	  21    | 	 深圳	|
| 100001  |   22    |    青岛  	|
| 100002  |   23    | 	 重庆	|
| 100002  |   24    | 	 上海	|
+---------+---------+-----------+
select uid,group_concat(distinct age order by age desc SEPARATOR '_') 
from user_info where uid in('100001','100002') group by uid;

结果

100001		21_22
100002		23_24

4、collect_set
concat_ws常常结合group by与collect_set使用
concat_ws(SEPARATOR ,collect_set(column))与group_concat()函数作用相似
因为hive版本问题,低版本可能没有group_concat函数,只能用其他来代替。

你可能感兴趣的:(大数据-Hive)