FirstRow Merge Engine

本文介绍合并引擎(Merge Engine )中的FirstRow Merge Engine用法。

FirstRow Merge Engine说明

  • 合并策略

    对于每个主键,仅保留第一条记录 ,后续相同主键的记录将被忽略。

  • 配置方式

    在创建表时,通过设置表属性'table.merge-engine' = 'first_row'来启用。

  • 变更日志特性

    • 生成仅插入(insert-only)的变更日志。

    • 允许下游 Flink 作业将主键表视为仅追加(append-only)的日志表。

  • 适用场景

    • 适用于无需回撤或变更日志的下游操作,例如窗口聚合(Window Aggregation),间隔连接(Interval Join)等场景。

    • 在流式计算中,可用于日志去重 ,显著降低处理复杂性并提升效率。

  • 使用限制

    • 不支持UPDATEDELETE操作。

    • 不支持部分更新。

    • 变更日志中的UPDATE_BEFOREDELETE事件将被自动忽略。

使用示例

-- 创建表T,设置主键k,并启用FirstRow Merge Engine
CREATE TABLE T (
    k  INT,
    v1 DOUBLE,
    v2 STRING,
    PRIMARY KEY (k) NOT ENFORCED
) WITH (
    'table.merge-engine' = 'first_row'
);

-- 插入两条主键相同的记录 
INSERT INTO T VALUES (1, 2.0, 't1');
INSERT INTO T VALUES (1, 3.0, 't2');

-- 查询主键为 1 的记录,仅返回第一条记录
SELECT * FROM T WHERE k = 1;

 -- 输出结果
-- +---+-----+------+
-- | k | v1  | v2   |
-- +---+-----+------+
-- | 1 | 2.0 | t1   |
-- +---+-----+------+