ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

StarRocks 2.4 版本全解析:异步物化视图、INSERT OVERWRITE 与数据湖分析能力跃迁

2026/9/17 8:05:07 拓冰建站 浏览量
StarRocks 2.4 版本全解析:异步物化视图、INSERT OVERWRITE 与数据湖分析能力跃迁 StarRocks 2.4 版本全解析异步物化视图、INSERT OVERWRITE 与数据湖分析能力跃迁【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocksStarRocks 2.4 是该开源查询引擎在数据湖分析 实时数仓双线能力上的一次重要版本跃迁它带来了基于多基表的异步物化视图、INSERT OVERWRITE 覆盖写入、可水平扩展的无状态 Compute NodeCN、Iceberg/Hudi Catalog以及非等值 JOIN 等核心能力。本文以官方 Release Notes 为主线结合当前仓库GitHub_Trending/st/starrocks中的 FE/BE 源码实现逐版本拆解 2.4.0 至 2.4.5 的功能演进、性能优化、行为变更与关键 Bug 修复帮助读者理解该版本的技术全貌、升级影响与源码对应关系。版本总览2.4 系列的关键定位StarRocks 2.4 主版本2.4.0发布于 2022 年 10 月 20 日随后在 2023 年上半年通过 2.4.1 ~ 2.4.5 五个补丁版本持续修复稳定性问题并补充改进。该版本的核心主题可概括为查询加速基于多基表的异步物化视图为 JOIN 类查询提供透明改写加速写入能力INSERT OVERWRITE 覆盖写入、Stream Load 两阶段提交2PC事务接口弹性架构无状态 Compute NodeCN预览版支持 Kubernetes 水平伸缩数据湖连通Iceberg Catalog、Hudi Catalog、Hive 外部表能力增强Parquet 延迟物化、小 I/O 合并、CSV ARRAY 列等默认行为切换Page Cache 默认开启、CBO 与向量化引擎默认启用标志 2.4 成为新一代执行与优化架构的默认基线。2.4.0 新特性详解附源码佐证1. 基于多基表的异步物化视图2.4.0 支持基于多张基表创建异步物化视图用于加速带 JOIN 的查询。异步物化视图支持所有表类型用户可以通过异步刷新机制预先物化 JOIN 结果查询时由优化器自动改写命中。从源码结构看异步物化视图在 FE 侧已经形成了完整的任务调度与执行闭环fe/fe-core/src/main/java/com/starrocks/scheduler/MVTaskRunProcessor.java负责物化视图刷新任务的执行处理TaskManager.java负责任务调度管理fe/fe-core/src/main/java/com/starrocks/alter/MaterializedViewHandler.java则承载物化视图的创建与维护逻辑。仓库中fe/fe-core/src/main/java/com/starrocks/listener/LoadJobMVListener.java表明物化视图刷新与导入任务Load Job之间存在监听联动机制。在 2.4.5 中异步物化视图进一步扩展了对 BITMAP、HLL、PERCENTILE 三种类型的支持PR #15731使得物化视图可以承载更丰富的预聚合语义。2. INSERT OVERWRITE 覆盖写入INSERT OVERWRITE 允许以覆盖语义向表写入数据是数据仓库 ETL 场景中全量重刷的常用手段。该功能在 FE 侧由一套独立的状态机管理实现源码包括fe/fe-core/src/main/java/com/starrocks/load/InsertOverwriteJob.java覆盖写入任务的作业描述fe/fe-core/src/main/java/com/starrocks/load/InsertOverwriteJobMgr.java作业管理器fe/fe-core/src/main/java/com/starrocks/load/InsertOverwriteJobRunner.java作业执行器fe/fe-core/src/main/java/com/starrocks/load/InsertOverwriteJobState.java作业状态机定义fe/fe-core/src/main/java/com/starrocks/persist/CreateInsertOverwriteJobLog.java与InsertOverwriteStateChangeInfo.java作业元数据与状态变更的持久化日志保证 FE 故障恢复后作业状态可重建。这也解释了 2.4.5 Bug 修复中FE 重放InsertOverwriteJob状态变更日志时启动失败issue #19061——该功能从一开始就设计了严格的 WAL 持久化与重放机制其正确性直接关系到 FE 重启后的元数据一致性。3. [Preview] 无状态 Compute NodeCN与 Kubernetes 弹性伸缩2.4.0 以预览Preview形式提供无状态计算节点 Compute NodeCN可借助 StarRocks Operator 部署到 Kubernetes 集群中实现自动水平扩缩容。CN 与 BE 的职责分离使得计算资源可以独立于存储弹性伸缩。在 FE 源码中节点管理已经将 CN 作为独立实体处理fe/fe-core/src/main/java/com/starrocks/common/proc/ComputeNodeProcDir.java提供了 CN 节点的 Proc 目录视图fe/fe-core/src/main/java/com/starrocks/common/proc/HistoricalNodeProcNode.java管理历史节点信息FE 侧fe/fe-core/src/main/java/com/starrocks/system/SystemInfoService.java统一维护集群节点信息支持对计算节点进行注册与状态跟踪。4. 非等值 JOIN 全面支持2.4.0 起Outer Join 支持非等值连接条件即 JOIN 条件可以使用、、、、等比较运算符连接两侧表达式2.4.1 进一步补充了 LEFT SEMI JOIN 与 ANTI JOIN 的非等值支持并优化了 JOIN 函数实现PR #13019。5. Iceberg Catalog 与 Hudi Catalog2.4.0 支持创建 Iceberg Catalog 和 Hudi Catalog从而可以直接查询Apache Iceberg 与 Apache Hudi 表数据而无需预先建立外部表。这是 StarRocks 数据湖分析能力的标志性扩展。对应源码在 FE 连接器层已经形成独立模块Icebergfe/fe-core/src/main/java/com/starrocks/connector/iceberg/目录下的IcebergCatalog.java、IcebergCatalogProperties.java、IcebergCatalogType.java、IcebergConnector.java等分别负责 Catalog 元数据访问、连接参数解析、Catalog 类型识别如 Hive Metastore / REST 等与连接器生命周期管理Hudife/fe-core/src/main/java/com/starrocks/connector/hudi/目录下的HudiConnector.java、HudiMetadata.java、HudiMetadataFactory.java、HudiRemoteFileIO.java等负责 Hudi 元数据读取与远程文件 IO。6. Hive 外部表 CSV ARRAY 列与数据湖查询增强2.4.0 支持从 Apache Hive 表的 CSV 格式数据中直接查询 ARRAY 类型列同时支持通过 DESC 语句查看外部数据的 Schema便于在查询前确认列结构。数据湖查询性能同步增强Parquet 延迟物化Late Materialization针对小过滤集场景先读取过滤列再按需物化其它列减少 IO小 I/O 合并合并零散小 I/O 以降低数据湖查询延迟支持查询 Hive 中的压缩 TXT 文件。需要说明的是2.4.1 修复了延迟物化导致数据湖查询结果错误的问题PR #13133提示该特性对过滤条件下推的边界处理经历了持续打磨。7. 安全角色授权与 IMPERSONATE2.4.0 支持通过 GRANT 将特定角色role或 IMPERSONATE 权限授予用户通过 REVOKE 回收并支持以 EXECUTE AS 语句在 IMPERSONATE 权限下执行 SQL。FE 侧fe/fe-core/src/main/java/com/starrocks/qe/ExecuteAsExecutor.java即该语句的执行入口。8. FQDN 访问支持2.4.0 支持以域名或主机名 端口的组合作为 BE / FE 节点的唯一标识FQDN避免因 IP 变更导致的访问失败。FE 侧fe/fe-core/src/main/java/com/starrocks/server/NodeMgr.java、fe/fe-core/src/main/java/com/starrocks/system/SystemInfoService.java与fe/fe-core/src/main/java/com/starrocks/service/FrontendOptions.java共同承载了节点身份与前端地址的解析逻辑。9. flink-connector-starrocks 支持主键表 Partial Updateflink-connector-starrocks 支持对 Primary Key 表执行部分列更新Partial Update配合 2.4.0 新增的 Stream Load 事务接口实现两阶段提交2PC大幅提升高并发流式导入的性能与一致性。10. 新函数array_contains_all 与 percentile_contarray_contains_all判断一个数组是否为另一个数组的子集。BE 侧实现在be/src/exprs/array_functions.cpp、array_functions.h与array_functions.tpp中与既有的数组函数族如array_contains共用模板实现percentile_cont以线性插值方式计算百分位值属于聚合函数。BE 侧实现位于be/src/exprs/agg/percentile_cont.h并通过be/src/exprs/agg/factory/aggregate_factory.hpp与aggregate_resolver_others.cpp注册到聚合函数工厂中be/src/exprs/percentile_functions.cpp提供相关函数入口。2.4.0 核心改进存储与表模型Primary Key 表支持将 VARCHAR 类型主键索引刷写到磁盘。从 2.4.0 起无论是否开启持久化主键索引主键索引支持的数据类型保持一致通过移除 final_merge 操作Primary Key 表大批量导入性能提升最高达 2 倍表桶数设置更简单tablet 扫描启用自适应多线程降低扫描性能对 tablet 数量的依赖从而降低分桶数选择的门槛。查询与优化器CBO 统计信息新增直方图Histogram全量统计信息采集进一步优化窗口函数性能优化min()/max()窗口函数支持滑动窗口Cross Join 支持谓词下推window_funnel函数性能优化一个语句中可使用多个COUNT(DISTINCT)。内存与 IO调整默认 PageCache 大小计算与内存一致性检查机制避免多实例部署场景下的 OOM支持 Stream Load 事务接口实现 2PC服务于 Flink、Kafka 等外部系统的高并发流式导入。2.4.0 行为变更升级影响面升级到 2.4.0 后以下默认行为发生变化需要运维侧关注变更项变更前变更后Page Cache默认关闭默认开启disable_storage_page_cache默认false默认缓存大小storage_page_cache_limit为系统内存的 20%CBO需显式开启默认开启废弃会话变量enable_cbo向量化引擎需显式开启默认开启废弃会话变量vectorized_engine_enableDECIMAL 类型显示DESC 返回的精度/标度与建表语句不一致修复为与 CREATE TABLE 定义一致PR #73092.4.0 Bug 修复要点FE 稳定性修复多项影响 FE 稳定性的元数据管理问题PR #6685、#9445、#7974、#7455以及 Leader/Follower FE 元数据不一致问题PR #11215导入修复 Broker Load 指定 ARRAY 列失败#9158、非 Duplicate Key 表 Broker Load 后副本不一致#8714、ALTER ROUTINE LOAD 触发 NPE#7804数据湖修复 Hive 外部表 Parquet 查询失败#7413、#7482、#7624、Elasticsearch 外部表 limit 查询结果错误#9226、Iceberg 复杂数据类型查询报错#11298BE修复 BITMAP 数据超过 2GB 时 BE 崩溃#11178。2.4.1 版本要点2022-11-14新特性LEFT SEMI JOIN 与 ANTI JOIN 支持非等值连接JOIN 功能整体优化PR #13019。改进HeartbeatResponse新增aliveStatus属性用于标识节点在集群中是否存活并优化了存活判断机制PR #12713优化 Routine Load 错误提示PR #12155。关键修复从 v2.4.0RC 升级到 v2.4.0 后 BE 崩溃#13128延迟物化导致数据湖查询结果错误#13133get_json_int函数抛异常#12997Primary Key 表持久化索引删除数据后数据不一致#12719Primary Key 表 compaction 期间 BE 崩溃#12914json_object输入含空字符串时结果错误#13030RuntimeFilter 导致 BE 崩溃#12807CBO 递归计算过度导致 FE 卡死#12788BE 优雅退出时崩溃或报错#12852新增列后删除数据再 compaction 崩溃#12907OLAP 外部表元数据同步机制导致数据不一致#12368单 BE 崩溃后其余 BE 查询持续到超时#12954。行为变更Hive 外部表解析失败时抛错而非将相关列转成 NULLPR #12382——更早暴露数据质量问题。2.4.2 版本要点2022-12-14改进桶数众多场景下优化 Bucket Hint 性能PR #13142。关键修复刷写 Primary Key 索引导致 BE 崩溃#14857、#14819SHOW FULL TABLES无法正确识别物化视图类型#13954v2.2 升级到 v2.4 导致 BE 崩溃#13795Broker Load 导致 BE 崩溃#13973会话变量statistic_collect_parallel不生效#14352INSERT INTO 导致 BE 崩溃#14818JAVA UDF 导致 BE 崩溃#13947部分更新期间克隆副本导致 BE 崩溃且无法重启#13683Colocated Join 不生效#13561。行为变更会话变量query_timeout被约束上下限为[1, 259200]废弃 FE 参数default_storage_medium表存储介质改为系统自动推断PR #14394。2.4.3 版本要点2023-01-19改进Analyze 前检查对应数据库与表是否存在防止 NPEPR #14467外部表查询时不支持的数据类型列不再物化PR #13305start_fe.sh启动脚本增加 Java 版本检查PR #14333。关键修复Stream Load 未设置超时可能失败#16241内存占用高时 bRPC Send 崩溃#16046从早期版本 StarRocks 实例向外部表导数据失败#16130物化视图刷新失败导致内存泄漏#16041Schema Change 卡在 Publish 阶段#14148物化视图 QeProcessorImpl 问题导致内存泄漏#15699limit查询结果不一致#13574INSERT 导致内存泄漏#14718Primary Key 表执行 Tablet Migration#13720Broker Load 期间 Broker Kerberos 票据超时#16149表视图中nullable信息推断错误#15744。行为变更Thrift Listen 默认 backlog 修改为1024PR #13911新增 SQL 模式FORBID_INVALID_DATES默认关闭启用后对 DATE 类型输入进行校验非法日期直接报错PR #14143。2.4.4 版本要点2023-02-22改进支持导入快速取消PR #15514、#15398、#15969优化 compaction 框架的 CPU 占用PR #11747支持对缺失版本missing versions的 tablet 执行 cumulative compactionPR #17030。关键修复指定非法 DATE 值时创建过多动态分区#17966默认 HTTPS 端口无法连接 Elasticsearch 外部表#13726事务超时后 BE 未能取消 Stream Load#15738单 BE 本地 shuffle 聚合查询结果错误#17845wait_for_version version: failed: apply stopped 错误导致查询失败#17848、#17850OLAP scan bucket 表达式未正确清理导致结果错误#17666Colocate Group 中动态分区表桶数无法修改且报错#17418非 Leader FE 执行USE catalog_name.database_name时转发丢失 catalog 前缀导致 Leader 误用 default_catalog 而找不到库#17302dictmapping 改写前检查逻辑错误#17405心跳连接偶发超时导致 FE 误判 BE 不可用、事务失败#16386Follower FE 上新克隆 tablet 的get_applied_rowsets失败#17192Follower FE 执行SET variable default触发 NPE#17549投影中的表达式未被字典改写#17558周级动态分区创建逻辑错误#17163本地 shuffle 查询结果错误#17130增量克隆可能失败#16930CBO 在特定场景使用错误逻辑比较算子等价性#17199、#17227JuiceFS schema 未正确检查与解析导致访问失败#16940。2.4.5 版本要点2023-04-21改进禁止 List Partition 语法避免元数据升级出错PR #15401物化视图支持 BITMAP、HLL、PERCENTILE 类型PR #15731优化storage_medium推断BE 同时使用 SSD 与 HDD 时若指定storage_cooldown_time属性则设为 SSD否则设为 HDDPR #18649优化线程转储thread dump准确性PR #16748导入前触发元数据 compaction提升导入效率PR #19347优化 Stream Load planner 超时PR #18992禁止对 Unique Key 表 value 列采集统计信息提升表性能PR #19563。关键修复CREATE TABLE 使用不支持的数据类型返回 NPEissue #20999Broadcast Join 与 short-circuit 组合查询结果错误#20952错误的数据截断逻辑导致磁盘占用问题#20590AuditLoader 插件既无法安装也无法删除#20468tablet 调度抛异常时同批次其它 tablet 永远无法被调度#20681同步物化视图创建中使用不支持的 SQL 函数时返回 Unknown Error#20348多个 COUNT DISTINCT 计算被错误改写#19714compaction 中的 tablet 查询结果错误#20084聚合查询结果错误#19725NULL Parquet 数据导入 NOT NULL 列时无错误提示#19885资源组并发限制持续达到上限时查询并发指标下降缓慢#19363FE 重放InsertOverwriteJob状态变更日志时启动失败#19061Primary Key 表死锁#18488Colocation 表副本被手动置为bad且 BE 数 ≤ 副本数时损坏副本无法修复#17876ARRAY 相关函数问题#18556。升级与运维建议基于 2.4 系列变更结合上文行为变更与补丁修复从 2.2/2.3 升级到 2.4 系列时建议关注默认参数面变更Page Cache 默认开启、CBO 与向量化引擎默认启用升级后应重新评估内存预算Page Cache 默认取系统内存 20%可经storage_page_cache_limit调整与查询计划形态观察资源占用与执行计划差异废弃参数清理default_storage_medium、enable_cbo、vectorized_engine_enable已被废弃依赖这些参数配置的脚本需移除语法约束2.4.5 起禁止 List Partition 语法历史使用该语法的建表/迁移脚本需改写日期校验FORBID_INVALID_DATESSQL 模式默认关闭如需严格校验可在会话或全局显式开启补丁升级顺序2.4.1 修复了 2.4.0RC→2.4.0 的 BE 崩溃问题2.4.2 修复了 v2.2→v2.4 的 BE 崩溃问题建议跨大版本升级时规划合理的补丁基线并做好元数据备份新功能引入路径无状态 CN 在 2.4 仍为 Preview 特性生产大规模依赖弹性伸缩建议结合官方后续版本的成熟度评估。结语从 2.4.0 到 2.4.5StarRocks 2.4 系列以异步物化视图 INSERT OVERWRITE 无状态 CN 数据湖 Catalog四个支点完成了 OLAP 能力的一次系统性升级并通过六个版本的迭代将稳定性收敛到生产可用水平。仓库源码中fe/fe-core/src/main/java/com/starrocks/load/InsertOverwriteJob*.java、fe/fe-core/src/main/java/com/starrocks/connector/iceberg/与fe/fe-core/src/main/java/com/starrocks/connector/hudi/、be/src/exprs/agg/percentile_cont.h等实现为理解这些发布说明背后的工程细节提供了第一手入口对 2.4 行为变更的充分评估则是安全升级该版本的前提。【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考