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

关于小标join大表,操作不当会导致笛卡尔积,数据倾斜

以前总是说笛卡尔积,笛卡尔积,没碰到过,今天在跑流程调度时,就碰到笛卡尔积了,本来,就是查询几个编码的信息,然后由于使用的是with tmp as,没使用where in ,所以跑的很慢

现象,  4条编码,与一张数据量在亿万级别的表进行join,  占用内存在30多g,执行10分钟,20分钟以上,依然半分钟进度只增加1%,到了50% - 60%结果就卡住跑不动了。此时应该就是发生了数据倾斜,笛卡尔积。

后续,同事反馈内存占用较大,需要停止执行任务,然后就停止了,  然后同事和领导跑过来看执行的语句,后被另一个领导批评了一点,然后观察我的sql

WITH tmp.test1  AS 
(    
SELECT '111111111' AS c1_num, '222222222' AS c2_num     
UNION ALL SELECT '4444444444', '333333333'      
UNION ALL SELECT '555555555', '666666666666'     
UNION ALL SELECT '8888888888', '77777777777' 
) select tn.c1_num,tn.c2_numfrom  tmp.test1 tninner join H_IS.day t ON tn.c1_num = t.c1_num AND tn.c2_num = t.c2_numwhere t.dt >= '20240301'  and  t.dt <= '20240630' 

发现我这样写,会导致全表扫描,让我改sql,我寻思不就是占用了30多个g吗,有人还占用上千g内存呢,心想不至于吧。      起初还以为是分区的问题,dt限制的分区天数太多导致跑的满,后面改完sql以后,发现不是day表分区问题,就是小表Join达标出现了数据倾斜, 后学,我按照经理的建议,将sql的关联条件改到where里面执行,首先创建一个表存编码,然后再从where里面过滤,

select tn.c1_num,tn.c2_numfrom  tmp.test1 tninner join H_IS.day t ON tn.c1_num = t.c1_num AND tn.c2_num = t.c2_numwhere t.dt >= '20240301'  and  t.dt <= '20240630'  and t.c3_num in (select c1_num from   tmp.test1)

发现改完后的代码,执行速度直接飞起,从原来的执行10-20分钟没有执行完,到1分钟,30秒就马上就出结果了,于是我意识到,这里,with tmp as生成的虚拟表与大表join导致数据倾斜,

所以执行的很慢还占用内存,才where提前分区过滤裁剪,提高了执行速度,避免了数据倾斜。

这里补充gpt的解释:

        

问题分析

  1. WITH 子句(CTE)中的数据量小但未被优化处理:

    • 你的 WITH tmp.test1 创建的是一个小型的虚拟数据集,它在 SQL 查询优化器中往往被视为一个笛卡尔积生成表(即将它的内容分布到所有可能的分区中)。
    • 如果后续 JOIN 操作涉及的大表(例如 H_IS.day)有大量分区,查询引擎需要扫描所有分区的数据并将临时数据广播到每个分区,从而导致数据倾斜和内存高占用。
  2. INNER JOIN 中的广播问题:

    • 在大数据场景中,Hive 或类似系统会默认对小表广播(broadcast join)。当 WITH 中的数据不是一个实际表,而是一个临时计算结果时,可能没有被优化为广播操作,导致全表扫描和网络数据传输。
  3. WHERE IN 的优化:

    • 在第二个查询中,当你将 WITH 的数据写入一个物理表并使用 WHERE IN 筛选时,查询引擎可以识别出表中字段的索引(如果有)和分区,直接过滤数据。
    • 而且 WHERE IN 的条件可以被优化器提前下推到 JOIN 的早期阶段,减少需要计算和传输的数据量。
  4. 分区过滤的问题:

    • 如果 t.dt是分区字段,使用 WITH 定义的子查询可能无法触发分区裁剪,而使用实际表和 WHERE IN 则可以利用分区裁剪优化性能。

相关文章:

关于小标join大表,操作不当会导致笛卡尔积,数据倾斜

以前总是说笛卡尔积&#xff0c;笛卡尔积&#xff0c;没碰到过&#xff0c;今天在跑流程调度时&#xff0c;就碰到笛卡尔积了&#xff0c;本来&#xff0c;就是查询几个编码的信息&#xff0c;然后由于使用的是with tmp as&#xff0c;没使用where in ,所以跑的很慢 现象&#…...

SpringMVC全局异常处理

一、Java中的异常 定义&#xff1a;异常是程序在运行过程中出现的一些错误&#xff0c;使用面向对象思想把这些错误用类来描述&#xff0c;那么一旦产生一个错误&#xff0c;即创建某一个错误的对象&#xff0c;这个对象就是异常对象。 类型&#xff1a; 声明异常&#xff1…...

出海服务器可以用国内云防护吗

随着企业国际化进程的加速&#xff0c;越来越多的企业选择将业务部署到海外服务器上&#xff0c;以便更贴近国际市场。然而&#xff0c;海外服务器也面临着来自全球各地的安全威胁和网络攻击。当出海服务器遭受攻击时&#xff0c;是否可以借助国内的云服务器来进行有效的防护呢…...

