第2.9章:StarRocks表设计--Colocation Join

Shuffle Join、Colocate Join的简介及对比 Shuffle Join和Colocate Join都是用于在分布式计算环境中进行数据连接的方法,但它们的实现和性能特点有所不同。Shuffle Join在数据传输和网络开销方面可能更加昂贵,而Colocate Join通过减少数据传输和本地执行连接操作来提高性能。然而,Colocate Join需要更多的手动优化和设计,而Shuffle Join由分布式计算框架自动处理。选择使用哪种方法取决于具体的应用场景和性能需求。 阅读详情

在分布式集群中,每张表的数据都会分散在集群多个节点上,所以当我们进行join时避免不了节点间数据网络传输带来额外的延迟和其他开销。为了加速查询,StarRocks设计了Colocation Join。

在Colocation Join中,StarRocks引入了Colocation Group(CG)和Colocation Group Schema(CGS)的概念,CGS是指CG的分桶键,分桶数以及副本数等信息。Colocation Join实现的核心就是将同一个Colocation Group中的表采用一致的CGS也即使用一致的分桶键(字段数量、顺序及字段类型一致即可,名称不需要一致)、一致的副本数量和一致副本放置方式,进而保证这些Table对应的分桶副本会落在相同一组BE节点上。这样如果join列为分桶键,则计算节点只需做本地join,而无需从其他节点获取数据,进而实现大表join的加速。

在表设计文档中,我们先不细述Colocation Join的原理和实现,仅简单说明一下使用方式。创建表

table12:

CREATE TABLE table12(

k1 int,

v1 int sum

)

DISTRIBUTED BY HASH(k1) BUCKETS 8

PROPERTIES(

"colocate_with" = "group1",

"replication_num" = "1"

);
 

 

在建表时,我们在PROPERTIES中指定属性"colocate_with" = "group_name",即表示这个表是一个Colocation Join表,并且归属于一个指定的Colocation Group。

如果指定的Group不存在,则StarRocks会自动创建一个只包含当前这张表的Group。如果Group已存在,则StarRocks会检查当前表是否满足Colocation Group Schema。如果满足,则会创建该表,并将该表加入Group。同时,表会根据已存在的Group中的数据分布规则创建分片和副本。Group归属于一个Database,Group的名字在一个Database内唯一。

为了使得Table能够有相同的数据分布,同一CG内的Table必须保证下列约束:

1、同一CG内的Table的分桶键的类型、数量和顺序完全一致(字段名称可以不一致),并且桶数一致,这样才能保证多张表的数据分片能够一一对应地进行分布控制。

2、同一个CG内所有表的所有分区(Partition)的副本数必须一致。如果不一致,可能出现某一个Tablet的某一个副本,在同一个BE上没有其他的表分片的副本对应。

3、同一个CG内所有表的分区键,分区数量可以不同。

结合上面的约束条件举例,我们创建表table13,将其加入group1中:
 

CREATE TABLE table13(

uid int,

city varchar(40),

total int sum

)

DISTRIBUTED BY HASH(uid) BUCKETS 8

PROPERTIES(

"colocate_with" = "group1",

"replication_num" = "1"

);

这样当对table12与table13进行关联条件为table12.k1=table13.uid的join时,若Colocation Join生效,理论上查询效率会非常高(此时explain sql,可以发现查询计划中的Hash Join会显示colocate: true)。

我们同样可以通过show语句查看集群内已存在的Group信息:

SHOW PROC '/colocation_group';

对一个已经创建的表,我们也可以增加、修改或删除表的colocate_with属性。例如修改table12的Colocation Group为group2:

ALTER TABLE table12 SET ("colocate_with" = "group2");

如果该表之前没有指定过Group,则该命令检查Schema,并将该表加入到该 Group(Group不存在则会创建)。如果该表之前有指定其他Group,则该命令会先将该表从原有Group中移除,并加入新Group(Group不存在则会创建)。

我们也可以将表的colocate_with属性设置为空,以删除其Colocation Group属性。比如删除table12的colocate_with属性:

ALTER TABLE table12 SET ("colocate_with" = "");

