跳到主要内容
版本: 最新版本-3.5

不同表类型的特性

Key 列和排序键

主键 Duplicate Key 表Aggregate 表Unique Key 表
Key 列和 UNIQUE 约束 主键具有 UNIQUE 约束和 NOT NULL 约束。Duplicate Key 不具有 UNIQUE 约束。Aggregate Key 具有 UNIQUE 约束。Unique Key 具有 UNIQUE 约束。
Key 列和数据更改之间的逻辑关系 如果新数据行的主键值与表中现有数据行的主键值相同,则会发生唯一性约束冲突。然后,新数据行将替换现有数据行。
与 Unique Key 表相比,Primary Key 表具有增强的底层存储引擎,因此可以替换 Unique Key 表。
Duplicate Key 没有 UNIQUE 约束。因此,如果新数据行的 Duplicate Key 值与表中现有数据行的 Duplicate Key 值相同,则新旧数据行都将保留在表中。如果新数据行的 Aggregate Key 值与表中现有数据行的 Aggregate Key 值相同,则将基于 Aggregate Key 和值列的聚合函数来聚合新旧数据行。如果新数据行的 Unique Key 值与表中现有数据行的 Unique Key 值相同,则新数据行将替换现有数据行。
Unique Key 表可以看作是聚合函数为 replace 的 Aggregate 表。
Key 列和排序键之间的关系自 v3.0.0 起,在 Primary Key 表中,排序键与主键分离。自 v3.3.0 起,Duplicate Key 表支持使用 ORDER BY 指定排序键。如果同时使用 ORDER BYDUPLICATE KEY,则 ORDER BY 优先。自 v3.3.0 起,排序键与 Aggregate 表中的 Aggregate Key 分离。Aggregate 表支持使用 ORDER BY 指定排序键,并使用 AGGREGATE KEY 指定 Aggregate Key。排序键和 Aggregate Key 中的列需要相同,但列的顺序不需要相同。自 v3.3.0 起,排序键与 Unique Key 表中的 Unique Key 分离。Unique Key 表支持使用 ORDER BY 指定排序键,并使用 UNIQUE KEY 指定 Unique Key。排序键和 Unique Key 中的列需要相同,但列的顺序不需要相同。
Key 列和排序键支持的数据类型 数值型(包括整数和 BOOLEAN)、字符串和日期(DATE 和 DATETIME)。数值型(包括整数、BOOLEAN 和 DECIMAL)、字符串和日期(DATE 和 DATETIME)。
Key 列与分区/分桶列之间的关系 分区列和分桶列必须在主键中。None (无)分区列和分桶列必须在 Aggregate Key 中。分区列和分桶列必须在 Unique Key 中。

Key 列和 Value 列的数据类型

Key 列支持以下数据类型:数值型(包括整数、BOOLEAN 和 DECIMAL)、字符串和日期(DATE 和 DATETIME)。

注意

主键表的 Key 列不支持 DECIMAL 数据类型。

另一方面,Value 列支持基本数据类型,包括数值型、字符串和日期(DATE 和 DATETIME)。对于不同类型的表的值列,对 BITMAP、HLL 和半结构化类型的支持有所不同,如下详述

主键 Duplicate Key 表Aggregate 表Unique Key 表
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。支持

数据变更

主键 Duplicate Key 表Aggregate 表Unique Key 表
通过数据加载进行 INSERT 支持。 在加载作业中配置 __op=0 以实现 INSERT
在内部实现中,StarRocks 将 INSERT 和 UPDATE 操作都视为 UPSERT 操作。
支持支持(具有相同 Aggregate Key 值的数据行将被聚合。)支持(具有相同 Unique Key 值的数据行将被更新。)
通过数据加载进行 UPDATE 不支持支持(这可以通过使用 replace 作为聚合函数来实现。)支持(Unique Key 表本身可以被视为使用 replace 聚合函数的 Aggregate 表。)
通过数据加载进行 DELETE 支持。 在加载作业中配置 __op=1 以实现 DELETE不支持
要加载的数据列值的完整性 默认情况下,所有列值都需要加载。但是,如果启用了部分列更新 (partial_update),或者列具有默认值,则不需要加载所有列值。默认情况下,所有列值都需要加载。但是,如果列具有默认值,则不需要加载所有列值。默认情况下,所有列值都需要加载。但是,Aggregate 表可以通过将值列的聚合函数指定为 REPLACE_IF_NOT_NULL 来实现部分列更新。有关详细信息,请参见 aggr_type。此外,如果列具有默认值,则不需要加载所有列值。默认情况下,所有列值都需要加载。但是,如果列具有默认值,则不需要加载所有列值。
DML INSERT支持
DML UPDATE
  • Key 列作为过滤条件:支持
  • Value 列作为过滤条件:支持
不支持
DML DELETE
  • Key 列作为过滤条件:支持
  • Value 列作为过滤条件:支持
  • Key 列作为过滤条件:支持
  • Value 列作为过滤条件:支持
请注意,仅支持基于 Key 列或 Value 列本身的简单过滤条件,例如 =、<、>。不支持复杂的过滤条件,例如函数或子查询。
  • Key 列作为过滤条件:支持。请注意,仅支持基于 Key 列本身的简单过滤条件,例如 =、<、>。不支持复杂的过滤条件,例如函数或子查询。
  • Value 列作为过滤条件:不支持。

与其他功能的兼容性

主键表Duplicate Key 表Aggregate 表Unique Key 表
Bitmap 索引/Bloom Filter 索引在 Key 列上构建索引支持
在 Value 列上构建索引支持支持不支持不支持
分区/分桶表达式分区/列表分区支持
随机分桶不支持自 v3.1 起支持不支持不支持
物化视图异步物化视图支持
同步物化视图不支持支持支持支持
其他功能CTAS支持支持不支持不支持
备份和恢复自 v2.5 起支持支持