• 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. 在windows下用python调用darknet的yolo接口

    0,目标 本人计算机环境:windows7 64位,安装了vs2015专业版,python3.5.2,cygwin,opencv3.3,无gpu 希望实现用python调用yolo函数,实现物体检测. ...

  2. 从Code::Blocks到Dev–C++,Dev-C++安装调试一条龙

    关于单文件调试 Codeblocks只支持单文件编译,不支持单文件调试,只有整个工程才能调试,还有路径名里不能有中文和空格,很坑的!就因为这个弃用了. 去你的吧! 老子用别的了 谁支持单文件编译和调试 ...

  3. 【分享】iTOP-iMX6UL开发板驱动看门狗 watchdog 以及 Linux-c 测试例程

    iTOP-iMX6UL开发板看门狗测试例程,iTOP-iMX6UL 开发板的看门狗驱动默认已经配置,可以直接使用测试例程. 版本 V1.1:1.格式修改:2.例程修改完善,其中增加喂狗代码.1 看门狗 ...

  4. HDU_1237_简单计算器

    运算符为+,-,*,/:操作数为整数:且没有括号 设定符号优先级,先在栈底压运算符0 #include<iostream> #include<cstdio> #include& ...

  5. Android(java)学习笔记199:JNI之JNI概念

    1. JNI是什么? java native interface (java本机接口) 比如方法声明: public final native Class<?>  getClass(): ...

  6. hibernate inverse属性

    修改街道对应的区道信息: 修改后会发现程序执行了两次修改操作: 原因: 区道与街道是一对多的关系: 由于Hibernate是双向维护外键,所以当修改区道中的街道时,会修改一次外键:在修改街道中的区道时 ...

  7. chvt - 修改虚拟终端的前台环境

    SYNOPSIS(总览) chvtN DESCRIPTION(描述) chvt N 命令用来生成 /dev/ttyN 的前台终端.如果它本来不存在,即创建相应的屏幕.为了删除掉不用的VT(虚拟终端), ...

  8. java将很长的一条sql语句,自动换行输出(修改版)2019-06-01(bug未修复)

    package org.jimmy.autosearch2019.test; import java.util.HashMap; public class AutoLinefeedSql { publ ...

  9. python根据日期返回星期

    import  time #定义:timedate为时间戳def  formattime(timedate,s="%Y-%m-%d %H:%M:%S"):      return  ...

  10. 【C语言】控制台窗口图形界面编程(五):文本移动

    目录 00. 目录 01. CHAR_INFO结构 02. ScrollConsoleScreenBuffer函数 03. 程序示例 04. 官方参考程序 00. 目录 01. CHAR_INFO结构 ...