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显式定义
- 唯一键必须满足唯一性约束
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?