Lakehouse 小文件合并优化指南(OPTIMIZE)

概述

在数据仓库中,频繁的小批量写入(如实时 CDC、流式导入)会导致表底层产生大量小文件,严重影响查询性能。云器 Lakehouse 提供

OPTIMIZE
OPTIMIZE
命令,自动将小文件合并为更大的文件,减少 I/O 开销并提升查询速度。本指南按业务场景分类,帮助你快速掌握小文件合并的方法。

涉及的 SQL 命令

命令用途适用场景
OPTIMIZE table_name
OPTIMIZE table_name
全表小文件合并定期维护,提升整体查询性能
OPTIMIZE table_name WHERE ...
OPTIMIZE table_name WHERE ...
分区级合并仅合并特定分区,节省资源
SET cz.sql.compaction.after.commit = true
SET cz.sql.compaction.after.commit = true
开启自动合并实时写入场景自动维护文件健康

前置准备

以下示例使用模拟的日志表

logs_optimize
logs_optimize

-- 创建测试表 CREATE TABLE IF NOT EXISTS logs_optimize ( log_id INT, message STRING, log_date DATE ); -- 模拟多次小批量写入(产生小文件) INSERT INTO logs_optimize VALUES (1, 'Log A', '2024-06-01'); INSERT INTO logs_optimize VALUES (2, 'Log B', '2024-06-01'); INSERT INTO logs_optimize VALUES (3, 'Log C', '2024-06-02');


全表小文件合并

使用

OPTIMIZE
OPTIMIZE
命令合并整表的小文件。

-- 执行全表优化 OPTIMIZE logs_optimize;

执行说明

  • 系统会扫描表的所有数据文件,将小于阈值的小文件合并为大文件。
  • 如果表本身文件数较少或已处于健康状态,可能返回
    No compaction job generated
    No compaction job generated
    ,表示无需合并。
  • 合并过程不影响正在进行的查询,新旧文件通过 MVCC 平滑切换。

分区级合并

如果表已按日期分区,可仅合并特定分区,避免全表扫描带来的资源消耗。

-- 仅合并 2024-06-01 分区(需表已按 log_date 分区) OPTIMIZE logs_optimize WHERE log_date = '2024-06-01';


查看合并效果

合并完成后,可通过

DESC HISTORY
DESC HISTORY
或文件统计查看优化效果。

-- 查看表历史(包含 OPTIMIZE 操作记录) DESC HISTORY logs_optimize;

返回信息

  • operation
    operation
    :操作类型(OPTIMIZE)
  • total_rows
    total_rows
    :总行数(不变)
  • total_bytes
    total_bytes
    :存储大小(通常因压缩而减小)

自动合并配置

对于实时写入场景,手动执行

OPTIMIZE
OPTIMIZE
可能不够及时。可开启自动合并功能。

-- 开启会话级自动合并 SET cz.sql.compaction.after.commit = true;

效果

  • 每次
    INSERT
    INSERT
    DELETE
    DELETE
    提交后,系统自动触发后台小文件合并。
  • 适合流式数据接入(如 Kafka Pipe、CDC 同步)场景。

清理测试数据

完成优化验证后,建议清理测试表:

-- 删除测试表 DROP TABLE IF EXISTS logs_optimize;


注意事项

  1. 执行时机:建议在业务低峰期执行
    OPTIMIZE
    OPTIMIZE
    ,避免与高优先级查询争抢计算资源。
  2. 频率控制:无需每天执行。通常每周或每月执行一次即可维持文件健康。
  3. 存储变化:合并后文件数量减少,但总数据量可能因压缩算法略有变化。
  4. 动态表:Dynamic Table 的刷新过程会自动处理底层文件,通常无需手动
    OPTIMIZE
    OPTIMIZE
  5. 资源消耗
    OPTIMIZE
    OPTIMIZE
    是计算密集型操作,会消耗 VCluster 的 CPU 和内存资源。

相关文档

联系我们
预约咨询
微信咨询
电话咨询