Doris 的聚合模型及使用

        Doris 的聚合模型主要用于 Aggregate Key 表,在这种表中,Doris 会根据用户指定的聚合函数对具有相同主键的数据进行聚合。聚合模型定义了数据的聚合方式,是聚合表存储和计算的核心。

常见的聚合模型

以下是 Doris 支持的主要聚合模型(聚合函数):


1. SUM (求和)
  • 功能:对相同主键的列数据进行求和。
  • 场景:适用于需要累积值的场景,例如订单总额统计、商品销量统计等。
  • 示例
    • 数据写入:
      主键  | 数量
      1001  | 10
      1001  | 20
      
    • 聚合后:
      主键  | 数量
      1001  | 30
      

2. MIN (最小值)
  • 功能:对相同主键的列数据取最小值。
  • 场景:适用于需要获取某个字段的最小值的场景,例如记录商品最低价格、最早交易时间等。
  • 示例
    • 数据写入:
      主键  | 价格
      1001  | 50
      1001  | 30
      
    • 聚合后:
      主键  | 价格
      1001  | 30
      

3. MAX (最大值)
  • 功能:对相同主键的列数据取最大值。
  • 场景:适用于需要获取某个字段最大值的场景,例如记录商品最高价格、最近交易时间等。
  • 示例
    • 数据写入:
      主键  | 价格
      1001  | 50
      1001  | 70
      
    • 聚合后:
      主键  | 价格
      1001  | 70
      

4. REPLACE (替换)
  • 功能:将相同主键的最新数据替换旧数据。
  • 场景:适用于需要保持最新状态的场景,例如记录用户最近一次登录时间、最新状态等。
  • 示例
    • 数据写入:
      主键  | 状态
      1001  | 正常
      1001  | 异常
      
    • 聚合后:
      主键  | 状态
      1001  | 异常
      

5. REPLACE_IF_NOT_NULL (非空替换)
  • 功能:与 REPLACE 类似,但仅当新数据非空时才替换旧数据。
  • 场景:适用于部分数据允许空值但需要优先保留非空值的场景。
  • 示例
    • 数据写入:
      主键  | 状态
      1001  | 正常
      1001  | NULL
      
    • 聚合后:
      主键  | 状态
      1001  | 正常
      

6. HLL (HyperLogLog)
  • 功能:一种基于概率的去重计数方法,用于近似计算唯一值的数量。
  • 场景:适用于大规模数据的去重计数,例如计算网站的日活跃用户数(UV)。
  • 示例
    • 数据写入:
      主键  | 用户ID
      1001  | 用户A
      1001  | 用户B
      1001  | 用户A
      
    • 聚合后:
      主键  | 唯一用户数
      1001  | 2
      

7. BITMAP_UNION (位图聚合)
  • 功能:基于位图数据结构的聚合,适合快速计算去重计数。
  • 场景:类似 HLL,用于高效的去重统计,但精度更高(消耗内存更多)。
  • 示例
    • 数据写入:
      主键  | 用户ID
      1001  | 用户A
      1001  | 用户B
      1001  | 用户A
      
    • 聚合后:
      主键  | 唯一用户数
      1001  | 2
      

8. PERCENTILE_UNION (百分位数计算)
  • 功能:对数据进行百分位数统计,用于计算如 P50、P90、P99 等分位点。
  • 场景:适用于需要分位点分析的场景,例如响应时间的 P99 分位值、延迟分析等。
  • 示例
    • 数据写入:
      主键  | 延迟(ms)
      1001  | 100
      1001  | 200
      1001  | 300
      
    • 聚合后(计算 P50):
      主键  | P50 延迟
      1001  | 200
      

聚合模型选择

  • SUM、MIN、MAX:适用于基本统计计算(如总和、最值)。
  • REPLACE、REPLACE_IF_NOT_NULL:适用于状态更新或需要保持最新值的场景。
  • HLL、BITMAP_UNION:适用于高效去重计数,HLL 精度较低但占用空间小,BITMAP_UNION 精度高但占用内存多。
  • PERCENTILE_UNION:适用于复杂分析如分位点计算。

通过合理选择聚合模型,Doris 能够高效处理各种分析任务,从而满足不同业务场景需求。

### Doris模型使用方法与应用场景 Doris 提供了多种数据模型来满足不同的业务需求,主要包括 **Aggregate 模型**、**Uniq 模型** 和 **Duplicate 模型**。每种模型都有其特定的应用场景和优势。 #### 1. Aggregate 模型 Aggregate 模型是一种用于预聚合的数据模型,在写入数据时会自动进行去重或聚合操作。这种模型非常适合需要频繁统计汇总指标的场景,比如计算总销售额、访问量等。 - **特点**: 支持定义聚合函数(如 SUM、MIN、MAX),并能自动对重复记录进行合并。 - **适用场景**: 需要快速查询统计数据的报表系统,或者实时监控平台。 - **创建示例**: ```sql CREATE TABLE IF NOT EXISTS sales_data ( product_id BIGINT, sale_amount DOUBLE SUM, order_count INT COUNT ) AGGREGATE KEY(product_id); ``` 此表会在插入数据时自动生成 `sale_amount` 的累加值以及 `order_count` 的计数值[^1]。 --- #### 2. Uniq 模型 Uniq 模型主要用于唯一化存储数据,能够有效去除重复记录。它适合那些需要精确反映原始数据状态但又不允许存在冗余的情况。 - **特点**: 自动删除相同主键下的多余副本;仅保留最新的一条记录。 - **适用场景**: 用户行为追踪、设备心跳上报等领域。 - **创建示例**: ```sql CREATE TABLE IF NOT EXISTS user_actions ( user_id BIGINT, action_type STRING, timestamp DATETIME REPLACE ) UNIQUE KEY(user_id, action_type); ``` 这里通过设置 `REPLACE` 属性指定当遇到冲突时更新时间戳字段[^2]。 --- #### 3. Duplicate 模型 Duplicate 模型不对数据做任何修改,完全保存输入源的内容。即使某些行具有相同的主键组合也不会被覆盖掉而是全部留存下来。因此该模式特别适配于那种允许一定程度上的不一致性的场合下工作。 - **特点**: 不执行任何形式的聚合运算也不实施去重逻辑。 - **适用场景**: 日志文件解析、网络流量捕捉之类的任务当中经常会碰到这样的情况——少量丢失或者额外增加若干条目并不会显著影响最终结论的有效性和准确性[^3]。 - **创建示例**: ```sql CREATE TABLE IF NOT EXISTS access_logs ( log_time DATETIME NOT NULL COMMENT '日志生成时刻', ip_address STRING COMMENT '客户端IP地址', request_url STRING COMMENT '请求路径' ) DUPLICATE KEY(log_time, ip_address); ``` 此外还可以利用分区机制进一步优化性能表现例如按照日期范围划分子集从而便于管理大规模历史档案资料等等[^4]: ```sql PARTITION BY RANGE(log_date)( PARTITION p202309 VALUES LESS THAN ('2023-10-01'), PARTITION p202310 VALUES LESS THAN ('2023-11-01') ); ``` 以上就是关于 Apache Doris 各类主要建模方式及其实际运用方面的详细介绍希望能够帮助到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值