跳到主要内容
版本:3.2

表类型概览

建表时,您需要指定表类型 (Table Type),这样数据导入至表时,StarRocks 会按照排序键对数据进行排序、处理和存储。本文介绍 StarRocks 支持的各种表类型,满足您在不同业务场景下的需求。

基本概念

表类型

StarRocks 支持四种表类型,分别是明细表 (Duplicate key table)、聚合表 (Aggregate table)、更新表 (Unique Key table) 和主键表 ( Primary Key table)。这四种表类型能够支持多种数据分析场景,例如日志分析、数据汇总分析、实时分析等。

排序键

数据导入至使用某个类型的表,会按照建表时指定的一列或多列排序后存储,这部分用于排序的列就称为排序键。排序键通常为查询时过滤条件频繁使用的一个或者多个列,用以加速查询。 明细表中,数据按照排序键 DUPLICATE KEY 排序,并且排序键不需要满足唯一性约束。 聚合表中,数据按照排序键 AGGREGATE KEY 聚合后排序,并且排序键需要满足唯一性约束。 更新表中,数据按照排序键 UNIQUE KEY REPLACE 后排序,并且排序键需要满足唯一性约束。 主键表支持分别定义主键和排序键,主键 PRIMARY KEY 需要满足唯一性和非空约束,主键相同的数据进行 REPLACE。排序键是用于排序,由 ORDER BY 指定 。

说明

  • 3.0 版本之前,主键表不支持分别定义主键和排序键。
  • 排序键的更多说明,请参见排序键和前缀索引

注意事项

  • 建表后,表类型不支持修改(比如不能将已有的明细表修改为主键表)。如果需要修改表类型,请重新建表。

  • 在建表语句中,排序键必须定义在其他列之前。

  • 在创建表时,您可以将一个或多个列定义为排序键。排序键在建表语句中的出现次序,为数据存储时多重排序的次序。

  • 不支持排序键的数据类型为 BITMAP、HLL。

  • 前缀索引的长度限制为 36 字节。如果排序键中全部列的值的长度加起来超过 36 字节,则前缀索引仅会保存限制范围内排序键的若干前缀列。

  • 如果导入的数据存在重复的主键,则数据导入至不同类型的表时,存储在 StarRocks 时,则会按照如下方式进行处理:

    • 明细表:表中会存在主键重复的数据行,并且与导入的数据是完全对应的。您可以召回所导入的全部历史数据。
    • 聚合表:表中不存在主键重复的数据行,主键满足唯一性约束。导入的数据中主键重复的数据行聚合为一行,即具有相同主键的指标列,会通过聚合函数进行聚合。您只能召回导入的全部历史数据的聚合结果,但是无法召回历史明细数据。
    • 主键表和更新表:表中不存在主键重复的数据行,主键满足唯一性约束。最新导入的数据行,替换掉其他主键重复的数据行。这两种类型的表可以视为聚合表的特殊情况,相当于在聚合表中,为表的指标列指定聚合函数为 REPLACE,REPLACE 函数返回主键相同的一组数据中的最新数据。