Hologres 4.1 新特性:基于 Stage 的离线导入,平衡吞吐与资源成本的最优解

简介: Hologres 4.1 推出基于 Stage 的离线导入新特性:数据先高速写入内部临时存储(Arrow格式),再批量合并落表。相比 Bulkload,吞吐提升24%–61%,CPU负载降低32%–62%,Serverless 成本节省46%,兼顾高吞吐与低资源开销,适用于近实时报表、海量日志分析等场景。

Hologres 4.1 新特性:基于 Stage 的离线导入,平衡吞吐与资源成本的最优解

在数仓构建过程中,数据开发人员常常面临一个问题:极高的吞吐以及可控的资源成本

对于Hologres 已有的 离线写入方式,Bulkload 离线批量导入,因其高吞吐特性,通常被用于 T+1 离线数仓的构建中,但该方式目前主要存在以下问题

  1. 离线写入需要锁表,因此对于spark任务等多并发写入时,需要提前按照distribution key进行reshuffle,之后每个task负责写一部分shard的数据,以此将锁粒度从表级别降低到shard级别。然而reshuffle操作会带来额外的资源开销和任务延迟。
  2. 离线写入中间存在额外的格式转换,增加了cpu开销。
  3. 离线写入吞吐很大程度上受限于数据写入的速度,尤其是使用serverless资源时无法充分利用资源,性价比不高。

为了解决上述问题,Hologres V4.1 给出的答案是:基于临时存储 Stage 的离线导入(Batch Import via Stage)。

什么是 Stage 离线导入?

Stage 是 Hologres 内部托管的高性能临时存储区域。在 V4.1 版本中,Hologres 引入了一种新的写入路径:数据先快速写入内部的 Stage 临时存储,随后由系统自动或手动以优化的批次方式合并提交到主存储(Table)。

这种机制的核心在于攒批。它允许外部数据源(如 Spark、Flink、Holo Client)以极高的吞吐将数据写入临时的 Arrow 格式文件,避免锁表以及格式转换开销,最后一次性高效落表。

核心优势

  1. 平衡资源消耗与吞吐:省去无谓的格式转换,相比传统离线导入显著降低 CPU 消耗。同时吞吐能力显著提升,能够轻松应对流量洪峰。
  2. 简化数据链路:无需依赖外部的 OSS 或 HDFS 作为中转,Stage 完全由 Hologres 内部管理,通过标准 SQL COPYINSERT 即可操作。
  3. 性价比提升:利用 Serverless Computing,使计费时间显著降低,大幅减少成本。
  4. 广泛的生态支持:原生支持 Spark Connector 以及 Holo Client,无缝集成现有大数据开发流程。

架构原理与工作流程

Stage 离线导入的工作流可以概括为三个阶段:

  1. 写入 Stage:客户端将数据以 Arrow 格式写入 Hologres 内部的临时 Stage 存储。此过程不涉及主表的更新,因此速度极快。
  2. 暂存与积累:数据在 Stage 中以文件形式存在,支持按时间窗口或文件大小进行积累。
  3. 合并提交:通过 SQL 命令将 Stage 中的数据一次性 INSERT 到目标内表。此时系统会进行高效的批量加载,完成数据的最终可见。

在 Serverless场景下,仅INSERT INTO 内表 SELECT FROM STAGE阶段计费,通过客户端写入stage的过程开销极小,并不产生计费。相较于 Bulkload直接从客户端写入holo内表的方式,缩短了serverless资源的工作时间,降低了导入成本。

性能实测:STAGE vs BULKLOAD 深度对比

为了验证 Stage 离线导入的实际效果,我们在标准测试环境下进行了严格的对比测试。测试基于 7.5 亿行(116GB CSV)的 TPCH customer 表数据。

1. 核心测试数据

场景一:使用本实例资源

指标

STAGE 模式

BULKLOAD 模式

优化效果

作业总耗时

393.94s

485.97s

⬇️ 缩短 19%

平均 RPS

1,900 k/s

1,540 k/s

⬆️ 提升 24%

平均吞吐

302 MB/s

244 MB/s

⬆️ 提升 24%

实例 CPU 峰值

6,500%

9,500%

⬇️ 降低 32%

场景二:Serverless 场景(极致弹性)

当结合 Serverless Computing 使用时,Stage 模式的优势进一步放大:

指标

STAGE + Serverless

BULKLOAD + Serverless

优化效果

作业总耗时

247.34s (600 Core)

396.88s (600 Core)

⬇️ 缩短 38%

平均吞吐

480 MB/s

299 MB/s

⬆️ 提升 61%

本实例 CPU 占用

890%

2,300%

⬇️ 降低 62%

计算成本

6.73 元

12.40 元

💰 节省 46%

注:Serverless 计价策略为 0.3542 元/CU小时。*

