栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive——函数-拼接字符串(含案例演示建议收藏)

Hive——函数-拼接字符串(含案例演示建议收藏)

案例

一、
创建一个新的文件:emp_sex.txt

vim emp_sex.txt
数据准备
悟空,A,男
大海,A,男
宋宋,B,男
凤姐,A,女
婷姐,B,女
婷婷,B,女
创建新的表用于存储数据
create table emp_sex(
name string, 
dept_id string, 
sex string) 
row format delimited fields terminated by ",";
导入数据
load data local inpath'/opt/module/data/emp_sex.txt' into table emp_sex;
需求:

求出不同部门男女各多少。

code:

select
    dept_id,
    sum(case sex when '男' then 1 else 0 end) maleCount,
    sum(case sex when '女' then 1 else 0 end) femaleCount
from
    emp_sex
group by dept_id;

结果:

二、创建一个新的文件

vim person_info.txt
数据准备
孙悟空,白羊座,A
大海,射手座,A
宋宋,白羊座,B
猪八戒,白羊座,A
凤姐,射手座,A
苍老师,白羊座,B
创建新的表用于存储数据
create table person_info(
name string, 
constellation string, 
blood_type string) 
row format delimited fields terminated by ",";
导入数据
load data local inpath'/opt/module/data/person_info.txt' into table person_info;
需求

把星座和血型一样的人归类到一起。

分步解决。
1、先将星座和血型拼接在一起。

select
    concat(constellation,',',blood_type) con_blood,
    name
from
    person_info;

结果:

2、 在1的基础上将con_blood的人的名字合并在一行。

select
    con_blood,
    collect_set(name) name_arr
from
    (select
    concat(constellation,',',blood_type) con_blood,
    name
from
    person_info)t1
group by con_blood;

结果:

3、利用concat_ws对列表中的字符串进行拼接

select
    con_blood,
    concat_ws('|',name_arr)
from
    (select
    con_blood,
    collect_set(name) name_arr
from
    (select
    concat(constellation,',',blood_type) con_blood,
    name
from
    person_info)t1
group by con_blood)t2;

or

select
    con_blood,
    concat_ws('|',collect_set(name))
from
    (select
    concat(constellation,',',blood_type) con_blood,
    name
from
    person_info)t1
group by con_blood;

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300583.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号