1. lateral view 简介

  hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表。配合UDTF函数使用,一般情况下经常与explode函数搭配,explode的操作对象(列值)是 ARRAY 或者 MAP ,可以通过 split 函数将 String 类型的列值转成 ARRAY 来处理。

【语法格式】

select col_A,col_B,tmp_table.tmp_col
from test_table
lateral view explode(split(col_C,'分隔符')) tmp_table as tmp_col
where partition_name='xxx';

【说明】

col_A,col_B,col_C: 都是原表 test_table 的列(字段);

tmp_table:explode形成的新虚拟表,可以不写;

tmp_col:explode 形成的新列(字段);

2. 实操

2.1 建表(hive)

创建一个“部门利润表”,按照日期分区,一共三个字段,“部门编号”、“部门层级树”、“利润(万元)”。DDL语句如下:

drop table if exists zero_test_01;

create table zero_test_01 (
DEPT_NO string comment'部门编号',
DEPT_TREE string comment'部门层级树',
BENIFIT int comment'利润(万元)'
)
comment '测试-部门利润表'
partitioned by (deal_date string comment '日期分区' )
stored as orc;

【字段说明】:DEPT_TREE 字段是按照“一级部门编号.二级部门编号.三级部门编号” 模式进行取值的。

2.2 插入数据

往“20220516”分区中插入三条数据。

alter table zero_test_01 drop if exists partition (DEAL_DATE='20220516');

insert into table zero_test_01 partition (DEAL_DATE='20220516') 
values ('101','A.A1.101',50),
('102','A.A1.102',20),
('201','A.A2.201',80);

DEPT_NO(部门编号) DEPT_TREE(部门层级树) BENIFIT(利润[万元])

101 A.A1.101 50

102 A.A1.102 20

201 A.A2.201 80

2.3 转成多行

利用 lateral view 和 explode 函数将 DEPT_TREE(部门层级树) 列按照“.”分割转成多行,通过结果可以看到,lateral view函数将 “部门层级树” 字段炸开进行了扩展,每个部门(DEPT_NO)都有与之对应的利润(BENIFIT),从三行数据直接变成9行数据。

select tmp_dept_no as DEPT_NO, BENIFIT
from zero_test_01
LATERAL VIEW explode(split(DEPT_TREE, '\\.')) tmp as tmp_dept_no
where DEAL_DATE='20220516'; 

DEPT_NO BENIFIT

A 80

A2 80

201 80

A 20

A1 20

102 20

A 50

A1 50

101 50

2.4 汇总求和

对部门利润进行向上汇总求和,可以看到每个部门的总利润。

select tmp_dept_no as DEPT_NO, sum(BENIFIT) as BENIFIT
from zero_test_01
LATERAL VIEW explode(split(DEPT_TREE, '\\.')) tmp as tmp_dept_no
where DEAL_DATE='20220516'
group by tmp_dept_no;

DEPT_NO BENIFIT

A 150

A1 70

A2 80

101 50

102 20

201 80

Hive中Lateral view用法的更多相关文章

  1. 【hive】lateral view的使用

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

  2. hive中 regexp_replace的用法,替换特殊字符问题

    数据仓库中有的字段不合格,有特殊字符,比如换行符. poi_name \n19013 \n12013 怎么把换行符替换掉呢? https://cwiki.apache.org/confluence/d ...

  3. hive中的with用法

    hive 可以通过with查询来提高查询性能,因为先通过with语法将数据查询到内存,然后后面其它查询可以直接使用,这种方法与创建临时表类似但是不需要创建临时表实体表,内存中的子查询结果在会话结束后会 ...

  4. hive lateral view 与 explode详解

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

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

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

  6. hive中,lateral view 与 explode函数

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

  7. hive中的 lateral view

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

  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 ...

  10. Hive之侧视图(Lateral View)

    Lateral View和UDTF类功能函数一起使用,表中的每一行和UDTF函数输出的每一行进行连接,生成一张新的虚拟表,可以对UDTF产生的记录设置字段名称,新加的字段可以使用在sort by,gr ...

随机推荐

  1. Go socket 编程源码解析(下)

    在上一节中介绍了 socket 的 Listen 方法,这里进一步介绍 Accept 和 Read,Write 方法. 1. Accept Accept 的核心逻辑在于: func (ln *TCPL ...

  2. 使用ensp搭建路由拓扑,并使用BGP协议实现网络互通实操

    转载请注明出处: 1.使用ENSP搭建的网络拓扑如下: 数据准备: 设备名称 接口 IP地址 DeviceA Loopback 0 1.1.1.1/32 Eth 1/0/0 172.16.0.1/16 ...

  3. WPF|如何在 WPF 中设计漂亮的社交媒体信息仪表板

    1. 效果展示 先来直接欣赏效果: 2. 准备 创建一个WPF工程,比如站长使用 .NET 7 创建名为 Dashboard3 的WPF项目,添加一些图片资源,项目目录如下: 2.1 图片资源 可在网 ...

  4. 【收集】C & C++

    序 链接 备注 1 C语言0长度数组(可变数组/柔性数组)详解_CHENG Jian的博客-CSDN博客_0数组   2 C 语言参考 | Microsoft Learn   3 C++ 语言参考 | ...

  5. bootstrap : 响应式导航

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  6. [转帖]如何使用 minio 进行 BR 备份

    https://tidb.net/blog/ada69456#5.%20%E4%BD%BF%E7%94%A8%20minio%20%E8%BF%9B%E8%A1%8C%20BR%20%E5%A4%87 ...

  7. [转帖]生产环境 TiDB 集群混合部署实践

    https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/tidb-cluster 一.背景​ 由于各种场外因素导致我们不能自由选择的理想硬件环 ...

  8. [转帖]VMware-ovftool命令行部署与导出镜像

    ESXI6.0之后管理为WEB,OVF导出/部署是个渣渣,如果虚拟机文件过大,一般会报网络异常中断而失败,可使用官方ovftool工具解决,快而方便,支持linux和Mac OSX,可脚本操作,批量处 ...

  9. [转帖]如何优雅的使用 Systemd 管理服务

    https://zhuanlan.zhihu.com/p/271071439 背景:我们在构建 Kubernetes 容器化平台时,会在节点上部署各种 agent ,虽然容器化当道的今天很多程序可以直 ...

  10. vite按需加载element-plus,减少项目体积,你必须学会

    1.在项目中安装 $ npm install element-plus --save $ yarn add element-plus $ pnpm install element-plus 2.安装对 ...