greenplum 两表关联 重分布 广播

简介: 假设需要两张表A,B关联,其中A表中关联键不是分布键,那么对于a表而言就会发生如下两种情况 1 广播 2  重分布 分布式的关联有两种 单库关...

假设需要两张表A,B关联,其中A表中关联键不是分布键,那么对于a表而言就会发生如下两种情况

1 广播

2  重分布


分布式的关联有两种

单库关联:分布键和关联键一致,只需要在单个库关联后得到结果即可

跨库关联:关联键和分布键不一致,数据重新分布,转换为单库关联,从而实现表的关联


测试表
表名 字段 分布键 数量
A ID1,ID2 ID1 M
B ID1,ID2 ID1 N



考虑几种连接方式

内连接

1、分布键与关联键一致,单库连接

SELECT * FROM A,B WHERE A.ID1=B.ID1;

2、一张表的分布键与关联键不一致

SELECT * FROM A,B WHERE A.ID1 = B.ID2;

首先第一点b表分布键与关联键不一致

考虑 将 b 表按照 id2 重分布一遍则数据量为N
(其实还可以将b表广播z份,数据量为N*z,所以就可以判断出,b表最多重分布)
将a广播z份,则数据为M*z

就是要比较两者产生的数据量大小,如果b大,则让a广播,如果b小,则rang b重分布


3、两张表的分布键与关联键不一致

select * from a,b where a.id2=b.id2;

重分布: M+ N

某个广播 min(M,N)*Z

同样比较两者的大小


左连接

1、分布键与关联键一致,单库连接

2、一张表的分布键与关联键不一致

select * from a left join b on a.id1=b.id2;


左边不能广播,而且左表关联键为分布键,那么对于这个连接,只能是b表操作,b表重分布为N,b表广播为N*z

数据量为N

select * from a left join b on a.id2=b.id;

左连接,左表不能被广播,那么

1、a表重分布  M
2、将b表广播,n*z





3、两张表的分布键与关联键不一致


select * from a left join b on a.id2=b.id2;

还有两种方式

将表A与表B都按照id2字段将数据重分布一遍,数据量M+N

表A不能广播,只能将B,代价为N*z



全连接

1、关联键为分布键,单库连接

select * from a full outer join b where a.id=b.id;

2、一张表的分布键与关联键不一致

select *  from a full outer join b where a.id=b.id2;

两者都不能被广播,那么只能为重分布

只能为 N

3、select * from a full outer join b where a.id2=b.id2;

将两张表重分布 M+N   
目录
相关文章
|
Prometheus 监控 Cloud Native
手把手教你Prometheus + Granafa实现mysql 性能监测部署
数据库性能监控可以说是十分重要,能否自行搭建环境实现像阿里云或是腾讯云那样直观的展示不同维度数据的功能?答案是肯定的。下面详细说明一下安装部署过程以及过程中出现的问题,希望对你有所帮助!
手把手教你Prometheus + Granafa实现mysql 性能监测部署
|
10月前
|
存储 监控 关系型数据库
《理解MySQL数据库》 InnoDB 日志体系深度解析
本文深入解析InnoDB三大日志机制:Redo Log保障持久性与崩溃恢复,Undo Log实现事务回滚与MVCC,Binlog支持主从复制。详解其工作原理、协作流程及二阶段提交机制,并介绍性能优化与监控实践,助你掌握MySQL日志核心。
|
Kubernetes Java 开发工具
CI/CD(五)Flink 应用部署
Flink 应用需要解决的是任务的灵活增加(通常以 maven module 的方式存在同一个git仓库中),不能依赖手工注册应用或.polaris-ci.yml自动注册
565 1
|
关系型数据库 分布式数据库 数据库
阿里云PolarDB数据库蝉联SIGMOD最佳论文奖
阿里云PolarDB凭借全球首创基于CXL Switch的分布式内存池技术,在SIGMOD 2025上荣获工业赛道“最佳论文奖”,连续两年蝉联该顶会最高奖项。其创新架构PolarCXLMem打破传统RDMA技术瓶颈,性能提升2.1倍,并已落地应用于内存池化场景,推动大模型推理与多模态存储发展,展现CXL Switch在高速互联中的巨大潜力。
阿里云PolarDB数据库蝉联SIGMOD最佳论文奖
|
机器学习/深度学习 运维 监控
智能运维Agent:自动化运维的新范式
在数字化转型浪潮中,智能运维Agent正重塑运维模式。它融合人工智能与自动化技术,实现从被动响应到主动预防的转变。本文详解其四大核心功能:系统监控、故障诊断、容量规划与安全响应,探讨如何构建高效、可靠的自动化运维体系,助力企业实现7×24小时无人值守运维,推动运维效率与智能化水平全面提升。
2859 0
|
存储 数据挖掘 Apache
Apache Doris + Iceberg 快速搭建指南|Lakehouse 使用手册(三)
如何在 Docker 环境下快速搭建 Apache Doris + Apache Iceberg 测试 & 演示环境,并展示各功能的使用操作
1122 8
Apache Doris + Iceberg 快速搭建指南|Lakehouse 使用手册(三)
|
缓存 关系型数据库 MySQL
MySQL参数优化之thread_cache_size
MySQL参数优化之thread_cache_size
4089 0
|
Shell Docker 容器
如何在Docker内部使用ulimit——如何在docker内部生成core
Ulimit 在linux里ulimit命令可以对shell生成的进程的资源进行限制。 常用的ulimit限制 打开文件句柄数 core文件大小 设置进程能够消耗的虚拟内存 设置用户能够打开的进程数目 不太常用的ulimit限制 设置数据段的最大值.
9389 0
|
关系型数据库 数据库 SQL
Greenplum 的一次紧急恢复
Greenplum的一次非常规恢复方法
3084 0

热门文章

最新文章