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   
目录
相关文章
|
15天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
9月前
|
存储
分区表和分桶表(高频重点)
分区表和分桶表(高频重点)
125 0
|
6月前
|
分布式计算 负载均衡 算法
Flink---5、聚合算子、用户自定义函数、物理分区算子、分流、合流
Flink---5、聚合算子、用户自定义函数、物理分区算子、分流、合流
|
9月前
|
存储
GreenPlum7聚合操作结构体之间关系
GreenPlum7聚合操作结构体之间关系
77 0
|
存储 人工智能 大数据
分区取模分库分表策略:多表事务分库内闭环解决方案
当表数据超过一定量级,就需要通过分表来解决单表的性能瓶颈问题;当数据库负载超过一定水平线,就需要通过分库来解决单库的连接数、性能负载的瓶颈问题。本文将阐述在不同情况下,让不同数量级表,在同一个业务ID的事务操作路由到同一分库中的方案,省去解决垮库事务的烦恼。
分区取模分库分表策略:多表事务分库内闭环解决方案
|
SQL 流计算 容器
通量电容器?流式SQL中的时态表和连接
简单介绍Flink流式处理数据的特性,以例子讲解Flink建模时态数据。
1320 0
|
关系型数据库
Greenplum 大宽表 OR 分层关系 - 大量nestloop,补齐其他字段的性能损耗
标签 PostgreSQL , Greenplum , 宽表 , 关系 , 循环 , 性能 背景 GPDB中,使用关系存储,还是使用大宽表呢? 关系存储,在查询其他表的内容时,需要JOIN补齐。JOIN可能需要重分布数据,维度表可以解决大量数据重分布的问题。
1388 0
|
大数据 分布式数据库 分布式计算
数据分布背后的逻辑
在分布式数据库及大数据平台中,数据如何分布到多台机器中是个很关键的问题。因为很多运算是数据密集型的,如果数据分布做得不好,就会导致网络传输量变大,从而影响性能。 一般来讲,分布式数据库会提供两种分布策略:对于大表按某个字段(的 HASH 值)去分布,大多数情况会使用主键,这样可以把数据分拆到多台机器上;对于小表则采用复制性分布,也就是每个机器上都会复制一份。
1171 0
|
算法 网络协议 数据库