2. 测试结论

  1. 性能与负载的双重优化:Stage 方案在将实例总 CPU 负载降低 32% 的前提下,写入 RPS 提升了 24%
  2. Serverless 场景下的成本杀手:同等资源下,吞吐量提升 61%,成本直接降低 46%
  3. 彻底的资源解耦:Stage 模式下,Hologres 本实例仅需提供少量的 FE 资源,CPU 使用率较 Bulkload 降低了 62%,天然适合高并发写入场景。

适用场景推荐

  • 近实时报表:需要分钟级更新的大屏监控、运营报表。
  • 海量日志分析:服务器日志、应用埋点数据,数据量大但对单条实时性要求不高。
  • 低成本数仓分层:作为 ODS 层到 DWD 层的缓冲,先快速接入数据,再进行清洗转换。
  • 突发流量写入:应对周期性的高峰数据写入,避免实例过载。
  • Serverless 架构:希望大幅降低实例负载并节省计算成本的场景。

快速上手:如何使用 Stage

1. 前置准备:权限配置

在使用 Stage 前,请确保当前用户具备相应权限。

  • SPM/SLPM 模型:创建者需具备 writer 及以上权限。
  • 专家权限模型:需授予用户 pg_operate_internal_stages 角色。
-- 授予指定用户 Stage 操作权限(专家权限模型)
GRANT pg_operate_internal_stages TO "<user_name>";

2. 创建 Stage

在使用前,需要先创建一个内部 Stage。你可以指定其生命周期(TTL),超时后系统会自动清理。

-- 创建一个名为 'my_stage' 的临时存储
-- 参数说明:Stage名称, 分组名(可选), 生命周期秒数(默认7200s, 最大10天)
CALL HOLOGRES.HG_CREATE_INTERNAL_STAGE(
  'my_stage', 
  'default_group',
  7200
);

3. 写入数据

Stage 仅支持 Arrow 格式数据写入。

方式一:使用 Spark-Connector - 推荐

数据在Hadoop或者EMR集群时,使用Spark-Connector可以方便的进行批量数据的导入。

Connector会在运行中自动创建stage并在作业结束时清理。

csvDf.write
.format("hologres")
.option("username", "***")
.option("password", "***")
.option("jdbcurl", "jdbc:postgresql://host:port/db")
.option("table", "customer_holo_table")
.option("write.mode", "stage")
.option("enable_serverless_computing", "true")
.mode(SaveMode.Append)
.save()

方式二:使用 Holo Client (Java) - 推荐

对于 Java 应用,Holo Client 提供了便捷的 API 支持,自动处理 Arrow 序列化。

// 初始化配置
HoloConfig config = new HoloConfig();
config.setJdbcUrl("jdbc:hologres://host:port/db");
config.setUsername("user");
config.setPassword("password");
String stageName = "my_stage";
String fileName = "data_batch";
// 使用 RecordArrowWriter 和 CopyInStageWrapper 进行写入
try (RecordArrowWriter arrowWriter = new RecordArrowWriter(schema, columns, 8192);
     CopyInStageWrapper<Record> copyInStage = 
         new CopyInStageWrapper<>(config, stageName, fileName, arrowWriter, 64 * 1024 * 1024)) {
    
    // 构造数据
    Put put = new Put(schema);
    put.setObject("id", 1);
    put.setObject("name", "Alice");
    
    // 写入 Stage
    copyInStage.putRecord(put.getRecord());
}
// 写入Stage完成之后,发起INSERT语句
String insertSql =
                    CopyUtil.buildInsertTableSelectFromStageSql(
                            schema,
                            columns,
                            Collections.singletonList(stageName),
                            OnConflictAction.INSERT_OR_UPDATE);
try (java.sql.Statement stmt = conn.createStatement()) {
    stmt.execute(insertSql);
}
// 数据已经落表,清理Stage
String dropStageSql = "call hologres.hg_drop_internal_stage('" + stageName + "');";
try (java.sql.Statement stmt = conn.createStatement()) {
  stmt.execute(dropStageSql);
}

方式三:使用 SQL COPY 命令

对于其他支持 COPY 协议的客户端,可以直接写入:

COPY EXTERNAL_FILES(
  path = 'internal_stage://my_stage/data_batch_01'
) FROM STDIN;
INSERT INTO target_table 
SELECT * 
FROM EXTERNAL_FILES(
  path = 'internal_stage://my_stage'
);

4. 管理与监控

您可以随时查看 Stage 的状态和文件列表:

-- 查询 Stage 状态(大小、文件数、创建时间等)
SELECT * FROM hologres.hg_internal_stages WHERE stage_name = 'my_stage';
-- 查询 Stage 下的具体文件
SELECT * FROM hologres.hg_internal_stage_files WHERE stage_name = 'my_stage';
-- 手动删除 Stage (也可等待 TTL 自动清理)
CALL HOLOGRES.HG_DROP_INTERNAL_STAGE('my_stage');

总结

Hologres 4.1 推出的基于Stage 离线导入功能,弥补了之前离线导入方案的缺点。实测数据显示,它在提升 24%-61% 吞吐性能的同时,能降低 32%-62% 的实例负载,并在 Serverless 场景下节省 46% 的成本。

