StarRocks模型表(二)

聚合表

  • 建表时可以定义聚合键并且为value列指定聚合函数,当多条数据具有相同的聚合键时,value列会进行聚合

适用场景

适用于分析统计和汇总数据,例如:

  • 通过分析网站或APP的访问流量,统计用户的访问总时长、访问总次数
  • 广告厂商为广告主提供的广告点击总量、展示总量、消费统计等
  • 通过分析电商的全年交易数据,获得指定季度或者月份中,各类消费人群的爆款商品

在上述场景中,数据查询和导入,具有以下特点:

  • 多为汇总类查询,比如SUM、MAX、MIN等类型的查询
  • 不需要查询原始的明细数据
  • 旧数据更新不频繁,只会追加新的数据

原理

从数据导入至数据查询阶段,聚合表内部同一聚合键的数据会多次聚合,聚合的具体时机和机制如下:

  • 数据导入阶段:数据按批次导入至聚合表时,每一个批次的数据形成一个版本,在一个版本中,同一聚合键的数据会进行一次聚合
  • 后台文件合并阶段(Compaction):数据分批次多次导入至聚合表中,会生成多个版本的文件,多个版本的文件定期合并成一个大版本文件时,同一聚合键的数据会进行一次聚合
  • 查询阶段:所有版本中同一聚合键的数据进行聚合,然后返回查询结果

举例
导入如下数据至聚合表中,聚合键为Date、Country

Date Country PV
2020.05.01 CHN 1
2020.05.01 CHN 2
2020.05.01 USA 3
2020.05.01 USA 4

在聚合表中,以上四条数据会聚合为两条数据

Date Country PV
2020.05.01 CHN 3
2020.05.01 USA 7

创建表

  • 分析某一段时间内,来自不同城市的用户,访问不同网页的总次数,可以将网页地址site_id、日期date和城市代码city_code作为聚合键,将访问次数pv作为value列,并为value列pv指定聚合函数为SUM
CREATE TABLE aggregate_tbl (
    site_id LARGEINT NOT NULL COMMENT "id of site",
    date DATE NOT NULL COMMENT "time of event",
    city_code VARCHAR(20) COMMENT "city_code of user",
    pv BIGINT SUM DEFAULT "0" COMMENT "total page views"
)
AGGREGATE KEY(site_id, date, city_code)
DISTRIBUTED BY HASH(site_id);

聚合键

  • 在建表语句中,聚合键必须定义在其他列之前
  • 聚合键可以通过AGGREGATE KEY显式定义,并且AGGREGATE KEY必须包含除value列之外的所有列,否则建表会失败
  • 如果不通过AGGREGATE KEY显示定义聚合键,则默认除value列之外的列均为聚合键
  • 聚合键具有唯一约束性

更新表

  • 建表时需要定义唯一键,当多条数据具有相同的唯一键时,value列会进行REPLACE,查询时返回唯一键相同的一组数据中的最新数据
  • 适用场景:实时和频繁更新的业务场景,例如分析电商订单

原理

  • 更新表可以视为聚合表的特殊情况,value列指定的聚合函数为REPLACE,返回具有相同唯一键的一组数据中的最新数据
  • 数据分批次多次导入至更新表,每一批次数据分配一个版本号,因此同一唯一键的数据可能有多个版本,查询时返回版本最新(即版本号最大)的数据

创建表

  • 在电商订单分析场景中,经常按照日期对订单状态进行统计分析,则可以将经常使用的过滤字段订单创建时间create_time、订单编号order_id作为唯一键,其余列订单状态order_state和订单总价total_price作为指标列
CREATE TABLE orders (
    create_time DATE NOT NULL COMMENT "create time of an order",
    order_id BIGINT NOT NULL COMMENT "id of an order",
    order_state INT COMMENT "state of an order",
    total_price BIGINT COMMENT "price of an order"
)
UNIQUE KEY(create_time, order_id)
DISTRIBUTED BY HASH(order_id); 

唯一键

  • 唯一键必须定义在其他列之前
  • 唯一键需要通过UNIQUE KEY显式定义
  • 唯一键必须满足唯一性约束
posted @   一年都在冬眠  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示