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;
原文:
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列中的不同取值,且不重复。
希望这个解释能够帮到你!