1、多列合并为一列
COALESCE(expression_1, expression_2, …,expression_n)
依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。使用COALESCE在于大部分包含空值的表达式最终将返回空值。
2、多行合并为一行
分层级取数:投诉工单>通信质量>无法正常使用数据业务>无法上网/掉线>固网>宽带故障
sselect a.row_id,concat_ws(’>’, collect_set(b.code_name)) code_name
from (select row_id, id_list
from open_038_dim.dim_ivr_path LATERAL VIEW explode(split(path, ‘,’)) aa as id_list) a
left join open_038_dim.dim_ivr_path b on a.id_list=b.row_id
group by a.row_id

这里的collect_set的作用是对promotion_id去重

一、concat()函数可以连接一个或者多个字符串

CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

select concat(‘11’,‘22’,‘33’); 112233

二、CONCAT_WS(separator,str1,str2,…)

是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。

select concat_ws(’,’,‘11’,‘22’,‘33’);  11,22,33

三、group_concat()分组拼接函数

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])

对下面的一组数据使用 group_concat()

| id |name

|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |

1、select id,group_concat(name) from aa group by id;

|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|

2、select id,group_concat(name separator ‘;’) from aa group by id;

|1 | 10;20;20 |
|2 | 20|
|3 | 200;500 |

3、select id,group_concat(name order by name desc) from aa group by id;

|1 | 20,20,10 |
|2 | 20|
|3 | 500,200|

4、select id,group_concat(distinct name) from aa group by id;

|1 | 10,20|
|2 | 20 |
|3|200,500|

原文: https://blog.csdn.net/lh0912666/article/details/81024275

1、多列合并为一列COALESCE(expression_1, expression_2, …,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。使用COALESCE在于大部分包含空值的表达式最终将返回空值。2、多行合并为一行分层级取数:投诉工单>通信质量>无法正常使用数据业务>无法上网/掉线&... drop table if exists stud; create table stud (name string, area string, course string, score int); 2)向原数据表中插入数据 hive (gmall)> insert into table stud values('zhang3',... sel ect product_id, concat _ ws ('_', coll ect _ set (promotion_id)) as promotion_ids from product_promotion group by product_id 执行结果: 5112 9 大前提:大表统计能使用group by就不要使用distinct!! 尤其是在数据量非常大的时候,distinct会将所有的统计信息加载到 一个 reducer里取执行,这就是所谓的数据倾斜。而group by会把相同key的 记录 放到 一个 reducer区计算,因此效率会提高很多。 业务需要对 一个 分区内一百亿...
技术交流群:958923746,有学习视频,文档等。 最近再导数据,甲方要求数据全部导出来,由于涉及关联表比较多,而且一对多的情况也很多,所以导成 一条 数据展示出来很麻烦。下面是我百度解决出来的办法,可参考一下。 一对多查询, 合并 一条 数据 步骤如下: 1:创建产品表: 2:创建型号表: 先写出不含产品型号的查询语句, 然后将 一个 产品对应的 多个 成分 合并 一个 字段 , 将合...
//Institutions 记录 可能下挂多条组织 记录 ,多以 一个 Institutions 记录 对应多条Organization //Organization是个对象,组织,有 字段 Id主键(整型) //query里面的变量organizationIds是表示多条Organization 记录 ,organizationIds存的是 多个 id,在下面list里面看到的 //item.organization...
NVL空 字段 赋值 NVL(value, default_value):如果value为NULL,则NVL函数返回default_value(可以为常量,也可以为某个 字段 )的值,否则返回value的值,如果两个参数都为NULL,则返回NULL。此函数很简单,此处不写例子。 CASE WHEN和IF case when有如下两种形式: case 字段 when 条件值1 then 值1 when 条件...
一开始用 coll ect _ set 函数实现,发现对 字段 进行去重了,后来发现 coll ect _list函数可以实现,现将两者的区别总结如下: 1、 concat _ ws coll ect _ set ()函数实现(对某列进行去重) 其作用是将 多行 ...
hive的复合数据类型hive中的列支持使用三类复杂的集合数据类型,即:array,map及struct,这些类型的名称是保留字,具体用法可参见该篇博文,里面有关于三类基本集合数据类型的操作实例,注:map中可嵌套array类型。 例如,定义表:create table example ( device_id string, login_ip array<string>,
1. concat _ ws 函数: concat _ ws 函数用于连接 多个 字符串,并使用指定的分隔符将它们分隔开。其中, ws 代表with separator,表示使用指定的分隔符连接 多个 字符串。 concat _ ws 函数的语法如下: concat _ ws (separator,str1,str2,...) 其中,separator表示分隔符,可以是任何字符串;str1、str2等表示需要连接的字符串。 例如,如果我们想将"hello"、"world"、"!"三个字符串用空格分隔开来连接起来,可以这样写: concat _ ws (" ", "hello", "world", "!") 这个函数的输出结果为: "hello world !" 2. coll ect _ set 函数: coll ect _ set 函数用于返回 一个 去重后的集合( set ),其中集合中的元素是输入的一列数据中的不同取值。 coll ect _ set 函数的语法如下: coll ect _ set (expression) 其中,expression表示需要进行去重的列。 例如,如果我们有 一个 表t,其中有 一个 列a,我们想要对a列中的不同取值进行去重,并返回 一个 集合,可以这样写: sel ect coll ect _ set (a) from t 这个函数的输出结果为 一个 集合,其中包含a列中的不同取值,且不重复。 希望这个解释能够帮到你!