当Group中最后一张表彻底删除后(彻底删除是指从回收站中删除。通常,一张表通过DROP TABLE命令删除后,会在回收站默认停留一天的时间后,再删除),该Group也会被自动删除。

对于Colocation表,我们在使用过程中还需要注意:

当对一个具有Colocation属性的表进行增加分区(ADD PARTITION)、修改副本数时,StarRocks会检查修改是否会违反Colocation Group Schema,如果违反则会拒绝。

Colocation表的副本分布需要遵循Group中指定的分布,所以在副本修复和均衡方面和普通分片有所区别,前面使用show语句查看Group信息时,我们需要关注其中的IsStable属性,当值不为true时,表示当前Group内有部分表的分片正在做修复或迁移,此时,相关表的Colocation Join将退化为普通Join,在explain join sql时提示:colocate: false, reason: group is not stable。

Colocation表的副本均衡受FE参数disable_colocate_balance控制,为保证查询效率,我们可以在查询频繁的时间临时关闭Colocation表的副本修复和副本均衡,在业务空闲时间再开启。

disable_colocate_balance:是否关闭StarRocks的自动Colocation副本均衡。默认为false,即不关闭。该参数只影响Colocation表的副本均衡,不影响普通表。

这个参数都可以动态修改,关闭自动均衡的写法为:

ADMIN SET FRONTEND CONFIG ("disable_colocate_balance" = "true");

恢复自动均衡:

ADMIN SET FRONTEND CONFIG ("disable_colocate_balance" = "false");

如果想对比使用colocation join前后的join性能,也可以从session级别暂时关闭colocation join功能,SQL写法为:

set disable_colocate_join = true;

 

StarRocks(四)StarRocks的使用 1、Colocate join shuffle join 和 broadcast join 中,参与 join 的两张表的数据行,若满足 join 条件,则需要将它们汇合在一个节点上,完成 join。这两种 join 方式,都无法避免节点间数据网络传输带来额外的延迟和其他开销。而 colocation join 则可避免数据网络传输开销,核心思想是将同一个 Colocation Group 中表,采用一致的分桶键、一致的副本数量和一致副本放置方式,因此如果 join 列为分桶键,则计算节... 阅读详情

相关推荐

StarRocks Join优化避坑指南:从Broadcast到Colocate的四种分发方式选择

本文深度解析StarRocks分布式Join性能优化的四种分发策略(Shuffle、Broadcast、Bucket和Colocate),帮助开发者根据数据特征和业务场景选择最优方案。通过实战案例和性能对比,详细讲解如何避免数据倾斜、网络传输瓶颈等常见问题,提升SQL查询效率。

weixin_29198045的博客 401

第6.4章:StarRocks查询加速——Colocation Join

第6.4章:StarRocks查询加速——Colocation Join

爱吃辣条的博客 2318

整合StarRocks主键表全部知识点

总结starrocks主键表全部知识点

qq_18218071的博客 3272

多维聚合实战:从SQL到OLAP的高效分析架构设计

多维聚合是BI与数据分析的核心能力,本质是在时间、地域、产品等正交维度构成的N维数据空间中进行切片、钻取与滚动计算。它超越简单GROUP BY,涉及维度建模、粒度对齐、SCD版本管理及物化策略等系统性工程。掌握层次性、一致性与可变性三大铁律,可避免口径混乱、关联失败与性能崩塌;结合SQL优化、Pandas向量化与StarRocks Rollup等现代引擎实践,能将亿级数据的交互响应稳定控制在百毫秒级。本文聚焦零售、SaaS、电商等真实场景,详解从原始日志探查、维度标准化、事实表聚合到自助看板落地的全链路方法

dianchamian8747的博客 534

StarRocks与ClickHouse:简要快速选型对比

StarRocks是一款全场景MPP企业级数据库,它强调实时性、并发性和MySQL兼容性。StarRocks提供在线弹性扩缩容能力,支持复杂数据建模和动态维度处理,特别适合于高性能、实时数据的处理和分析。

全世界的博客 2964

【StarRocks系列】join查询优化

