数据模型概览
建表时,您需要指定数据模型 (Data Model),这样数据导入至数据模型时,StarRocks 会按照排序键对数据进行排序、处理和存储。本文介绍 StarRocks 支持的各种数据模型,满足您在不同业务场景下的需求。
基本概念
数据模型
StarRocks 支持四种数据模型,分别是明细模型 (Duplicate Key Model)、聚合模型 (Aggregate Key Model)、更新模型 (Unique Key Model) 和主键模型 (Primary Key Model)。这四种数据模型能够支持多种数据分析场景,例如日志分析、数据汇总分析、实时分析等。
排序键
数据导入至使用某个数据模型的表,会按照建表时指定的一列或多列排序后存储,这部分用于排序的列就称为排序键。排序键通常为查询时过滤条件频繁使用的一个或者多个列,用以加速查询。
- 明细模型中,数据按照排序键
DUPLICATE KEY
排序,并且排序键不需要满足唯一性约束。 - 聚合模型中,数据按照排序键
AGGREGATE KEY
聚合后排序,并且排序键需要满足唯一性约束。 - 更新模型中,数据按照排序键
UNIQUE KEY
REPLACE 后排序,并且排序键需要满足唯一性约束。 - 主键模型中,数据按照排序键
PRIMARY KEY
REPLACE 后排序,并且排序键需要满足唯一性和非空约束。
说明
排序键的更多说明,请参见排序键和前缀索引。
注意事项
-
建表后,表类型不支持修改(比如不能将已有的明细表修改为主键表)。如果需要修改表类型,请重新建表。
-
在建表语句中,排序键必须定义在其他列之前。
-
在创建表时,您可以将一个或多个列定义为排序键。排序键在建表语句中的出现次序,为数据存储时多重排序的次序。
-
不支持排序键的数据类型为 BITMAP、HLL。
-
前缀索引的长度限制为 36 字节。如果排序键中全部列的值的长度加起来超过 36 字节,则前缀索引仅会保存限制范围内排序键的若干前缀列。
-
如果导入的数据存在重复的主键,则数据导入至数据模型,存储在 StarRocks 时,则会按照如下方式进行处理:
- 明细模型:表中会存在主键重复的数据行,并且与导入的数据是完全对应的。您可以召回所导入的全部历史数据。
- 聚合模型:表中不存在主键重复的数据行,主键满足唯一性约束。导入的数据中主键重复的数据行聚合为一行,即具有相同主键的指标列,会通过聚合函数进行聚合。您只能召回导入的 全部历史数据的聚合结果,但是无法召回历史明细数据。
- 主键模型和更新模型:表中不存在主键重复的数据行,主键满足唯一性约束。最新导入的数据行,替换掉其他主键重复的数据行。这两种模型可以视为聚合模型的特殊情况,相当于在聚合模型中,为表的指标列指定聚合函数为 REPLACE,REPLACE 函数返回主键相同的一组数据中的最新数据。