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 组合,模拟上述统计案例

sql 复制代码
-- 创建表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

相关推荐
五颜六色的池14 小时前
my sql 常用函数及语句的执行顺序
数据库·sql
元Y亨H14 小时前
SQL Join 中函数使用对性能的影响与优化方法
sql
武昌库里写JAVA20 小时前
Java 设计模式在 Spring 框架中的实践:工厂模式与单例模式
java·vue.js·spring boot·sql·学习
计算机毕设残哥1 天前
紧跟大数据技术趋势:食物口味分析系统Spark SQL+HDFS最新架构实现
大数据·hadoop·python·sql·hdfs·架构·spark
楠目1 天前
SQL注入与防御:从攻击原理到预编译防御
数据库·sql
喃寻~1 天前
java面试
数据库·sql·mysql
float_六七1 天前
SQL流程控制函数完全指南
数据库·sql·adb
AI绘画哇哒哒2 天前
实战:SQL统一访问200+数据源,构建企业级智能检索与RAG系统(下)
人工智能·sql·深度学习·学习·ai·程序员·大模型
满昕欢喜2 天前
SQL Server从入门到项目实践(超值版)读书笔记 27
数据库·sql·sqlserver
亚林瓜子2 天前
AWS中的离线计算(大数据大屏项目)
大数据·hadoop·sql·spark·云计算·aws