跳到主要内容
版本:Latest-3.2

各类表的能力对比

Key 列和排序键

主键表 (Primary Key table)明细表 (Duplicate Key table)聚合表 (Aggregate table)更新表 (Unique Key table)
Key 列和唯一约束主键(Primary Key)具有唯一约束和非空约束。Duplicate Key 不具有唯一约束。聚合键(Aggregate Key)具有唯一约束。唯一键(Unique Key)具有唯一约束。
Key 列和数据变更的关系(逻辑关系)基于主键对数据进行增删改操作。如果新数据的主键值与表中原数据的主键值相同,则存在唯一约束冲突,此时新数据会替代原数据。
与更新表相比,主键表增强了其底层存储引擎,已经可以取代更新表。
Duplicate Key 不具有唯一约束,因此如果新数据的 Duplicate Key 与表中原数据相同,则新旧数据都会存在表中。基于聚合键对数据进行增删改操作。如果新数据与表中原数据存在唯一约束冲突,则会根据聚合键和 Value 列的聚合函数聚合新旧数据。基于唯一键对数据进行增删改操作。如果新数据与表中原数据存在唯一约束冲突,则新数据会替代原数据。
更新表实际可以视为聚合函数为 replace 的聚合表。
Key 列和排序键的关系自 3.0 起,两者解耦。两者耦合。
Key 列和排序键支持的数据类型数值(包括整型、布尔)、字符串、时间日期。数值(包括整型、布尔、Decimal)、字符串、时间日期。
Key 和分区/分桶列的关系分区列、分桶列必须在主键中。分区列、分桶列必须在聚合键中。分区列、分桶列必须在唯一键中。

Key 列和 Value 列的数据类型

表中 Key 列支持数据类型为数值(包括整型、布尔和 DECIMAL)、字符串、时间日期。

备注

主键表的 Key 列不支持为 DECIMAL。

而表中 Value 列支持基础的数据类型,包括数值、字符串、时间日期。不同类型的表中 Value 列对于 BITMAP、HLL 以及半结构化类型的支持度不同,具体如下:

主键表 (Primary Key table)明细表 (Duplicate Key table)聚合表 (Aggregate table)更新表 (Unique Key table)
BITMAP支持不支持支持。聚合函数必须为 bitmap_union、replace 或者 replace_if_not_null。支持
HLL支持不支持支持。聚合函数必须为 hll_union、replace 或者replace_if_not_null。支持
PERCENTILE支持不支持支持。聚合函数必须为 percentile_union、replace 或者 replace_if_not_null。支持
半结构化类型: JSON/ARRAY/MAP/STRUCT支持支持支持。聚合函数必须为 replace 或者 replace_if_not_null。支持

数据变更

主键表 (Primary Key table)明细表 (Duplicate Key table)聚合表 (Aggregate table)更新表 (Unique Key table)
导入数据时实现 INSERT支持。在导入任务中配置 __op=0 实现 INSERT。内部实现时,StarRocks 将 INSERT 和 UPDATE 操作均视为 UPSERT 操作。支持支持(同聚合键值的数据行会聚合)支持(同唯一键值的数据行会更新)
导入数据时实现 UPDATE不支持支持(使用 Replace 聚合函数实现)支持(更新表本身就可以视为使用 Replace 聚合函数的聚合表)
导入数据时实现 DELETE支持。在导入任务中配置 __op=1 实现 DELETE不支持不支持不支持
导入数据列值的完整性默认必须导入全部列值。如果开启部分列更新partial_update,或者列具有默认值,则无需导入全部列值。默认必须导入全部列值。如果列具有默认值,则无需导入全部列值。默认必须导入全部列值。不过,聚合表可以通过指定 Value 列的聚合函数为 REPLACE_IF_NOT_NULL 实现部分列更新,具体使用方式,请参见 aggr_type。并且如果列具有默认值,也无需导入全部列值。默认必须导入全部列值。如果列具有默认值,则无需导入全部列值。
DML INSERT支持
DML UPDATE
  • Key 列作为过滤条件:支持
  • Value 列作为过滤条件:支持
不支持
DML DELETE
  • Key 列作为过滤条件:支持
  • Value 列作为过滤条件:支持
  • Key 列作为过滤条件:支持
  • Value 列作为过滤条件:支持。
注意,仅支持基于 Key 或 Value 列本身的简单过滤条件,如 =、<、>,不支持复杂条件,如函数、子查询。
  • Key 列作为过滤条件:支持。注意,仅支持基于 Key 列本身的简单过滤条件,如 =、<、>,不支持复杂条件,如函数、子查询。
  • Value 列作为过滤条件:不支持

和其他功能的兼容性

主键表 (Primary Key table)明细表 (Duplicate Key table)聚合表 (Aggregate table)更新表 (Unique Key table)
Bitmap 索引/Bloom filer 索引基于 Key 列构建索引支持
基于 Value 列构建索引支持支持不支持不支持
分区/分桶表达式分区/List 分区支持
随机分桶不支持自 3.1 起,支持不支持不支持
物化视图异步物化视图支持
同步物化视图不支持支持支持支持
其他功能CTAS支持支持不支持不支持
Backup & restore自 2.5 起,支持支持