从零开始的使用SpringBoot和WebSocket打造实时共享文档应用

在现代应用中&#xff0c;实时协作已经成为了非常重要的功能&#xff0c;尤其是在文档编辑、聊天系统和在线编程等场景中。通过实时共享文档&#xff0c;多个用户可以同时对同一份文档进行编辑&#xff0c;并能看到其他人的编辑内容。这种功能广泛应用于 Google Docs、Notion 等…...

Ant Design Pro实战--day01

下载nvm https://nvm.uihtm.com/nvm-1.1.12-setup.zip 下载node.js 16.16.0 //非此版本会报错 nvm install 16.16.0 安装Ant Design pro //安装脚手架 npm i ant-design/pro-cli -g //下载项目 pro create myapp //选择版本 simple 安装依赖 npm install 启动umi yarn add u…...

pcl点云库离线版本构建

某天在摸鱼的小邓接到任务需要进行点云数据的去噪&#xff0c;在万能的github中发现如下pcl库非常好使&#xff0c;so有了此&#xff0c; 1.下载vs2017连接如下&#xff1a; ed2k://|file|mu_visual_studio_community_2017_version_15.1_x86_x64_10254689.exe|1037144|12F5C1…...

字节高频算法面试题:小于 n 的最大数

问题描述&#xff08;感觉n的位数需要大于等于2&#xff0c;因为n的位数1的话会有点问题&#xff0c;“且无重复”是指nums中存在重复&#xff0c;但是最后返回的小于n最大数是可以重复使用nums中的元素的&#xff09;&#xff1a; 思路&#xff1a; 先对nums倒序排序 暴力回…...

ElasticSearch常见面试题汇总

一、ElasticSearch基础&#xff1a; 1、什么是Elasticsearch&#xff1a; Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎&#xff0c;每个字段都被索引并可被搜索&#xff0c;可以快速存储、搜索、分析海量的数据。 全文检索是指对每一个词建立一个索引…...

Spring Boot如何实现防盗链

一、什么是盗链 盗链是个什么操作&#xff0c;看一下百度给出的解释&#xff1a;盗链是指服务提供商自己不提供服务的内容&#xff0c;通过技术手段绕过其它有利益的最终用户界面&#xff08;如广告&#xff09;&#xff0c;直接在自己的网站上向最终用户提供其它服务提供商的…...

工作中常用springboot启动后执行的方法

前言&#xff1a; 工作中难免会遇到一些&#xff0c;程序启动之后需要提前执行的需求。 例如&#xff1a; 初始化缓存&#xff1a;在启动时加载必要的缓存数据。定时任务创建或启动&#xff1a;程序启动后创建或启动定时任务。程序启动完成通知&#xff1a;程序启动完成后通…...

力扣-图论-3【算法学习day.53】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

Linux上的C语言编程实践

说明&#xff1a; 这是个人对该在Linux平台上的C语言学习网站笨办法学C上的每一个练习章节附加题的解析和回答 ex1: 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后运行它看看发生了什么。 vim ex1.c打开 ex1.c 文件。假如我们删除 return 0…...

芝法酱学习笔记(1.3)——SpringBoot+mybatis plus+atomikos实现多数据源事务

一、前言 1.1 业务需求 之前我们在讲解注册和登录的时候&#xff0c;有一个重要的技术点忽略了过去。那就是多数据源的事务问题。 按照我们的业务需求&#xff0c;monitor服务可能涉及同时对监控中心数据库和企业中心数据库进行操作&#xff0c;而我们希望这样的操作在一个事…...

【计算机网络】实验12:网际控制报文协议ICMP的应用

实验12 网际控制报文协议ICMP的应用 一、实验目的 验证ping命令和tracert命令的工作原理。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑并进行信息标注&#xff0c;将所需要配置的IP地址写在对应的主机或者路由器旁边&#xff0c;如图1所示。 图…...

收缩 tempdb 数据库

1、 本文内容 注解使用 ALTER DATABASE 命令使用 DBCC SHRINKDATABASE 命令使用 DBCC SHRINKFILE 命令运行收缩操作时出现错误 8909 适用于&#xff1a; SQL ServerAzure SQL 托管实例 本文讨论可用于收缩 SQL Server 中 tempdb 数据库的各种方法。 可以使用下列任一方法来…...

kubesphere搭建 postgres15

创建configMap POSTGRES_PASSWORD数据库密码 PGDATA数据目录 创建【有状态副本集】工作负载 1.创建基本信息 2.容器组设置 配置环境变量 3.存储设置 完成之后点击下一步 配置服务 创建服务 配置基本信息 配置服务信息 外部访问选择nodePort&#xff0c;然后点击…...

解决npm问题用到的资源,错误原因和方法

资源&#xff1a; 1.node版本管理工具nvm: 下载地址&#xff1a;https://nvm.uihtm.com/nvm-1.1.12-setup.zip 使用方法&#xff1a;https://nvm.uihtm.com/ 2.node各版本&#xff1a; https://nodejs.org/en/about/previous-releases 3.nodejs: 下载地址&#xff1a;https://…...

【uni-app 微信小程序】新版本发布提示用户进行更新