表设计阶段,对于需要高频 Join 且数据量大的表,优先考虑使用相同的分区分桶策略。这是性能最高的 Join 方式。当无法 Colocate 时,确保事实表(左表)按 Join Key 分桶,并让 Join Key 包含分桶列。仅对小表使用 Broadcast Join。通过控制优化器选择 Broadcast 的阈值。这是加速大表 Join 的利器。通常保持默认开启即可,效果显著。定期是 CBO 发挥效力的基础。根据业务语义和数据特点选择INNER JOINSEMI JOINANTI JOIN等。

技术改变世界 1160

StarRocks 技术内幕 | Join 查询优化

本文整理自作者在 StarRocks 线下 MeetUp 的分享,主要介绍 StarRocks 在 Join 查询规划上的经验和探索。文章主要分为四个部分:Join 背景,Join 逻辑优化,Join Reorder,分布式 Join 规划。

StarRocks的博客 3948

collocate join,bucket join,broadcast join,shuffle join对比分析

在实际应用中,根据数据规模、Join 类型和系统的性能需求,选择合适的 Join 策略非常关键。一般情况下,优先使用 Broadcast Join 进行小表与大表的 Join,如果数据已被分桶则选择 Bucket Join,Collocate Join 适用于提前计划好分区策略的场景,Shuffle Join 则作为通用方案用于无法优化的情况。

JustinMars的博客 723

StarRocks几种典型join的理解

StarRocks几种典型join的理解

weixin_42487706的博客 1474

SLAM算法的优缺点

SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)算法是一种通过传感器数据实时估计机器人自身位置和构建环境地图的技术。

selenia8860的博客 2906

机房电脑的“还原”秘密:如何应对重启即清零的困境

机房电脑重启后自动还原是常见的现象,这主要依靠硬件还原卡或软件还原系统(如冰点还原)实现。这类技术会定期将系统盘恢复初始状态,但通常不保护非系统盘。要高效使用公共电脑,建议:1)将个人文件存储在D/E盘;2)使用绿色便携软件;3)必要时可尝试通过热键临时关闭还原功能;4)养成云端备份习惯。掌握这些技巧既能遵守机房规定,又能保证学习资料安全,培养良好的数字资产管理能力。

一位主要以学校学生信息技术,社会工作生活讲解科普拓展的博主 1449

StarRocks-join优化

有两个大表,都是6kw级别上下的,通过SR然后包装了一个接口对外提供查询,当前的问题是,这样大的join查询会导致BE直接宕机。这个表是个单分区,所以直接查全表没啥问题。最后其实是要输出的是limit 10。我这里是模拟两个表之间的join操作,看下profile。扫描的数据大大减少,还是很牛的,欢迎交流。那么这个limit 10能否下推呢?2. profile日志。看profile就更炸裂了。查询不到一秒出结果。查询不到一秒出结果。

weixin_36630761的博客 600

从MySQL到数据仓库:手把手教你用Airflow实现自动化ETL流水线

本文详细介绍了如何利用Airflow构建从MySQL到数据仓库的自动化ETL流水线,涵盖增量抽取策略、PySpark转换优化和数据质量监控等实战细节。特别适合中小规模企业构建高效数据仓库,提升数据处理效率和质量。

rnn9storyteller的博客 827

StarRocks实时更新模型:主键Upsert/Delete操作高效实现

StarRocks实时更新模型:主键Upsert/Delete操作高效实现 【免费下载链接】starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 ...

gitblog_00584的博客 1231

ADS 使用教程(一)Workspace, Library and Cell

简要介绍ADS的基本内容

Dirge19的博客 6610

初识Classic AUTOSAR开发工具链

在过去,软件和硬件之间具有很强的耦合性,阻碍了软件组件在不同硬件平台上的可移植性和重用性。而AUTOSAR作为汽车电子行业的标准,提供标准的软件接口定义,工程师可以根据需求将软件组件分配到汽车的ECU中,实现标准软件组件的可重用性。

怿星科技的博客 8093

Colocate Join :ClickHouse的一种高性能分布式join查询模型

本文将介绍业界MPP分布式数据库join查询模型,以及ClickHouse的分布式查询原理解析和Colocate join性能表现。

