Hive里的With关键字用法(调优)
with...as...也叫做子查询部分,语句允许hive定义一个sql片段,供整个sql使用
简介
with...as...需要定义一个sql片段,会将这个片段产生的结果集保存在内存中,
后续的sql均可以访问这个结果集和,作用与视图或临时表类似.
语法限制
with...as...必须和其他sql一起使用(可以定义一个with但在后续语句中不使用他)
with...as...是一次性的
with...as...的完整格式是这样的
只定义不实用
同级的多个temp之间用,分割with只需要一次,as后的子句必须用(),
with...as...当然是可以嵌套的,此处举一个简单例子
with...as...只能在一条sql中使用
语句的优点
提高代码可读性(结构清晰)
简化sql,优化执行速度(with子句只需要执行一次)
栗子
现有 city 表,结构如下:
city_number city_name province
010 北京 北京
021 上海 上海
025 南京 江苏
0512 昆山 江苏
0531 济南 山东
0533 淄博 山东
然后分别有商品表good
city_number good_name
010 A
021 B
现在需要分别统计这上海商品,一般sql如下:
除了子查询,上述的的例子还可以用join来实现,
如果用with...as...语句实现,如下
看起来使用 with...as... 语句反而更复杂一点,但如果tmp_shanghai要被多次使用的使用,就很有必要
来看一个实际的例子,有一张操作表event主要字段如下:
date event_key
20190530 Delete
20190530 Put
20190530 Get
20190530 Get
20190601 Set
......
现在要求一条sql统计出Get与Set 操作的数量,先使用子查询实现
如果再增加其他项的统计呢,是否每一个均需要增加一个对event表进行扫描的自查询
使用 with...as...
阅读性是否比之前有所提高?此外,这条语句只对event表进行了一次扫描,将符合条件的数据存入temp中供后续计算,
在event表数据集非常大的情况下,性能将比子查询的方式优秀很多
转载自:https://blog.csdn.net/qq_44671288/article/details/108245394
__EOF__

本文链接:https://www.cnblogs.com/traveller-hzq/p/14480280.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现