目录

0 需求

1 数据准备

2 数据分析

3 小结


0 需求

如下:

1 数据准备

create table t1 as
select '1' as id ,'mike' as name ,'22' as age,'0' as gender
union all
select '2' as id ,'kangkang' as name ,'19' as age,'1' as gender

2 数据分析

(1)使用union的方法进行行转列

select id,'name' as type,name as value
from t1
union all
select id,'age' as type,age as value
from t1
union all
select id,'gender' as type,gender as value
from t1
order by id

 (2)不使用union all 方法,采用concat_ws() + posexplode()方法,利用pos的位置索引进行一一对应。

select id, type, value
from (select t.id, t1.pos1, t1.value1 as value, t2.pos2, t2.type2  as typefrom (select id, concat_ws(',', name, age, gender) as value, array('name', 'age', 'gender')    as typefrom t1) tlateral view posexplode(split(t.value, ',')) t1 as pos1, value1 lateral view posexplode(t.type) t2 as pos2, type2) t
where t.pos1 = t.pos2

SQL简化如下:

select id, t.type2  as type, t.value1 as value
from t1lateral view posexplode(split(concat_ws(',', t1.name, t1.age, t1.gender), ',')) t as pos1, value1lateral view posexplode(array('name', 'age', 'gender')) t as pos2, type2
where t.pos1 = t.pos2

最终结果如下:

 (3)方法3:采用explode()+case when方法,采用array()方法封装类型维度,将维度数据拼接在原表数据中,利用case when进行类型判断获取对应关系。SQL如下:

select id, type, case typewhen 'name' then namewhen 'age' then agewhen 'gender' then genderelse null end as value
from t1 lateral view explode(array('name', 'age', 'gender')) t2 as type

3 小结

本文给出一种不使用传统UNION ALL方法进行 行转列的方法,其中方法一采用了concat_ws+posexplode()方法,利用posexplode的位置索引实现key-value之间的一一对应,方法二采用explode()+case when的方法,利用case when 进行转换实现key-value之间的一一对应。

HiveSql一天一个小技巧:如何不使用union all 进行列转行相关推荐

  1. HiveSQL一天一个小技巧:如何精准计算非连续日期累计值【闪电快车面试题】

    0 需 求 稀疏字段累计求和问题 1 问题分析 根据图片中数据变换的形式,可以看出是根据字段term补齐数据中缺失的日期,term为连续日期的个数,当为12时,表明由2018-12-21到2019-0 ...

  2. HiveSQL一天一个小技巧:如何借助于str_to_map进行行转列

    目录 0 需求描述 1 需求分析 2 小 结 0 需求描述 有如下表格 partner label value 001 原始证件号 9111030275820228X7 001 统一社会信用代码 91 ...

  3. HiveSql一天一个小技巧:如何在表的特定位置添加字段

    hive表在某个特定的位置添加一个字段,在操作上是先在表的最后添加一个字段然后再将该字段移动到那个特定的位置 第一步:先在最后一个位置增加字段 alter table table_name add c ...

  4. 面试|HiveSQL常用的一些小技巧

    SORT_ARRAY 函数声明如下. ARRAY sort_array(ARRAY<T>) 用途:对给定数组中的数据排序. 参数说明:ARRAY,ARRAY类型的数据.数组中的数据可为任意 ...

  5. SQL注入绕过关键词过滤的小技巧及原理(union select为例)

            本文以联合查询关键字union select为例讲解绕过关键词过滤的一些方法.之所以了解绕过,关键是发现sqlmap有时候真的是不靠谱,只能指定命令跑.有一些简单过滤很容易绕过却不能检 ...

  6. scanner nextstring 空格_毫不起眼的小技巧,居然一分钟删除了数据中所有空格

    每天都有很多粉丝留言或私信我Excel使用中的问题,可以说是五花八门,其实问题的出路在于先要有思路,发现其中的规律,有了思路.规律,问题也就迎刃而解了.今天小编和大家分享两个小技巧: 问题背景:某天一 ...

  7. 用google突破图书馆入口IP限制小技巧

    用google突破图书馆入口IP限制小技巧 很多图书馆都要注册或要本地IP才能浏览或下载图书,有没有另类的快速办法能快速突破图书馆的入口,能随意地下载图书呢? 希望大家在GOOGLE里试试这个:&qu ...

  8. latex 公式不居中_LaTex小技巧,祝你论文一臂之力!

    LaTex作为常用的排版系统,已深入到大家的工作和学业中.但是很多小伙伴反馈说:LaTex公式编辑复杂.表格处理麻烦等.为此,我们特别收集了一些LaTex的小技巧,希望大家都可以get到! 公式篇 首 ...

  9. 中文 查询_查询商标,商标注册通过分析的几个小技巧

    前面我们说到了商标注册前,通常情况下一定要进行商标查询,要进行注册通过可行性分析.只有这样才能保证基本的商标注册通过率,不至于无畏的浪费我们的时间和金钱. 1.我们在进行商标查询,输入要查询的商标时, ...

最新文章

  1. mysql没法安装_mysql没法使用、没法启动服务的解决方法
  2. Disassembly3:variable
  3. jq fileupload 设置最大文件大小5m_捷达将发布全新中大型SUV 或命名VS9/车长超5m
  4. tex文件用什么软件打开_pdf怎么打开?用什么软件打开pdf?
  5. HTTP的长连接和短连接
  6. LeetCode 12. Integer to Roman
  7. 如何给MindSpore添加一个新的硬件后端?快速构建测试环境!
  8. Creating DataFrames spark当中重要的部分DataFrames
  9. VS code报错:Launch options string provided by the project system id invalid.
  10. java 2d 图形_Java学习笔记--Swing2D图形
  11. x11/xwindow GUI窗口代码范例
  12. 历法 - 时间 干支 二十八星宿 紫白飞星
  13. 冷知识,PCB工程师的等级之分
  14. 百度换肤功能实现(vue)
  15. angular封装七牛云图片上传,解决同一页面多个上传按钮分别上传
  16. 计算机发展史上的重要人物和公司,汉字发展史上的重要人物
  17. 计算机键盘没有fn,教您fn键设置方法
  18. xcode9 IphoneX 调试
  19. Kotlin-Android世界的一股清流-Class类
  20. java代码审计手书(三)

热门文章

  1. Xilinx PCIE DMA--Sparten6/Kintex-7 BMD 搭建
  2. 机器学习——支持向量机算法
  3. django文件上传功能的实现
  4. 图像识别过程(概念)
  5. 《生物信息学:导论与方法》--生物信息数据库及软件资源--听课笔记(二十二)
  6. cocos2dx 背包界面的实现
  7. 解决!Google Play 设备未获得Play保护机制认证
  8. 【Windows】Windows装机软件
  9. Python实现对图片,文件批量重命名
  10. 从分散到统一,京东IM工具“咚咚”的架构演进