網站首頁 編程語言 正文
Spark/hive Sql 行列轉換
- explode
- demo
- explode(map)
- lateral view explode(map)
- explode(array)
- lateral view
- demo
- lateral view explode
- 統計id出現次數
- lateral view parse_url_tuple
- 列轉行
- 單列轉多行
- LATERAL VIEW explode
- 多列轉多行
- LATERAL VIEW posexplode
- split
- 行轉列
- 單行轉多列
- split
- 多行轉多列
- max case when
explode
分類:UDTF
功能:函數可以將一個array或者map展開
1.explode(array):將array列表里的每個元素生成一行
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來使用,把某一行數據拆分成多行數據
很多的UDTF不能將結果與源表進行關聯,使用lateral view ,可以將UDTF拆分的單個字段數據與原始表數據關聯上
demo
-
lateral view explode
-
原表
-
轉換
SELECT name,ids
from hobbies
LATERAL VIEW explode(id_list) tmp_view AS ids;
-
統計id出現次數
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;
- 轉換
SELECT
a.*,
b.host,
b.path
FROM urls a
LATERAL VIEW parse_url_tuple(url, 'HOST',"PATH") b as host,path;
列轉行
- 原表
SELECT
name,
concat_ws(',',collect_set(course)) AS course,
concat_ws(',',collect_set(cast(score AS string))) AS score
FROM posexplode
GROUP BY name;
單列轉多行
-
LATERAL VIEW explode
// todo 單列轉多行
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
多列轉多行
-
LATERAL VIEW posexplode
// todo 多列轉多行
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;
行轉列
單行轉多列
-
split
SELECT
split(c1,',')[0] as id,
split(c1,',')[1] as name
FROM test
多行轉多列
-
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
相關推薦
- 2022-03-14 -bash: 未預期的符號 `(‘ 附近有語法錯誤的解決辦法
- 2022-05-29 C/C++迭代器的失效問題詳解_C 語言
- 2022-07-02 css文字顯示兩行,溢出顯示省略號,點擊查看更多
- 2022-07-18 C語言簡明講解歸并排序的應用_C 語言
- 2022-04-04 npm run ...自動打開瀏覽器
- 2022-08-06 C#讀取word中表格數據的方法實現_C#教程
- 2022-11-02 python中list列表刪除元素的四種方法實例_python
- 2022-10-12 Nginx?403?forbidden錯誤的原因以及解決方法_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支