知识准备 uni.getUpdateManager文档介绍 不支持APP与H5&#xff0c;所以在使用的时候要做好平台类型的判断&#xff0c;如何判断&#xff0c;参考条件编译处理多端差异 代码参考 export const updateApp () > {const updateManager uni.getUpdateManager()updateManag…...

Redis性能优化18招

Redis性能优化的18招 目录 前言选择合适的数据结构避免使用过大的key和value[使用Redis Pipeline](#使用Redis Pipeline)控制连接数量合理使用过期策略使用Redis集群充分利用内存优化使用Lua脚本监控与调优避免热点key使用压缩使用Geo位置功能控制数据的持久化尽量减少事务使…...

ElasticSearch 与向量数据库的结合实践:突破亿级大表查询瓶颈20241204

&#x1f4a1; ElasticSearch 与向量数据库的结合实践&#xff1a;突破亿级大表查询瓶颈 &#x1f4da; 引言 随着业务规模的不断扩大&#xff0c;传统关系型数据库在处理 亿级大表 时&#xff0c;性能瓶颈愈加凸显。关键词检索、模糊查询、多条件筛选等需求逐步升级&#xff…...

社交媒体运营实战指南:从算法逻辑到内容变现的完整技能树

1. 项目概述&#xff1a;社交媒体技能库的构建与价值在信息爆炸的今天&#xff0c;社交媒体早已不是简单的“发发状态、看看朋友”的平台。无论是个人品牌塑造、产品推广、内容创作&#xff0c;还是求职招聘、行业洞察&#xff0c;社交媒体都扮演着至关重要的角色。然而&#x…...

黄仁勋CMU演讲:取代你的是会AI的人,所有人同一起跑线,奔跑吧

老黄又当博士了。这是他的第7个荣誉博士学位&#xff0c;而且英特尔CEO陈立武亲自为其授袍。卡内基梅隆大学&#xff08;CMU&#xff09;最新一届毕业典礼上&#xff0c;黄仁勋向5800多名毕业生发表演讲。面对AI浪潮的冲击&#xff0c;所有人都在焦虑、都在担心会不会被AI取代&…...

量子计算采购策略与技术路线比较

1. 量子计算采购的现状与挑战 量子计算技术正在经历从实验室研究向实际应用过渡的关键阶段。根据2023年全球量子计算产业报告&#xff0c;量子处理器市场规模预计将从2023年的4.7亿美元增长到2030年的65亿美元&#xff0c;年复合增长率高达45%。然而&#xff0c;面对超导、离子…...

5月12日直播 | CANN Bench:为昇腾算子评测立起一把统一的尺子

CANN Bench&#xff1a;为昇腾算子评测立起一把统一的尺子 当 Coding Agent 一次写出几十个算子已成为常态&#xff0c;"什么算优质算子"变成了一个单一维度无法评估准确的问题&#xff1a;能不能过编译只是入场券&#xff0c;精度是否经得起验证、换个 shape 换个 d…...

C++数据结构进阶|排序:吃透O(n log n)核心算法,搞定面试高频考点

文章目录 前言 一、希尔排序&#xff08;Shell Sort&#xff09;—— 插入排序的进阶优化版 二、快速排序&#xff08;Quick Sort&#xff09;—— C面试手写高频&#xff0c;实际开发首选 三、归并排序&#xff08;Merge Sort&#xff09;—— 稳定排序的核心选择 四、堆排…...

Qdrant 如何配置 API Key 认证

Qdrant 如何配置 API Key 认证 Qdrant 是当下最流行的向量数据库之一&#xff0c;广泛应用于 RAG&#xff08;检索增强生成&#xff09;、相似度搜索、AI 应用等场景。生产环境中&#xff0c;API Key 认证是保障数据安全的基本手段。本文详细介绍 Qdrant 的 API Key 配置方法&a…...

终极指南:如何一键下载国家智慧教育平台电子课本PDF

终极指南&#xff1a;如何一键下载国家智慧教育平台电子课本PDF 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。 项目地址: …...

为Claude Code配置Taotoken解决封号与Token不足困扰

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Claude Code配置Taotoken解决封号与Token不足困扰 应用场景类&#xff0c;针对频繁使用Claude Code作为编程助手但受限于官方限制…...

JavaScript自动化PPT生成:如何用代码解放你的演示文稿生产力

JavaScript自动化PPT生成&#xff1a;如何用代码解放你的演示文稿生产力 【免费下载链接】PptxGenJS Build PowerPoint presentations with JavaScript. Works with Node, React, web browsers, and more. 项目地址: https://gitcode.com/gh_mirrors/pp/PptxGenJS 还在为…...

构建自我进化的AI家园:基于多智能体与GitOps的工程实践

1. 项目概述&#xff1a;构建一个能自我进化的AI家园如果你和我一样&#xff0c;对那种“一问一答”式的AI聊天机器人感到厌倦&#xff0c;总想着能不能让AI更“主动”一点&#xff0c;甚至能帮你打理整个技术栈&#xff0c;那么这个项目绝对值得你花时间研究。ai-homebase不是…...