问题描述:

有这样一张维度表(id name),存放部门的id,与部门负责人

000  Liam
000001  Noah
000001001   Oliver
000002  Emma
001 Elijah
001001  James
001002  Charlotte
001001001   William
001002001   Amelia
002 Benjamin
002001  Lucas
002001001   Theodore

需要合并相同部门的人,也就是相同前缀的id的多行记录,合并到一行记录上

期望结果(为空表示该条记录只有对应的二级部门,没有三级部门)

000  Liam    000002  Emma    NULL    NULL
000 Liam    000001  Noah    000001001   Oliver
001 Elijah  001001  James   001001001   William
001 Elijah  001002  Charlotte   001002001   Amelia
002 Benjamin    002001  Lucas   002001001   Theodore

实际案例:

建表

create table test.dept(id string, name string) row format delimited fields terminated by '\t';
load data inpath '/user/admin/dept.txt' into table dept;
select * from test.dept;

分析

因为源表是将同一部门id的数据存在了不多行,所以首先我们需要找出能关联的键,也就是下一级的前3位部门id等于上一级的部门id

子查询先筛选出各级部门id的数据,与上一级通过前三位关联

SQL

SELECT t1.id AS id_level1,t1.name AS name_level1,t2.id id_level12,t2.name AS name_level2,t3.id id_level3,t3.name AS name_level3
FROM(SELECT *FROM test.deptWHERE length(id)=3)t1
LEFT JOIN(SELECT *FROM test.deptWHERE length(id)=6)t2 ON t1.id=substr(t2.id,0,3)
LEFT JOIN(SELECT *FROM test.deptWHERE length(id)=9)t3 ON t2.id=substr(t3.id,0,6)
ORDER BY id_level3;

结果符合预期

id_level1    name_level1 id_level12  name_level2 id_level3   name_level3
000 Liam    000002  Emma    NULL    NULL
000 Liam    000001  Noah    000001001   Oliver
001 Elijah  001001  James   001001001   William
001 Elijah  001002  Charlotte   001002001   Amelia
002 Benjamin    002001  Lucas   002001001   Theodore

Hive纵向表转横向表相关推荐

  1. mysql unpivot_SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子...

    使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UN ...

  2. excel小技巧-转置(表的横向纵向倒过来)

    转置 (表的横向纵向倒过来): 1.选择表,复制:2.选择性粘贴->粘贴内容转置:3.完成 转载于:https://www.cnblogs.com/jaci/p/11406385.html

  3. date类型_06076.1.0如何将ORC格式且使用了DATE类型的Hive表转为Parquet表

    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图. Fayson的github: https://github.com/fayson/cdhproject 提示 ...

  4. pandas使用pd.concat横向合并多个dataframe实战:多个dataframe的横向表拼接(行对齐)、多个dataframe的横向表拼接(指定join参数、交集还是并集)

    pandas使用pd.concat横向合并多个dataframe实战:多个dataframe的横向表拼接(行对齐).多个dataframe的横向表拼接(指定join参数.交集还是并集) 目录

  5. 大数据开发实战:Hive优化实战2-大表join小表优化

    4.大表join小表优化 和join相关的优化主要分为mapjoin可以解决的优化(即大表join小表)和mapjoin无法解决的优化(即大表join大表),前者相对容易解决,后者较难,比较麻烦. 首 ...

  6. hive内部表与外部表区别

    1.创建内部表与外部表的区别是什么? 2.external关键字的作用是什么? 3.外部表与内部表的区别是什么? 4.删除表的时候,内部表与外部表有什么区别? 5.load data local in ...

  7. 六、Hive中的内部表、外部表、分区表和分桶表

    文章目录 内部表 外部表 分区表 分桶表 在Hive数据仓库中,重要点就是Hive中的四个表.Hive 中的表分为内部表.外部表.分区表和分桶表. 内部表 默认创建的表都是所谓的内部表,有时也被称为管 ...

  8. Hive基本操作,DDL操作(创建表,修改表,显示命令),DML操作(Load Insert Select),Hive Join,Hive Shell参数(内置运算符、内置函数)等

    1.  Hive基本操作 1.1DDL操作 1.1.1    创建表 建表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_nam ...

  9. Hive 内部表与外部表

    首先查看当前的表: 内部表 查看emp表: 查看这个emp表的详细信息: 可以看到Table Type是一个MANAGED_TABLE,就是所谓的内部表 内部表跟外部表有什么区别 首先看一下mysql ...

最新文章

  1. 3.4.2 停止等待协议
  2. Linux操作系统下以不同颜色命名的文件类型
  3. python装饰器实例-python装饰器使用实例详解
  4. 使用curl下载上传ftp
  5. Hibernate的核心组件简单介绍
  6. Myeclipse学习总结(2)——MyEclipse快捷键大全
  7. 华为:崛起的 5G 巨龙
  8. 数据库mysql的注释怎么加_mysql表如何添加字段注释
  9. IntelliJ IDEA设置鼠标悬浮提示
  10. 05笔记 离散数学——函数——基于离散数学(第3版)_章炯民,陶增乐
  11. ps修改证件照的底色
  12. numpy学习线性回归, 并用matplotlib画动态图
  13. Pandas之skew,求偏度
  14. Maven环境下测试库和开发库的配置策略以及支持工具
  15. Springboot内嵌tomcat
  16. 2022高级Java笔试总结,阿里P8重点推荐的火爆全网MySQL路线笔记
  17. 怎么安装LINUX系统
  18. 计算机可以谭音乐吗,谭真家乡类歌曲中的音乐意境分析
  19. [凸多边形最大内切圆][半平面交]Most Distant Point from the Sea POJ3525
  20. 用友APILink——全国最大的企业工商信息提供平台

热门文章

  1. jQuery实现王者荣耀英雄列表
  2. 4月17日黑客攻击事件简讯
  3. 《Mysql是怎样运行的》读书笔记之独立表空间结构
  4. mysql 映射到map null_mybatis处理查询map列表属性为null的问题,而导致查询map无该key对象...
  5. 可口可乐公司推出全球第一款可加热饮用汽水,“可口可乐生姜+”上市
  6. 新品周刊 | 可口可乐与时尚包袋品牌Kipling推出联名系列;阿迪达斯推出电竞灵感跑鞋...
  7. 1063 计算谱半径 (20分)
  8. 2017年第十五届Esri中国用户大会资料分享
  9. 环境初始化与数据清除
  10. python构建决策引擎_用Python和Keras搭建你自己的AlphaZero