本文为您介绍Group Aggregate修改的可兼容性和不可兼容性详情。

可兼容的修改

  • 新增、删除、修改非Distinct的统计指标(Aggregate Function)。
    • 对于新增统计指标,属于部分兼容,从当前作业启动时开始累计。
    • 对于删除统计指标,属于完全兼容修改。删除的统计指标对应的状态数据会被丢弃。
    • 对于既有新增又有删除统计指标,则属于部分兼容修改。新增的统计指标从当前作业启动时开始累计,删除的统计指标对应的状态数据会被丢弃。
    • 对于修改统计指标,被视为删除和新增两个操作,属于部分兼容。新增的统计指标从当前作业启动时开始累计,删除的统计指标对应的状态数据会被丢弃。
    说明 对于未进行任何变更的统计指标,复用状态数据后计算的结果和基于历史数据运行的结果是一致的。
    -- 原始SQL。
    select a, sum(b), max(c) from MyTable group by a;
    
    -- 新增统计指标:count(c),属于部分兼容修改。
    -- sum(b)、max(c) 的计算结果不受影响,count(c) 的值在作业启动时从 0 开始累计
    select a, sum(b), max(c), count(c) from MyTable group by a;
    
    -- 删除统计指标:sum(b),属于完全兼容修改。
    -- max(c)的计算结果不受影响。
    select a, max(c) from MyTable group by a;
    
    -- 修改统计指标:max(c) -> min(c),属于部分兼容修改。
    -- sum(b) 的计算结果不受影响。max(c) 被认为删除,其对应的状态数据会被丢弃。
    -- min(c) 被认为是新增指标,其值在作业启动时开始计算。
    select a, sum(b), min(c) from MyTable group by a;
  • 调整非Distinct的统计指标位置,该修改属于完全兼容修改。
    -- 原始SQL。
    select a, sum(b), max(c) from MyTable group by a;
    
    -- 调整统计指标位置:sum(b)、max(c),属于完全兼容修改。
    -- sum(b)、max(c)的计算结果不受影响。
    select a, max(c), sum(b) from MyTable group by a;
  • 当非Distinct的统计指标涉及的字段有计算逻辑变化时,该统计指标被认为做了修改操作,该修改属于部分兼容修改。
    -- 原始SQL。
    select a, sum(b), max(c) from MyTable group by a;
    
    -- 修改统计指标:max(c) -> max(substring(c, 1, 5)),属于部分兼容修改。
    -- sum(b)的计算结果不受影响。max(c)被认为删除,其对应的状态数据会被丢弃。
    -- max(substring(c, 1, 5))被认为新增指标,其值在作业启动时开始计算。
    select a, sum(b), max(c) from (
      select a, b, substring(c, 1, 5) as c from MyTable
    ) group by a;

不兼容的修改

  • 新增、删除、修改统计维度(group key)或者统计维度涉及字段的计算逻辑发生变化,该修改属于不兼容修改。
    -- 原始SQL。
    select a, sum(b), max(c) from MyTable group by a;
    
    -- 新增统计维度:d,当前修改属于不兼容修改。
    select a, sum(b), max(c) from MyTable group by a, d;
    
    -- 删除统计维度:a,当前修改属于不兼容修改。
    select sum(b), max(c) from MyTable;
    
    -- 修改统计维度:a -> d,当前修改属于不兼容修改。
    select d, sum(b), min(c) from MyTable group by d;
    
    -- 修改了统计维度:a -> a + 1,当前修改属于不兼容修改。
    select a, sum(b), max(c) from (
      select a + 1 as a, b, c from MyTable
    ) group by a;
  • 新增、删除、修改Distinct统计指标(Distinct Aggregate Function)或者Distinct统计指标涉及字段的计算逻辑发生变化,该修改属于不兼容修改。
    -- 原始SQL。
    select a, sum(b), max(c), sum(distinct b), count(distinct c) from MyTable group by a;
    
    -- 新增distinct统计指标:count(distinct b),当前修改属于不兼容修改。
    select a, sum(b), max(c), sum(distinct b), count(distinct b), count(distinct c) from MyTable group by a;
    
    -- 删除distinct统计指标:sum(distinct b),当前修改属于不兼容修改。
    select a, sum(b), max(c), count(distinct c) from MyTable group by a;
    
    -- 修改distinct统计指标:sum(distinct b) -> avg(distinct b),当前修改属于不兼容修改。
    select a, sum(b), max(c), avg(distinct b), count(distinct c) from MyTable group by a;
    
    -- 修改distinct统计指标:count(distinct c) -> count(distinct substring(c, 1, 5)),当前修改属于不兼容修改。
    select a, sum(b), max(c), sum(distinct b), count(distinct c) from (
      select a, b, substring(c, 1, 5) as c from MyTable
    ) group by a;
  • 级联聚合时,新增统计指标,该修改属于不兼容修改。(级联聚合会发生消息撤回,新增统计指标结果不可预期。)
    -- 原始SQL。
    select a/2, avg(b), min(c) from (
       select a, sum(b), max(c) from MyTable group by a
    ) group by a/2;
    
    -- 新增统计指标:count(c),当前修改属于不兼容修改。
    select a/2, avg(b), min(c), count(c) from (
       select a, sum(b), max(c) from MyTable group by a
    ) group by a/2;
  • 删除了所有统计指标,该修改属于不兼容修改。(所有统计指标的状态数据都被丢弃,没有状态复用。)
    -- 原始SQL。
    select a, sum(b), max(c) from MyTable group by a;
    
    -- 删除所有统计指标:sum(b), max(c),当前修改属于不兼容修改。
    select a from MyTable group by a;