相关文章推荐
稳重的打火机  ·  Python-数据爬取(爬虫)-阿里云开发者社区·  11 月前    · 
博学的汤圆  ·  Linux ...·  1 年前    · 
玩篮球的海龟  ·  运行触发器,调用另一个数据库的存储过程·  2 年前    · 
慈祥的仙人掌  ·  Derby 安全 · ZetCode ...·  2 年前    · 
英姿勃勃的烤面包  ·  微服务中基于Spring ...·  2 年前    · 
Code  ›  Hive sql 行列转换(行转列,列转行) - 墨天轮
hive sql行转列
https://www.modb.pro/db/470345
谈吐大方的薯片
1 年前
  • 学习
    • 课程中心
      推荐优质内容、热门课程
    • 学习路径
      预设学习计划、达成学习目标
    • 知识图谱
      综合了解技术体系知识点
    • 课程库
      快速筛选、搜索相关课程
    • 视频学习
      专业视频分享技术知识
    • 电子文档
      快速搜索阅览技术文档
  • 文档
  • 工具
    • SQLRUN
      在线数据库即时SQL运行平台
    • 数据库在线实训平台
      实操环境、开箱即用、一键连接
    • Oracle巡检
      简单两步,查看报告分析
    • AWR分析
      上传AWR报告,查看分析结果
    • SQL格式化
      快速格式化绝大多数SQL语句
    • SQL审核
      审核编写规范,提升执行效率
    • PLSQL解密
      解密超4000字符的PL/SQL语句
    • OraC函数
      查询Oracle C 函数的详细描述
    • 智能助手小墨
      关于数据库相关的问题,您都可以问我
  • 暂无图片
    • 数据库百科
    • 核心案例
    • 行业报告
    • 月度解读
    • 大事记
    • 产业图谱
  • 我的订单
  • 登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 资讯
    • 数说
    • 活动
    • 大会
    • 课程
    • 文档
    • 排行
    • 问答
    • 云市场
    • 我的订单
    暂无图片
    觉得内容不错?
    一键收藏 方便随时查看
    暂无图片
    暂无图片
    微信扫码
    复制链接
    新浪微博
    分享数说
    暂无图片
    采集到收藏夹
    分享到数说
    首页 / Hive sql 行列转换(行转列,列转行)

    Hive sql 行列转换(行转列,列转行)

    Ty3306 2022-08-22
    879

    在Hive sql应用中会遇到“行转列”和“列转行”的场景,下面介绍其基本使用语法。

    1.行转列:

    关键字:collect_set() / collect_list()、concat_ws()

    1)collect_set()/collect_list():
    collect_set( )函数只接受基本数据类型,作用是对参数字段进行去重汇总,返回array类型字段;
    collect_list()函数和collect_set( )作用一样,只是前者不去重,后者去重。
    2)concat_ws():
    concat_ws (separator,字符串A/字段名A,字符串B/字段名B…)是concat的特殊形式,第一个参数是分隔符,分隔符会放到要连接的字符串之间,分隔符可以是字符串,也可以是其他参数。如果分隔符为NULL,则结果为NULL,函数会忽略任何分隔符参数后的 NULL值。但是concat_ws( )不会忽略任何空字符串。(然而会忽略所有的 NULL),如果参数为string类型数组则合并数组内字符串。
    例:concat_ws( ',', [ 'a ', 'b'])–> 'a,b'
    行转列基本语法:
    select 分类字段,concat_ws(',',collect_set(合并字段)) as 别名 from table_name group 分类字段;

    /* 原始数据
    name gender times
    张三 男 唐
    李四 男 唐
    王五 男 明
    赵六 男 明
    -- 先用collect_set将列拼接在一起,然后再通过concat_ws进行展开拼接
    SELECT a.gender_times,
    concat_ws(';',collect_set(a.name)) name
    (SELECT name,
    concat(gender, '_','times') gender_times
    FROM hero_info) t
    GROUP BY t.gender_times;
    /*查询结果
    gender_times name
    男_唐 张三;李四
    男_明 王五;赵六


    2.列转行

    关键字:explode()、split()和LATERAL VIEW

    1) split():
    将一个字符串按照指定字符分割,结果为一个array;
    2)explode():
    将一列复杂的array或者map拆分为多行,它的参数必须为map或array;
    3)lateral view:
    lateral view udtf(字段名)表别名/表临时名as列别名/列临时名。lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateralview再把结果组合,产生一个支持别名表的虚拟表。
    列转行基本语法:
    select 字段,字段别名 from table_name lateral view explode(split(拆分字段,分隔符))表别名 as 字段别名;


    /*原始数据
    province city
    河南 郑州市,开封市,洛阳市
    河北 石家庄市,保定市
    湖南 长沙市,岳阳市,常德市
    -- addr为表名
    SELECT province,
    city_n
    FROM addr LATERAL VIEW explode (split(city,',')) addr_tmp AS city_n;
    -- 查询结果
    河南 郑州市
    河南 开封市
    河南 洛阳市
    河北 石家庄市
    
     
    推荐文章
    稳重的打火机  ·  Python-数据爬取(爬虫)-阿里云开发者社区
    11 月前
    博学的汤圆  ·  Linux shell:脚本读取文件内容赋给变量的三种方式_shell脚本获取文件内容赋值给变量-CSDN博客
    1 年前
    玩篮球的海龟  ·  运行触发器,调用另一个数据库的存储过程
    2 年前
    慈祥的仙人掌  ·  Derby 安全 · ZetCode 中文系列教程 · 看云
    2 年前
    英姿勃勃的烤面包  ·  微服务中基于Spring Boot的maven分布式项目框架的搭建 - 知乎
    2 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号