当前位置: 首页 > news >正文

Paimon主键表的合并机制

数据合并机制

在 Paimon 主键表中,若多条数据具有相同主键,系统会根据 WITH 参数中的 merge-engine 配置进行合并。以下是四种合并机制的详细说明和典型用例:


1. deduplicate(默认值)​
  • 逻辑​:仅保留相同主键的最新一条数据,其余丢弃。若最新数据为 DELETE 消息,则删除该主键所有记录。
  • 特点​:适用于精确去重场景,保证最终状态由最新操作决定。
  • 示例​:
    CREATE TABLE T (k INT PRIMARY KEY NOT ENFORCED,v1 DOUBLE,v2 STRING
    ) WITH ('merge-engine' = 'deduplicate'); -- 可省略(默认值)
    数据行为​:
    • 写入序列:+I(1, 1.0, 'A') → +U(1, 2.0, 'B') → -D(1, 2.0, 'B')
    • 最终结果:k=1 的数据被删除。

2. first-row
  • 逻辑​:保留相同主键的第一条数据,后续数据忽略。
  • 特点​:仅产生 INSERT 类型变更,吞吐率高,适用于首次出现即固定的场景(如初始化配置)。
  • 示例​:
    CREATE TABLE T (k INT PRIMARY KEY NOT ENFORCED,v1 DOUBLE,v2 STRING
    ) WITH ('merge-engine' = 'first-row');
    数据行为​:
    • 写入序列:+I(1, 2.0, 'apple') → +I(1, 4.0, 'banana') → +I(1, 8.0, 'cherry')
    • 查询结果:(1, 2.0, 'apple')(仅保留第一条)。

3. aggregation
  • 逻辑​:对相同主键的值列进行聚合(如 SUMMAX),需显式指定聚合函数。
  • 特点​:适用于累加型指标(如销售额统计),支持聚合函数扩展。
  • 示例​:
    CREATE TABLE T (k INT PRIMARY KEY NOT ENFORCED,sales BIGINT,last_ts TIMESTAMP
    ) WITH ('merge-engine' = 'aggregation','fields.sales.aggregate-function' = 'sum','fields.last_ts.aggregate-function' = 'max'
    );
    数据行为​:
    • 写入序列:
      +I(1, 100, '2023-01-01 10:00:00')
      +U(1, 50, '2023-01-01 11:00:00')
    • 查询结果:(1, 150, '2023-01-01 11:00:00')sales 求和,last_ts 取最新)。

4. partial-update
  • 逻辑​:逐步更新非 NULL 列,最终形成完整记录。支持字段分组和聚合。

  • 特点​:适用于宽表更新或部分列延迟到达的场景。

  • 基础示例​:

    CREATE TABLE T (k INT PRIMARY KEY NOT ENFORCED,v1 DOUBLE,v2 BIGINT,v3 STRING
    ) WITH ('merge-engine' = 'partial-update');

    数据行为​:

    • 写入序列:
      +I(1, 23.0, 10, NULL)
      +I(1, NULL, NULL, 'book')
      +I(1, 25.2, NULL, NULL)
    • 最终结果:(1, 25.2, 10, 'book')NULL 值不覆盖旧数据)。
  • 高级控制
    a) 字段分组(Sequence Group)​
    指定字段按特定序列号组更新:

    CREATE TABLE T (k INT PRIMARY KEY NOT ENFORCED,a STRING, b STRING, g_1 INT,c STRING, d STRING, g_2 INT
    ) WITH ('merge-engine' = 'partial-update','fields.g_1.sequence-group' = 'a,b',  -- a,b 字段由 g_1 决定更新顺序'fields.g_2.sequence-group' = 'c,d'   -- c,d 字段由 g_2 决定更新顺序
    );

    b) 聚合更新
    对组内字段应用聚合函数:

    CREATE TABLE T (k INT PRIMARY KEY NOT ENFORCED,a STRING, b INT, g_1 INT,c STRING, d INT, g_2 INT
    ) WITH ('merge-engine' = 'partial-update','fields.g_1.sequence-group' = 'a,b','fields.b.aggregate-function' = 'max', -- b 字段取最大值'fields.g_2.sequence-group' = 'c,d','fields.d.aggregate-function' = 'sum'  -- d 字段求和
    );

