• Lateral View和UDTF类功能函数一起使用,表中的每一行和UDTF函数输出的每一行进行连接,生成一张新的虚拟表,可以对UDTF产生的记录设置字段名称,新加的字段可以使用在sort by,group by等语句中,不需要再套一层子查询。Lateral View的作用是可以扩展原来的表数据。
  • Lateral View Syntax:
lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*
  • 示例准备
# 创建表
create table lateral_test(
name string,
course string,
hobby string
)
row format delimited
fields terminated by '\t'
lines terminated by '\n'; # 样例数据
[root@wadeyu ~]# cat lateral_test.log
wadeyu c1,c2,c3 basketball,tennis
tom c2,c3,c5 swimming,trip
polly c1,c2,c3 sz # 查询数据
0: jdbc:hive2://> select * from lateral_test;
OK
+--------------------+----------------------+---------------------+--+
| lateral_test.name | lateral_test.course | lateral_test.hobby |
+--------------------+----------------------+---------------------+--+
| wadeyu | c1,c2,c3 | basketball,tennis |
| tom | c2,c3,c5 | swimming,trip |
| polly | c1,c2,c3 | sz |
+--------------------+----------------------+---------------------+--+
3 rows selected (0.511 seconds)
  • 示例一:单个Lateral View
select
name,
course,
t_hobby.hobby
from lateral_test
lateral view explode(split(hobby, ',')) t_hobby as hobby; OK
+---------+-----------+----------------+--+
| name | course | t_hobby.hobby |
+---------+-----------+----------------+--+
| wadeyu | c1,c2,c3 | basketball |
| wadeyu | c1,c2,c3 | tennis |
| tom | c2,c3,c5 | swimming |
| tom | c2,c3,c5 | trip |
| polly | c1,c2,c3 | sz |
+---------+-----------+----------------+--+
5 rows selected (0.535 seconds)
  • 示例二:多个Lateral View

    • Lateral View左边的字段都可以使用
select
name,
t_course.course,
t_hobby.hobby
from lateral_test
lateral view explode(split(course, ',')) t_course as course
lateral view explode(split(hobby, ',')) t_hobby as hobby; +---------+------------------+----------------+--+
| name | t_course.course | t_hobby.hobby |
+---------+------------------+----------------+--+
| wadeyu | c1 | basketball |
| wadeyu | c1 | tennis |
| wadeyu | c2 | basketball |
| wadeyu | c2 | tennis |
| wadeyu | c3 | basketball |
| wadeyu | c3 | tennis |
| tom | c2 | swimming |
| tom | c2 | trip |
| tom | c3 | swimming |
| tom | c3 | trip |
| tom | c5 | swimming |
| tom | c5 | trip |
| polly | c1 | sz |
| polly | c2 | sz |
| polly | c3 | sz |
+---------+------------------+----------------+--+
15 rows selected (0.521 seconds)
  • 示例三:Outer Lateral View

    • UDTF未产生行时,连接结果为空,如果想输入的行也输出,需要加上Outer关键字
# 未加Outer关键字,输出内容为空
select
name,
course,
col1
from lateral_test
lateral view explode(array()) et as col1; +-------+---------+-------+--+
| name | course | col1 |
+-------+---------+-------+--+
+-------+---------+-------+--+
No rows selected (0.499 seconds) # 加上Outer关键字,输出不为空
select
name,
course,
col1
from lateral_test
lateral view outer explode(array()) et as col1; +---------+-----------+-------+--+
| name | course | col1 |
+---------+-----------+-------+--+
| wadeyu | c1,c2,c3 | NULL |
| tom | c2,c3,c5 | NULL |
| polly | c1,c2,c3 | NULL |
+---------+-----------+-------+--+
3 rows selected (0.543 seconds)

参考资料

【0】Hive wiki - LanguageManual LateralView

Hive之侧视图(Lateral View)的更多相关文章

  1. hive中的lateral view 与 explode函数的使用

    hive中的lateral view 与 explode函数的使用 背景介绍: explode与lateral view在关系型数据库中本身是不该出现的. 因为他的出现本身就是在操作不满足第一范式的数 ...

  2. hive中,lateral view 与 explode函数

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

  3. hive splict, explode, lateral view, concat_ws

    hive> create table arrays (x array<string>) > row format delimited fields terminated by ...

  4. hive中的 lateral view

    lateral view用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合. 一个简单的例子,假设我们有一张表pageAds,它有 ...

  5. hive lateral view 与 explode详解

    ref:https://blog.csdn.net/bitcarmanlee/article/details/51926530 1.explode hive wiki对于expolde的解释如下: e ...

  6. lateral view

    原文地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView# lateral view用于和spl ...

  7. 【hive】lateral view的使用

    当使用UDTF函数的时候,hive只允许对拆分字段进行访问的 例如: select id,explode(arry1) from table; —错误 会报错FAILED: SemanticExcep ...

  8. hive 使用笔记(table format;lateral view)

    1. create table 创建一张目标表,指定分隔符和存储格式: create table tmp_2 (resource_id bigint ,v int) ROW FORMAT DELIMI ...

  9. 【Hive学习之六】Hive Lateral View &视图&索引

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...

随机推荐

  1. Objective - c Foundation 框架详解2

    Objective - c  Foundation 框架详解2 Collection Agency Cocoa provides a number of collection classes such ...

  2. SQL Server性能调优——报表数据库与业务数据库分离

    前段时间把公司的主数据库切了,分成业务库和报表库,业务库向报表库进行实时的Replication.这个项目的上线提升了系统的性能和可维护性,现在把设计时的考量和所做的工作重新回顾一下,作为备忘. 项目 ...

  3. Bootstrap modal使用及点击外部不消失的解决方法

    这篇文章主要为大家详细介绍了Bootstrap modal使用及点击外部不消失的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Bootstrap modal使用及点击 ...

  4. bash - GNU Bourne-Again SHell

    概述(SYNOPSIS) bash [options] [file] 版权所有(COPYRIGHT) Bash is Copyright (C) 1989-2002 by the Free Softw ...

  5. CAD参数绘制直线(com接口)

    用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE ...

  6. 【东软实训】SQL函数

    SQL函数 SQL是用于访问和处理数据库的标准的计算机语言,我们所使用的的是Oracle SQL 一个数据库通常包含一个或多个表,每个表有一个名字表示,下图即为一个名为“emp”的表,接下来的操作都将 ...

  7. Learning Discriminative and Transformation Covariant Local Feature Detectors实验环境搭建详细过程

    依赖项: Python 3.4.3 tensorflow>1.0.0, tqdm, cv2, exifread, skimage, glob 1.安装tensorflow:https://www ...

  8. 为什么 [\000-\177]匹配任意7bit ascii码 ?

    如题 41     print \000;     42     print "\n";     43     print \177; 输出: SCALAR(0x3fce0)SCA ...

  9. BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配

    题意: (吃饭dining)有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享 ...

  10. 用PHP的GD库画五星红旗来玩玩

    1 header("Content-Type:image/jpeg"); $img=imagecreatetruecolor(999,667); $color=imagecolor ...