• 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. Android 7.0 因为file://引起的FileUriExposedException异常

    最近作者又碰到因为android 7.0 引起的兼容问题了. 在7.0以前的版本: //创建临时图片 File photoOutputFile = SDPath.getFile("temp. ...

  2. Fragment懒加载预加载

    1. 预加载viewpager.setOffscreenPageLimit(2);,默认是预加载1,可以结合懒加载使用. 如果希望进入viewpager,Fragment只加载一次,再次滑动不需加载( ...

  3. yii项目开发配置

    Clone项目 git clone https://gitee.com/s***/dianshang.git 安装yii php ini 选择 [0] Development 安装扩展 copy co ...

  4. 键盘工具栏的快速集成--IQKeyboardManager

    转自:http://www.cnblogs.com/gaoxiaoniu/p/5333187.html 键盘工具栏的快速集成--IQKeyboardManager IQKeyboardManager, ...

  5. html中 accept 属性

    1.HTML <input> 标签的 accept 属性 在文件上传中使用 accept 属性,本例中的输入字段可以接受 GIF 和 JPEG 两种图像: <form> < ...

  6. jQuery动画处理

    $(selector).hide(speed,callback);隐藏 $(selector).show(speed,callback);显示 $(selector).toggle(speed,cal ...

  7. codevs 1082 线段树练习 3 --分块练习

    时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[ ...

  8. Android(java)学习笔记190:ContentProvider使用之学习ContentProvider(内容提供者)的目的

    1. 使用ContentProvider,把应用程序私有的数据暴露给别的应用程序,让别的应用程序完成对自己私有的数据库数据的增删改查的操作. 2. ContentProvider的应用场景: 获取手机 ...

  9. IDEA -- idea无法导入HttpServlet包解决方法

    IntelliJ IDEA 没有导入 servlet-api.jar 这个架包,需要你手动导入支持. 步骤1: 步骤2: 步骤3: 在弹出框中找到Tomcat安装路径 下的lib文件夹..中的Serv ...

  10. JAVA基础——对象流

    对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息. 使得对象持久化.    ObjectInputStream   : 对象输入流    ObjectOutPutStream  :对象输 ...