如果您的业务不再执着于“毫秒级”,而是追求“更高性价比的分钟级”,那么 Stage 离线导入将是您的最佳选择。


更多关于 Hologres Stage 的详细参数配置和权限管理,请参考 阿里云官方文档

想深入交流 Hologres 的技术细节或落地场景?

欢迎加入 Hologres 技术交流群,与产品、架构、解决方案专家直接对话!

(扫码入群 👇)

立即免费试用 Hologres

无需预付费用,按实际查询量付费,新用户还可享免费额度!

(新用户扫码领取 👇)

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
相关文章
|
20天前
|
SQL 人工智能 自然语言处理
一条 SQL 生成广告:Hologres 如何实现素材生成到投放分析一体化
广告投放面临“量、准、快”不可兼得的不可能三角:素材产能不足、数据与创意割裂、测试周期远超素材生命周期。阿里云Hologres以“Data + AI = All in One”理念,通过Object Table、AI Function、Dynamic Table等能力,实现素材采集、智能打标、AI生成、投放分析全链路闭环,用SQL驱动一体化智能创意工厂。
|
4月前
|
存储 SQL 运维
Hologres Dynamic Table:高效增量刷新,构建实时统一数仓的核心利器
在实时数据架构中,Hologres Dynamic Table 基于有状态增量计算模型,有效解决“海量历史+少量新增”场景下的数据刷新难题。相比传统全量刷新,其通过持久化中间状态,实现复杂查询下的高效增量更新,显著降低延迟与资源消耗,提升实时数仓性能与运维效率。
|
4月前
|
SQL 存储 分布式计算
Hologres Dynamic Table在淘天价格力的业务实践
淘天价格力团队依托Hologres Dynamic Table,实现亿级商品数据的高效治理。通过增量刷新与全量刷新机制,支持秒级圈选、分钟级报表更新,满足大促场景下高时效、多维度分析需求,显著提升数据灵活性与决策效率。
|
安全 关系型数据库 MySQL
Flink CDC中MySQL 进行cdc的用户需要什么权限?
Flink CDC中MySQL 进行cdc的用户需要什么权限?
1864 1
|
4月前
|
存储 人工智能 Serverless
AI时代最大的宝藏,也藏得最深:80%的企业知识沉睡在非结构化数据中
2026年AI进入应用爆发期,但非结构化数据成为瓶颈。Hologres推出AI原生新架构HSAP 2.0,融合语义搜索、多维分析与Serverless弹性,打造统一数据平面,让企业海量数据高效赋能AI,破解“数据熵”难题,支撑智能客服、销售助手等复杂场景,实现从“为人服务”到“为AI服务”的跨越。
|
20天前
|
SQL 人工智能 安全
Hologres CLI与Skills担当Agent-Ready 基础设施,共建数仓智能新生态
Hologres AI Plugins 是面向AI Agent时代的智能数据仓库插件,提供安全、结构化的CLI命令行与Agent Skills知识库,支持JSON输出、六层安全防护、敏感数据脱敏、Serverless隔离及自适应执行,让AI自主、可靠地操作Hologres。
|
4月前
|
存储 搜索推荐
漫画说:为什么你的“增量计算”越跑越慢? ——90%的实时数仓团队都踩过的坑,藏在这几格漫画里
面对海量数据,传统全量计算导致实时更新效率低下。阿里云 Hologres 通过有状态增量计算,仅处理变更数据并持久化中间状态,实现秒级刷新、降本增效,真正让“增量”摆脱重复扫描历史的困局。
|
3月前
|
人工智能 自然语言处理 数据挖掘
Hologres向量检索和全文检索在淘天客户运营的实践
淘天集团客户运营团队基于Hologres构建向量+全文一体化检索方案,融合语义理解与关键词匹配,毫秒级召回海量非结构化文本,已支撑智能客服、规则比对、舆情分析等核心场景,显著提升准确率与响应速度。
|
26天前
|
缓存 JSON 自然语言处理
【开源剪映小助手】字幕接口
字幕处理接口是CapCut Mate核心模块,基于FastAPI提供RESTful API,支持批量字幕添加、多语言处理、样式配置、关键词高亮、时间轴同步及75+入场/60+出场动画。采用分层架构与多级缓存,兼顾功能完整性与高性能。(239字)
|
27天前
|
机器学习/深度学习 数据采集 自然语言处理
大模型应用:低资源场景下的语言生成:N-Gram与大模型的协同之路.100
本文探讨N-Gram与大模型的融合方案:以N-Gram为兜底校验,弥补大模型在低资源语言、文本纠错、输入法预测等场景中易乱码、不流畅、逻辑断裂等缺陷;通过概率加权融合(如生成后校验或生成中约束),兼顾语义创造性与局部准确性,提升生成下限与鲁棒性。
152 5

热门文章

最新文章