华为云官方博客 3222

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

10分钟带你全面了解StarRocks

StarRocks 是一款极速全场景 MPP 企业级数据库产品,具备水平在线扩缩容,金融级高可用,兼容 MySQL 5.7 协议和 MySQL 生态,提供全面向量化引擎与多种数据源联邦查询等重要特性。StarRocks 致力于在全场景 OLAP 业务上为用户提供统一的解决方案,适用于对性能,实时性,并发能力和灵活性有较高要求的各类应用场景。

hellozhxy的博客 1万+

全面解析量化价值投资多因子模型的原理

明明知道“买便宜的好公司”是价值投资的核心,但面对3000+只A股,如何快速筛选出“便宜又好”的标的?主观判断总被情绪干扰——明明PE很低的股票,买了却不涨;或者因为“感觉”错过牛股?想规模化投资,但手动分析100只股票就要花一周,根本无法覆盖全市场?量化价值投资的多因子模型,正是解决这些问题的钥匙。它将价值投资的核心逻辑(“便宜”“好公司”)转化为可量化的因子,用数学模型替代主观判断,实现系统化筛选、可回测验证、规模化复制的投资决策。为什么多因子模型能有效预测股票收益?

AI天才研究院 1058

UNet改进(12):融合小波变换与注意力机制的图像分割新方法

本文提出了一种改进的WaveletAttentionUNet架构,通过结合小波变换和注意力机制来增强传统UNet的多尺度特征提取能力。该网络使用分组卷积模拟小波分解,将输入通道扩展为4个子带(LL、LH、HL、HH),并通过通道注意力机制自适应加权各子带特征。网络保留了UNet的编码器-解码器结构,在关键位置集成了WaveletAttention模块。实验证明该方法在医学图像分割等任务中能更好地保持边缘细节和复杂纹理特征,同时保持计算效率。

2501_91516851的博客 758

StarRocks(二)表设计

1、表设计 1.1、列式存储 StarRocks的表和关系型数据相同, 由行和列构成. 每行数据对应用户一条记录, 每列数据有相同数据类型. 所有数据行的列数相同, 可以动态增删列. StarRocks中, 一张表的列可以分为维度列(也成为key列)和指标列(value列), 维度列用于分组和排序, 指标列可通过聚合函数SUM, COUNT, MIN, MAX, REPLACE, HLL_UNION, BITMAP_UNION等累加起来. 因此, StarRocks的表也可以认为是...

Yuan_CSDF的博客 3743

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(下)

本篇重点讲述导入数据到StarRocks几种方式,也通过一个flink-connector-starrocks的简单示例代码了解其导入过程,进而学习数组类型的使用、分布式实现本地Join的使用,最后抛出外部表的使用大门

itxiaoshen博客 1424

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

StarRocks Join Reorder 源码解析

多表 Join 是现实业务场景中很常见的需求,其执行效率和 Join 的执行顺序息息相关,比如两表 t1 Join t2 就有t1⨝t2和t2⨝t1两种方式(Join 满足交换律),三表 t1 Join t2 Join t3 由于 Join 满足结合律,可以 t1 和 t2 先做Join,再和 t3 Join,即(t1⨝t2) ⨝t3, 也可以先做 t2 和 t3 的 Join,再和 t1 做 Join,即t1⨝ (t2⨝t3)。​。

StarRocks的博客 1303

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用StarRocks内置工具Routine Load同步Mysql/TiDB/PG等增量更新数据到StarRocks

什么是StarRocks? StarRocks是新一代极速统一的olap新型mpp分析型数据库,全面向量化引擎,全新的CBO优化器,性能强悍,单表查询媲美业界最强悍的clickhouse,支持多表join,支持数据秒级更新; 且同时支持高并发,架构简单,方便运维扩展,完全国产,安全可控,在国内外各行各业已经得到了广泛使用。 StarRocks提供了丰富的数据接入方式:stream load,routine load,broker load,spark load等,对接比如本地文件,对象存储,hdfs,

gongxiucheng的专栏 6256
上一篇: MySQL七种日志介绍
下一篇: 数据湖(一):数据湖概念
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值