本文主要是介绍SQL行转列,将json数组拆分成多行,一行变多行例子,(LATERAL VIEW explode),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
需求背景
有一张工程师能力表,如:
张三 擅长java、c、c++、c#、js
李四 擅长java、go
王五 擅长css、f#
陈六 擅长as、c、java
。。。
需要统计擅长各种语言的工程师的数量,如:
java 3
c 2
go 1
代码示例
使用LATERAL VIEW explode 组合,模拟上述统计案例
-- 创建表A
drop table A;
CREATE TABLE A (id INT,channels STRING,partition_time STRING
)
PARTITION BY LIST( partition_time )
(PARTITION p_20221130 VALUES IN ( '20221130' ),PARTITION default
)
STORED AS ORCFILE COMPRESS;-- 示例数据插入表A
INSERT INTO A PARTITION (partition_time='20221130') VALUES(1, '[101, 102, 103]', '20221130'),(2, '[102]', '20221130'),(3, '[103]', '20221130'),(4, '[101, 102]', '20221130'),(5, '[101, 103]', '20221130');-- 使用LATERAL VIEW explode(channels)统计channels出现的次数
SELECT channel, COUNT(*) AS count
FROM A
LATERAL VIEW explode(split(regexp_replace(channels, '\\[|\\]|\\s', ''), ',')) t AS channel
WHERE partition_time = '20221130'
GROUP BY channel;
输出结果
channel count
101 3
102 3
103 3
这篇关于SQL行转列,将json数组拆分成多行,一行变多行例子,(LATERAL VIEW explode)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!