需求背景
有一张工程师能力表,如:
张三 擅长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