乱序数据处理
  • 问题​:默认按写入顺序合并,数据乱序会导致结果不准确。

  • 解决方案​:
    通过 sequence.field 指定排序列(支持 TINYINT/BIGINT/TIMESTAMP 等),主键相同的数据按该列值升序合并。

    关键配置​:

    CREATE TABLE T (...) WITH ('sequence.field' = 'op_ts',       -- 指定时间戳列为顺序依据'sequence.auto-padding' = 'row-kind-flag' -- 处理 Update 消息的顺序
    );

    说明​:

    • 若使用 CDC 数据(如 MySQL 的 op_ts),需启用 sequence.auto-padding 保证 UPDATE_BEFORE 先于 UPDATE_AFTER 处理。
    • 未配置时,乱序数据可能导致最终状态错误(如旧值覆盖新值)。

合并机制对比表
合并机制适用场景更新行为特殊能力
deduplicate仅需最新状态(如维度表)保留最后一条支持删除消息
first-row首次写入即固定(如配置表)保留第一条仅产生 INSERT
aggregation指标累加(如销售额统计)按规则聚合字段支持 SUM/MAX/MIN 等
partial-update宽表部分列更新(如用户画像)非 NULL 列覆盖字段分组与聚合控制

最佳实践建议
  1. 选择合并机制​:
    • 优先 deduplicate(默认),除非有聚合或分批次更新需求。
    • 使用 partial-update 时,务必通过 sequence-group 控制字段依赖关系。
  2. 乱序处理​:
    • 在 CDC 场景中必须配置 sequence.field 和 sequence.auto-padding
    • 序列字段需单调递增(如操作时间戳、版本号)。
  3. 性能考量​:
    • first-row 写入性能最高(无状态合并),aggregation 和 partial-update 需维护中间状态。

通过合理配置合并机制,Paimon 可灵活支持从实时分析到增量数仓的多种场景,同时保证数据一致性和处理效率。

http://www.dtcms.com/a/298654.html

相关文章:

  • 模糊综合评估法简单示例
  • MySQL的认识与基本操作
  • NaVILA源码解析——从其VLA部分到其low-level部分:涵盖legged-loco、rsl_rl
  • AMD推出Radeon AI Pro R9700:32GB显存加持,发力AI推理与专业图形双场景
  • 13.使用C连接mysql
  • ro属性和persist属性的区别
  • 什么是游戏盾(高防版)?
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-24,(知识点:二极管基础知识,单向导电性)
  • Redux 入门超详细指南
  • vue3中pinia详解
  • 关于“前导零”的问题记录,也就是(0.1)和.1这种数据处理问题
  • streamyfin(世博会)android 编译
  • 0人工沟通,它如何用AI撬动海外B端9400亿采购市场?
  • Round-Robin仲裁器
  • <HMI><威纶通><触摸屏>基于威纶通MT8106iQ触摸屏,实现自定义登录窗口(优化)
  • 内核驱动相关知识点
  • 【Agent】Common Ground 团队协作模型:Partner、Principal 与 Associate
  • 数据结构自学Day14 -- 归并排序
  • 正则表达式 \b:单词边界
  • 模拟flink处理无限数据流
  • WAIC2025预告|英码深元AI一体机将亮相华为昇腾展区,以灵活部署的能力赋能行业智能化转型
  • 学习:JS[6]环境对象+回调函数+事件流+事件委托+其他事件+元素尺寸位置
  • ReVQ (Quantize-then-Rectify,量化后修正)
  • 笛卡尔积规避:JOIN条件完整性检查要点
  • FreeRTOS—互斥信号量
  • Sweet Home 3D:一款免费的室内装修辅助设计软件
  • 【集合】JDK1.8 HashMap 底层数据结构深度解析
  • 第二章: 解密“潜在空间”:AI是如何“看见”并“记住”世界的?
  • 深入解析C语言三路快速排序算法
  • 动态规划:从入门到精通