分享一个 HIVE SQL 性能优化点-使用公共表表达式 CTE 替换临时表

本文介绍了使用HIVE SQL中的公共表表达式(CTE)来替换临时表进行性能优化的方法。CTE可以提高SQL运行效率,减少IO开销,并改善代码可读性和维护性。实验表明,CTE优化后性能提升约35%,适用于CDH、TDH和SPARK SQL。同时,文章提到了CTE的语法、优化细节以及适用场景,并提醒在某些情况下,如多语句引用时,可能仍需使用临时表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一个 HIVE SQL 性能优化点-使用公共表表达式 CTE 替换临时表

hive 作业的性能优化是一个永恒的话题,其优化方法也有很多,在此分享一个优化点,即编写 SQL 时使用公共表表达式 CTE 替换临时表,经测试优化效果还不错,尤其是涉及到当量IO的场景。

1. CTE 优化点概述

使用公共表表达式CTE (Common Table Expression) 替换临时表(create temporary table temp1 as xx),以提高 SQL 作业的运行效率,并提升代码的可阅读性和易维护性;

2. CTE 性能优化效果

  • 某SQL,使用一个160万数据的临时表的情况下,代码优化前 73秒,优化后47秒,性能提升大概有35%;
  • 某客户现场某 SQL 脚本优化前43分钟,优化后11分钟;(代码较长故不在此提供,核心要点是代码优化前使用了5个临时表,优化后使用了5个CTE);
  • 具体的性能提升情况,跟临时表的个数,临时表的数据量,以及集群的网络和磁盘IO性能有关;

3. CTE 性能优化原理

CTE 在功能上类似于一个没有持久化元数据到 hms 也没有持久化数据到 HDFS 的临时表或视图,CTE 通过把查询结果集保存在内存/本地磁盘中,避免了使用临时表的一系列开销,从而达到了性能优化的目的:

  • 使用临时表的系列开销,包括创建和删除 HMS中元数据的开销,也包括三副本模式创建和删除HDFS上的数据的开销;(使用临时表时会创建 hms中的元数据和 hdfs中的数据,session会话结束时会删除临时表在hms中的元数据和 hdfs中的数据);
  • 当数据量比较大时,Hdfs文件的创建和销毁,涉及到大量网络IO和磁盘IO,一般开销都是比较大的,对我们的大部分大数据应用来说,性能瓶颈一般是在IO而不是CPU;
  • 使用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明哥的IT随笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值