1. 语法

lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*

2. 描述

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

在Hive 0.6.0之前,Lateral View 不支持谓词下推优化。
在Hive 0.5.0和更早版本中,如果你使用WHERE子句,你的查询如果没有没有编译。
解决方法是在你查询之前添加 set hive.optimize.ppd = false 。
这个问题是在Hive 0.6.0中进行修复的, 请参阅https://issues.apache.org/jira/browse/HIVE-1056。
从Hive 0.12.0中,可以省略列别名。
在这种情况下,别名继承自从UTDF返回的StructObjectInspector的字段名称。

3. Example

考虑以下名为pageAds的基表。 它有两列:pageid(网页名称)和adid_list(网页上显示的广告数组):

而且用户希望统计广告在所有网页上展示的总次数。

Lateral View 与 explode()函数 结合使用可以将adid_list转换为单独的行:

 hive> SELECT pageid, adid> FROM tmp_laterview LATERAL VIEW explode(adid_list) adTable AS adid;OKfront_page    1front_page 2front_page 3contact_page   3contact_page   4contact_page   5Time taken: 0.132 seconds, Fetched: 6 row(s)

然后,为了计算特定广告的展示次数,使用如下命令:

hive> SELECT adid, count(1)> FROM tmp_laterview LATERAL VIEW explode(adid_list) adTable AS adid> GROUP BY adid;OK
1   1
2   1
3   2
4   1
5   1
Time taken: 11.456 seconds, Fetched: 5 row(s)

4. Multiple Lateral Views

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

例如,如下查询:

SELECT * FROM exampleTable
LATERAL VIEW explode(col1) myTable1 AS myCol1
LATERAL VIEW explode(col2) myTable2 AS myCol2;

LATERAL VIEW子句按照它们出现的顺序应用。 例如使用以下基表:

单个Lateral View查询

hive> SELECT pageid_list, adid > FROM tmp_laterview> LATERAL VIEW explode(adid_list) adTable AS adid;
OK
[1,2,3] a
[1,2,3] b
[1,2,3] c
[4,5]   c
[4,5]   d

多个Lateral View查询:

hive> SELECT pageid, adid > FROM tmp_laterview> LATERAL VIEW explode(adid_list) adTable AS adid> LATERAL VIEW explode(pageid_list) adTable AS pageid;
OK
1   a
2   a
3   a
1   b
2   b
3   b
1   c
2   c
3   c
4   c
5   c
4   d
5   d

5. Outer Lateral Views

在Hive0.12.0版本后引入

用户可以指定可选的OUTER关键字来生成行,即使LATERAL VIEW通常不会生成行。当所使用的UDTF不产生任何行时(使用explode()函数时,explode的列为空时,很容易发生上述这种情况)。 在这种情况下,源数据行不会出现在结果中。如果想让源数据行继续出现在结果中,可以使用 OUTER可以用来阻止关键字,并且来自UDTF的列使用NULL值代替。

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

hive> SELECT * FROM tmp_laterview LATERAL VIEW explode(array()) C AS a;
OK
Time taken: 0.077 seconds

但是使用OUTER关键词:

hive> SELECT * FROM tmp_laterview LATERAL VIEW OUTER explode(array()) C AS a;
OK
[1,2,3] ["a","b","c"] NULL
[4,5]   ["c","d"]   NULL
Time taken: 0.053 seconds, Fetched: 2 row(s)

原文:https://blog.csdn.net/SunnyYoona/article/details/62894761

Hive Lateral View使用指南相关推荐

  1. Hive Lateral View、视图、索引

    一.Hive Lateral View 1.Lateral View用于和UDTF函数(explode.split)结合来使用. 2.首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚 ...

  2. Hive Lateral View

    目录 Hive explode介绍: Hive posexplode介绍: Lateral View介绍: 使用多个Lateral View: outer关键字: Hive explode介绍: 它会 ...

  3. Hive Lateral View + explode 详解

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

  4. Hive lateral view 的用法

    lateral view 的语法格式 lateral view: LATERAL VIEW udtf (expression) tableAlias AS coluumAlias ( ',' , co ...

  5. Lateral View使用指南

    https://blog.csdn.net/sunnyyoona/article/details/62894761 select sum(pitem) from ( select map_values ...

  6. [hive]lateral view炸开两层

    一. 说明 1.lateral view 侧视图lateral view要和explode/split等UDTF函数一起使用,他可以在函数拆分成多行的基础上,将表其他字段按照拆分结果进行聚合. 2.用 ...

  7. Hive Lateral View explode字段值为空时,导致数据异常丢失解决方案

    1.问题描述 日常工作中,我们经常会用Lateral View 结合explode把非结构化数据转化成结构化数据,但是该方法对应explode的内容是有非null限制的,否则就有可能造成数据缺失. 现 ...

  8. hive lateral view explode列拆分与行转列用法

    在日常工作中,我们在处理数据时,会遇到某个列存在多个数据的情况,如果想拿到这个列里面每个数据进行后续处理的话,这种情况下有两种处理方式: 第一种:如果这个列多个数据是固定数目,可以使用split切分 ...

  9. mysql explode函数_hive中,lateral view 与 explode函数

    hive中常规处理json数据,array类型json用get_json_object(#,"$.#")这个方法足够了,map类型复合型json就需要通过数据处理才能解析. exp ...

最新文章

  1. 大主子表关联的性能优化方法
  2. 基于SSM实现汽车租赁系统
  3. 计算机专业博士在体制内做啥工作,体制内裸辞,三十多岁大龄考博,我收获了什么?...
  4. Python 提取数据库(Postgresql)并邮件发送
  5. Pytorch(3)-数据载入接口:Dataloader、datasets
  6. php给网页加水印_php实现图片添加水印功能
  7. 《原力计划【第二季】》第 3 周周榜揭晓!!!
  8. 物资管理信息系统4 -- 修改密码界面
  9. 如何让我的网站(独立网站或者blog)被百度收录?
  10. 《算法》第四版入门准备
  11. alpine安装curl
  12. 【UG】二次开发如何调试
  13. 【Javascript 基础】课堂笔记1
  14. Java 绘制带圆角头像的二维码
  15. 手把手教你安装vivado2015.4开发环境
  16. Nacos 注册中心主要贡献者详解注册中心的设计原理
  17. 【云原生】学习K8s,读完这篇就够了
  18. 单相交流电机转动原理于启动电容的作用
  19. MapReduce源码分析_李孟_新浪博客
  20. 帝国EmpireCMS7.5最新后台漏洞审计

热门文章

  1. Java网络编程入门,包含网络相关概念、InetAddress类、套接字Socket、网络上传和下载文件等
  2. python期中测试
  3. CSS input属性
  4. element input组件常用属性用法
  5. Windbg下无法显示dbgPrint输出的信息
  6. html一键回到顶部,HTML实现简单大方的 “返回顶部” 实例代码
  7. java pojo_java 什么是POJO
  8. Java中的POJO是什么?
  9. HTTP -- 网络分层
  10. Navigator.clipboard剪切板 API 可用于实现剪切、复制、粘贴的功能。