一般写sql经常会遇到行转列或者列转行之类的操作,就像concat_ws之类的函数被广泛的使用,今天这个也是经常要使用的拓展方法。

Lateral View 语法

描述

横向视图与用户定义的表生成函数(如explode())结合使用。 如内置表生成函数中所述,UDTF为每个输入行生成零个或多个输出行。 横向视图首先将UDTF应用于基表的每一行,然后将结果输出行连接到输入行,以形成具有所提供的表别名的虚拟表。

在Hive 0.6.0之前,横向视图不支持谓词下推优化。 在Hive 0.5.0及更早版本中,如果您使用WHERE子句,则查询可能尚未编译。 解决方法是添加set hive.optimize.ppd = false; 在你的查询之前。 修复是在Hive 0.6.0中完成的; 请参阅https://issues.apache.org/jira/browse/HIVE-1056:谓词下推不适用于UDTF。

从Hive 0.12.0开始,可以省略列别名。 在这种情况下,别名是从UTDF返回的StructObjectInspector的字段名继承的。

举个栗子

下表 pageAds. 它有两个字段: pageid (页码) and adid_list (页面上的adid):

Column name

Column type

pageid

STRING

adid_list

Array

另外一个实例:

pageid

adid_list

front_page

[1, 2, 3]

contact_page

[3, 4, 5]

用户想要统计各个页面出现的广告的次数

此时可以使用lateral view 和explode处理adid_list 字段得到如下效果

The resulting output will be

pageid (string)

adid (int)

“front_page”

1

“front_page”

2

“front_page”

3

“contact_page”

3

“contact_page”

4

“contact_page”

5

因为要统计频次,所以使用group by聚合操作

int adid

count(1)

1

1

2

1

3

2

4

1

5

1

Multiple Lateral Views

FROM子句可以有多个LATERAL VIEW子句。 后续的LATERAL VIEWS可以引用出现在LATERAL VIEW左侧的任何表格中的列。

如下所示:

上面的示例sql中后面一个直接饮用之前的输出结果作为输入,假设有以下数据表:

Array col1

Array col2

[1, 2]

[a”, “b”, “c”]

[3, 4]

[d”, “e”, “f”]

查询语句

将会生成:

int mycol1

Array col2

1

[a”, “b”, “c”]

2

[a”, “b”, “c”]

3

[d”, “e”, “f”]

4

[d”, “e”, “f”]

当使用两次lateral view查询之后:

生成如下的结果:

int myCol1

string myCol2

1

“a”

1

“b”

1

“c”

2

“a”

2

“b”

2

“c”

3

“d”

3

“e”

3

“f”

4

“d”

4

“e”

4

“f”

Lateral Views 外连接

在Hive版本0.12.0中引入

即使LATERAL VIEW通常不会生成行,用户也可以指定可选的OUTER关键字来生成行。 当使用的UDTF没有生成任何行时,当爆炸列为空时爆炸很容易发生这种情况,就会发生这种情况。 在这种情况下,源行永远不会出现在结果中。 可以使用OUTER来防止这种情况,并且将在来自UDTF的列中使用NULL值生成行。

例如,以下查询返回空结果:

But with the OUTER keyword

it will produce:

238 val_238 NULL

86 val_86 NULL

311 val_311 NULL

27 val_27 NULL

165 val_165 NULL

409 val_409 NULL

255 val_255 NULL

278 val_278 NULL

98 val_98 NULL

hive中实现行转列_Hive之行转列lateral view用法相关推荐

  1. hive 的 lateral view用法以及注意事项

    1. lateral view 简介   hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表.配合UDTF函数 ...

  2. [1179]hive的lateral view用法

    文章目录 1. lateral view 简介 2. 实操 2.1 建表(hive) 2.2 插入数据 2.3 转成多行 2.4 汇总求和 1. lateral view 简介 hive函数 late ...

  3. Hive中alter table 对分区表的操作:添加列,修改列,删除历史分区

    alter table 用于在已有的hive表中添加.修改删除列 在分区表中添加新的一列: alter table table_name add columns(columns_name double ...

  4. Hive中sort by、distribute by、cluster by的区别及用法

    sort by sort by:每个MapReduce内部进行排序,对全局结果集来说并不是排序. distribute by distribute by:类似MR中的partition,进行分区,结合 ...

  5. Hive 中的复合数据结构简介以及一些函数的用法说明

    目前 hive 支持的复合数据类型有以下几种: map (key1, value1, key2, value2, ...) Creates a map with the given key/value ...

  6. Hive 中的复合数据结构

    原文:http://my.oschina.net/leejun2005/blog/120463 原作者:xrzs 学习,谢谢 目前 hive 支持的复合数据类型有以下几种: map (key1, va ...

  7. Hive中的explode使用全解(附图片详解)

    数据表: 表名:default.class_info,分别是班级,姓名,成绩 3列 单列Explode: 需求:将student这一列中数据由一行变为多行(使用split和explode,并结合lat ...

  8. Hive中COUNT的高级用法(条件过滤等)

    在HIVE中,除了COUNT(*)外,COUNT还可以有很多高级用法. SELECTtype, count(*), count(DISTINCT u), count(CASE WHEN plat=1 ...

  9. Hive Lateral View + explode 详解

    hive中的函数分为3类,UDF函数.UDAF函数.UDTF函数 UDF:一进一出 UDAF:聚集函数,多进一出,类似于:count/max/min UDTF:一进多出,如explore().pose ...

最新文章

  1. SAP QM 模块主数据
  2. 云容器实例服务入门必读
  3. 电磁悬浮控制系统仿真设计
  4. flask高级编程 LocalStack 线程隔离
  5. linux7电脑配置要求,安装win7系统电脑配置有何要求--win10专业版
  6. 计算机osta试题,OSTA试题库.doc
  7. 自动化测试中自动化切换网络----解决方案
  8. 如何在Mac OSX系统下安装Tomcat
  9. 2021年中国DevOps现状调查报告发布!
  10. 【GA MTSP】基于matlab遗传算法求解多旅行商问题(同始终点)【含Matlab源码 1338期】
  11. uni-appH5端canvas压缩图片
  12. openstack 资源超分
  13. flume中HDFS IO error
  14. 启用计算机的无线同屏,win10系统无线同屏功能如何使用
  15. js实现点击按钮,弹出新窗口
  16. 2-管理Audio焦点(Managing Audio Playback)
  17. 胶囊网络可以PK掉CNN吗?//——暂时不能 胶囊网络的不足点思考
  18. win10:Python3.7安装PyQt4
  19. html实现光碟转动效果,flash脚本roll应用 制作转动的光碟动画效果
  20. 计算机网络-数据链路层(超级无敌详细)

热门文章

  1. Java基础提高学习笔记2
  2. linux每日命令(13):more命令
  3. spring整合quartz框架
  4. Linux基础管理——磁盘管理及文件系统(全)
  5. 2017年3月份前端资源分享
  6. Git命令集十四——抓取命令
  7. DOM(十四):代理检测和事件处理(跨浏览器)
  8. ulimit设置不生效?
  9. .Net下的XML序列化(一)
  10. thinkphp源码分析(三)—自动加载篇(Loader的分析)