• 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. fatal: Authentication failed for 问题解决

    执行以下code git config --system --unset credential.helper 参考地址: https://www.jianshu.com/p/8a7f257e07b8

  2. 动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据

    动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据:由存储过程决定,如果编写的存储过程可以生成需要呈现的表格则直接绑定,否则要动态生成表格

  3. WebAPI中Area的使用

    很简单,创建area后,添加一下代码到AreaRegistration中即可 context.Routes.MapHttpRoute( name: "api_default", r ...

  4. Divide and Conquer_1.最大连续子数组

    给定一个数组,求它的一个子数组,使其求和最大. 这个问题的应用:给定一只股票很多天的价格,计算从哪天买进哪天卖出能获得最大利润. 给定 prices:100   113   98   87   65  ...

  5. Android(java)学习笔记203:JNI之NDK开发步骤

    1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...

  6. UI概念体系要素

    结构.渲染.交互.数据. 要素.呈现.交互 1)UI(组成)要素:结构 2)布局: 3)渲染: 4)事件处理: 5)数据:

  7. Seating Arrangement

    1997: Seating Arrangement Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 543     Solved:  ...

  8. cal - 显示一个日历

    总览 cal [-mjy ] [月份 [年份 ] ] 描述 Cal 显示一个简单的日历.. 如果没有指定参数, 则显示当前月份. 选项如下所列: -m 显示星期一作为一周的第一天.. (缺省为星期日. ...

  9. asp 读取 另外一个带参数的asp文件(服务器不支持!放弃吧!骚年!)

    (服务器不支持!放弃吧!骚年!) 主要作用是为了分离数据库,灵感是这样的:收到json影响,把asp里的数据,用一个页面输出,然后用另外一个页面读取,这样就不用有数据库位置的烦恼了 代码 网上有很多, ...

  10. jQuery动态移除和绑定事件

    function bindEvent() { //移除绑定事件 $('.btnsp').unbind('click'); //绑定事件 $('.btnsp').bind('click', functi ...