create table syc_ads.test_transform (
name string comment '姓名',
constellation string comment '星座',
blood string comment '血型',
hobby string comment '爱好'
);
insert into table syc_ads.test_transform values('郭一','天蝎座','A','游戏,读书,滑板');
insert into table syc_ads.test_transform values('王二','白羊座','B','滑板,追剧');
insert into table syc_ads.test_transform values('孙三','白羊座','A','乒乓球,游戏');
insert into table syc_ads.test_transform values('李四','射手座','A','篮球,滑板');
insert into table syc_ads.test_transform values('赵五','白羊座','B','乒乓球,读书,滑板');
insert into table syc_ads.test_transform values('黄六','天蝎座','A','乒乓球,读书,滑板');
将用户按星座和血型归类
先用concat_ws函数将将星座和血型用“,”连接后group by 用collect_set函数对name聚合,用concat_ws函数对聚合后的name用“|”分割
注意: collect_list不去重 collect_set去重
SELECT
t1.a,
CONCAT_WS("|",collect_set(t1.name))
FROM (
SELECT
name
,CONCAT_WS(',',constellation,blood) a
FROM syc_ads.test_transform
)t1
GROUP BY t1.a
将用户的多个爱好拆分成单行展示
先用split函数将hobby根据“,”分割成数组 lateral view结合explode函数进行拆分后的聚合
SELECT
name,
hobby1
FROM syc_ads.test_transform
lateral VIEW explode(split(hobby,",")) test_transform AS hobby1;