spark sql基于RBO的优化

前言

这里只对RBO优化进行简单的讲解。讲解RBO之前必须对spark sql的执行计划做一个简单的介绍。
这个里讲解的不是很清楚,需要结合具体的执行计划来进行查看

1、执行计划

在spark sql的执行计划中,执行计划分为两大类,即逻辑执行计划、物理执行计划。物理执行计划才是sql最终执行的执行计划

逻辑执行计划

  • Unresolved逻辑执行计划:Parsed Logical Plan
    件检查 SQL 语法上是否有问题,然后生成 Unresolved(未解析)的逻辑计划,不检查表名、不检查列名
  • Resolved逻辑执行计划:Analyzed Logical Plan
    通过访问 Spark 中的 Catalog 存储库来解析验证语义、列名、类型、表名等。
  • 优化后的逻辑执行计划:Optimized Logical Plan
    Catalyst 优化器根据各种规则进行优化
  • Catalyst 优化器根据各种规则进行优化。

物理执行计划

  • 物理执行计划: Physical Plan
    确定连接的类型、分区的数量、过滤器、where、groupBy子句的执行顺序等

执行计划处理流程

在这里插入图片描述

核心步骤

在这里插入图片描述

2、RBO详解

RBO是基于规则的优化,是在Analyzed Logical Plan基础上的优化,基于规则有三种

  • 常量替换
    对于纯常量的运算的表达式,例如1+2,会将其替换为等值的3。如果列很多的话,需要对每一列都进行计算(如果表达式更加复杂会耗费更多的时间),能够消除不必要的计算。
  • 谓词下推
    使用where条件或者left on对数据进行过滤的操作提前执行,可以减少输入的数据量,减少计算的压力。想对于ORC和Parquet类型的存储,可以根据文件脚注的统计信息 ,下推谓词能够大幅减少数据扫描量,降低磁盘IO
    谓词下推规则:
    在这里插入图片描述
  • 列裁剪
    只读取那些与查询相关的字段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257316.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文详解Java单元测试Junit

文章目录 概述、Junit框架快速入门单元测试概述main方法测试的问题junit单元测试框架优点:使用步骤: 使用案例包结构 Junit框架的常见注解测试 概述、Junit框架快速入门 单元测试概述 就是针对最小的功能单元(方法),…

转转闲鱼链接后台搭建教程+完整版源码

最新仿二手闲置链接源码 后台一键生成链接,后台管理教程:解压源码,修改数据库config/Congig 不会可以看源码里有教程 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3 后台一键生成链接,后台管理教…

YOLOv8优化策略:Backbone改进 | UniRepLKNet,通用感知大内核卷积网络,RepLK改进版本 | 2023.11

🚀🚀🚀本文改进: UniRepLKNet,通用感知大内核卷积网络,ImageNet-22K预训练,精度和速度SOTA,ImageNet达到88%, COCO达到56.4 box AP,ADE20K达到55.6 mIoU 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科…

Matlab使用基础

基本命令 clear all %清除Workspace中的所有变量 clc %清除Command Window中的所有命令 %和%%是注释 whos%显示当前内存中的变量信息基础函数 abs()%取绝对值 char(65)%将ASCII码数值变成字符 num2str(65)%将里面的内容变成字符串 length()%字符串长度,不把/0的长…

dockers安装rabbitmq

RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQhttps://www.rabbitmq.com/ Downloading and Installing RabbitMQ — RabbitMQ docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management 之后参照:dock…

OpenCV-Python:随机数与随机颜色

目录 Python中随机数 OpenCV-Python随机数 随机颜色的生成 随机噪声生成 代码练习与测试 知识笔记 Python中随机数 在Python中,我们可以使用random模块来生成随机数。random模块提供了一系列的函数来生成不同类型的随机数。以下是一些常用的随机数生成函数&…

解决git clone报错: Failed to connect to github.com port 443 after 21068 ms: Couldn’t connect to server

解决git clone报错: Failed to connect to github.com port 443 after 21068 ms: Couldn’t connect to server 1. 问题 不能git clone来自Github上的仓库,报端口443错误。 2.解决方案 主要是由于Git端口与系统代理不一致 默认的端口号:1…

麒麟KYLINOS操作系统修改GRUB字体大小

原文链接:麒麟iso镜像中GRUB字体大小怎么改? hello,大家好啊,对于使用Linux系统的朋友来说,GRUB(GRand Unified Bootloader)是一个非常熟悉的名字。它是Linux系统中最常用的启动引导程序。但有时…

Docker本地部署Drupal内容管理框架并实现公网远程访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址7. 结语 前言 Dupal是一个强大的CMS,适用于各种不同的网站项目,从小型个人博客到大型企业级门户网站。它…

基于JAVA+SpringBoot+微信小程序的宠物领养平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着人们生活水平的提…

系列学习前端之第 2 章:一文精通 HTML

全套学习 HTMLCSSJavaScript 代码和笔记请下载网盘的资料: 链接: https://pan.baidu.com/s/1-vY2anBdrsBSwDZfALZ6FQ 提取码: 6666 HTML 全称:HyperText Markup Language(超文本标记语言) 1、 HTML 标签 1. 标签又称元素&#…

通过51单片机控制28byj48步进电机按角度正反转旋转

一、前言 本项目基于STC89C52单片机,通过控制28BYJ-48步进电机实现按角度正反转旋转的功能。28BYJ-48步进电机是一种常用的电机,精准定位和高扭矩输出,适用于许多小型的自动化系统和机械装置。 在这个项目中,使用STC89C52单片机…