当前位置: 首页 > news >正文

lateral view

原文地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView#

lateral view用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

一个简单的例子,假设我们有一张表pageAds,它有两列数据,第一列是pageid string,第二列是adid_list,即用逗号分隔的广告ID集合:

 

string pageidArray<int> adid_list
"front_page"[1, 2, 3]
"contact_page"[3, 4, 5]

 

要统计所有广告ID在所有页面中出现的次数。

首先分拆广告ID:

 

SELECT pageid, adid 
	FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;

 

执行结果如下:

 

string pageidint adid
"front_page"1
"front_page"2
"front_page"3
"contact_page"3
"contact_page"4
"contact_page"5

 

接下来就是一个聚合的统计:

 

SELECT adid, count(1) 
	FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid
GROUP BY adid;

执行结果如下:
int adidcount(1)
11
21
32
41
51
多个lateral view语句:
一个FROM语句后可以跟多个lateral view语句,后面的lateral view语句能够引用它前面的所有表和列名。
以下面的表为例:
Array<int> col1Array<string> col2
[1, 2][a", "b", "c"]
[3, 4][d", "e", "f"]
SELECT myCol1, col2 FROM baseTable
	LATERAL VIEW explode(col1) myTable1 AS myCol1;
的执行结果为:
int mycol1Array<string> col2
1[a", "b", "c"]
2[a", "b", "c"]
3[d", "e", "f"]
4[d", "e", "f"]

加上一个lateral view:
SELECT myCol1, myCol2 FROM baseTable
	LATERAL VIEW explode(col1) myTable1 AS myCol1
	LATERAL VIEW explode(col2) myTable2 AS myCol2;

它的执行结果为:
int myCol1string myCol2
1"a"
1"b"
1"c"
2"a"
2"b"
2"c"
3"d"
3"e"
3"f"
4"d"
4"e"
4"f"

注意上面语句中,两个lateral view按照出现的次序被执行。

相关文章:

  • Spring 一二事(10) - annotation AOP
  • ServiceStack.OrmLite MVC搭建
  • JDBCTemplate
  • 20160323实盘短线操作
  • Java 开发必会的 Linux 命令
  • 第三季度斩获重要投资的15家网络安全公司
  • 被迫尝试了各个版本的asm库读取类annotation
  • 思科推出新一代互联网边界防火墙 助力企业兼顾性能与安全
  • MacBook小技巧
  • 瞧!那个SSD领域的后来者正变为引领者
  • 【转】Data URL和图片,及Data URI的利弊
  • 高效运维最佳实践七字诀,不再憋屈的运维!
  • 报org.hibernate.MappingException: Unknown entity,可能
  • 从世界杯看社交大数据分析如何为行业客户创造价值
  • 前端开发者必备的20个在线工具和指南
  • [NodeJS] 关于Buffer
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • ECMAScript入门(七)--Module语法
  • ES6之路之模块详解
  • ESLint简单操作
  • golang中接口赋值与方法集
  • Hexo+码云+git快速搭建免费的静态Blog
  • Javascript基础之Array数组API
  • Linux Process Manage
  • Making An Indicator With Pure CSS
  • pdf文件如何在线转换为jpg图片
  • Python socket服务器端、客户端传送信息
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 浮现式设计
  • 关于 Cirru Editor 存储格式
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 应用生命周期终极 DevOps 工具包
  • 用mpvue开发微信小程序
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ![CDATA[ ]] 是什么东东
  • #pragma multi_compile #pragma shader_feature
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (黑马C++)L06 重载与继承
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (一)插入排序
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)setTimeout 和 setInterval 的区别
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .equals()到底是什么意思?
  • .Net core 6.0 升8.0
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 指南:抽象化实现的基类