網(wǎng)站首頁 編程語言 正文
Spark/hive Sql 行列轉(zhuǎn)換
- explode
- demo
- explode(map)
- lateral view explode(map)
- explode(array)
- lateral view
- demo
- lateral view explode
- 統(tǒng)計(jì)id出現(xiàn)次數(shù)
- lateral view parse_url_tuple
- 列轉(zhuǎn)行
- 單列轉(zhuǎn)多行
- LATERAL VIEW explode
- 多列轉(zhuǎn)多行
- LATERAL VIEW posexplode
- split
- 行轉(zhuǎn)列
- 單行轉(zhuǎn)多列
- split
- 多行轉(zhuǎn)多列
- max case when
explode
分類:UDTF
功能:函數(shù)可以將一個(gè)array或者map展開
1.explode(array):將array列表里的每個(gè)元素生成一行
2.explode(map):每一對元素作為一行,key為一列,value為一列
demo
-
explode(map)
//todo explode(map)
select explode(map('A',10,'B',20,'C',30)) as (key,value);
-
lateral view explode(map)
select
tf.*
from
(select 0) t
lateral view explode(map('A',10,'B',20,'C',30)) tf as key,value;
-
explode(array)
//todo explode(array)
SELECT explode(split(name,"")) FROM hobbies
lateral view
分類:視圖
功能:配合UDTF來使用,把某一行數(shù)據(jù)拆分成多行數(shù)據(jù)
很多的UDTF不能將結(jié)果與源表進(jìn)行關(guān)聯(lián),使用lateral view ,可以將UDTF拆分的單個(gè)字段數(shù)據(jù)與原始表數(shù)據(jù)關(guān)聯(lián)上
demo
-
lateral view explode
-
原表
-
轉(zhuǎn)換
SELECT name,ids
from hobbies
LATERAL VIEW explode(id_list) tmp_view AS ids;
-
統(tǒng)計(jì)id出現(xiàn)次數(shù)
SELECT ids,count(1) as ids_cnt
from hobbies
LATERAL VIEW explode(id_list) tmp_view AS ids
GROUP BY ids;
-
lateral view parse_url_tuple
- 原表
insert into urls (id, url) values
("1","http://facebook.com/path/p1.php?query=1"),
("2","http://www.baidu.com/news/index.jsp?uuid=frank"),
("3","http://www.jd.com/index?source=baidu");
SELECT * from urls;
- 轉(zhuǎn)換
SELECT
a.*,
b.host,
b.path
FROM urls a
LATERAL VIEW parse_url_tuple(url, 'HOST',"PATH") b as host,path;
列轉(zhuǎn)行
- 原表
SELECT
name,
concat_ws(',',collect_set(course)) AS course,
concat_ws(',',collect_set(cast(score AS string))) AS score
FROM posexplode
GROUP BY name;
單列轉(zhuǎn)多行
-
LATERAL VIEW explode
// todo 單列轉(zhuǎn)多行
WITH t1 AS (
SELECT
name,
concat_ws(',',collect_set(course)) AS course,
concat_ws(',',collect_set(cast(score AS string))) AS score
FROM posexplode
GROUP BY name
)
SELECT
name,pose_course,SCORE
FROM t1
LATERAL VIEW explode(split(t1.COURSE,',')) tmp_view AS pose_course
多列轉(zhuǎn)多行
-
LATERAL VIEW posexplode
// todo 多列轉(zhuǎn)多行
WITH t1 AS (
SELECT
name,
concat_ws(',',collect_set(course)) AS course,
concat_ws(',',collect_set(cast(score AS string))) AS score
FROM posexplode
GROUP BY name
)
SELECT
name,pos_course,a,pos_score,b
FROM t1
LATERAL VIEW posexplode(split(t1.COURSE,',')) cr AS a, pos_course
LATERAL VIEW posexplode(split(t1.SCORE,',')) cr AS b, pos_score
WHERE a=b
-
split
select
concat_ws(',',
concat(c1,':c:',c2),
concat(c1,':d:',c3),
concat(c1,':e:',c4)
) as value
from col2row;
SELECT
split(value_list,":")[0] c1,
split(value_list,":")[1] c2,
split(value_list,":")[2] c3
FROM (
select
concat_ws(',',
concat(c1,':c:',c2),
concat(c1,':d:',c3),
concat(c1,':e:',c4)
) as value
from col2row
)t1
LATERAL VIEW explode(split(t1.VALUE,",")) tmp_view AS value_list;
行轉(zhuǎn)列
單行轉(zhuǎn)多列
-
split
SELECT
split(c1,',')[0] as id,
split(c1,',')[1] as name
FROM test
多行轉(zhuǎn)多列
-
max case when
SELECT
c1,
CASE WHEN c2='c' THEN c3 ELSE 0 END,
CASE WHEN c2='d' THEN c3 ELSE 0 END,
CASE WHEN c2='e' THEN c3 ELSE 0 END
from row2col
SELECT
c1,
max(CASE WHEN c2='c' THEN c3 ELSE 0 END) c,
max(CASE WHEN c2='d' THEN c3 ELSE 0 END) d,
max(CASE WHEN c2='e' THEN c3 ELSE 0 END) e
from row2col
GROUP BY c1;
原文鏈接:https://blog.csdn.net/Lzx116/article/details/126503545
相關(guān)推薦
- 2022-04-20 C語言函數(shù)棧幀的創(chuàng)建和銷毀詳解_C 語言
- 2022-11-16 PyTorch中torch.utils.data.DataLoader實(shí)例詳解_python
- 2022-09-12 Python?argparse庫的基本使用步驟_python
- 2022-08-30 MongoD管理數(shù)據(jù)庫的方法介紹_MongoDB
- 2023-01-28 Android?之Preference控件基本使用示例詳解_Android
- 2022-05-25 org.springframework.data.redis.RedisSystemExceptio
- 2023-01-01 c語言中實(shí)現(xiàn)數(shù)組幾個(gè)數(shù)求次大值_C 語言
- 2022-04-03 Python實(shí)現(xiàn)對相同數(shù)據(jù)分箱的小技巧分享_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支