ARRAY
本文介绍如何使用 StarRocks 中的数组类型。
数组(Array) 是数据库中的一种扩展数据类型,其相关特性在众多数据库系统中均有支持,可以广泛的应用于 A/B Test 对比、用户标签分析、人群画像等场景。StarRocks 当前支持多维数组嵌套、数组切片、比较、过滤等特性。
定义数组类型的列
您可以在建表时定义数组类型的列。
-- 定义一维数组。
ARRAY<type>
-- 定义嵌套数组。
ARRAY<ARRAY<type>>
-- 定义 NOT NULL 数组列。
ARRAY<type> NOT NULL
数组列的定义形式为 ARRAY<type>,其中 type 表示数组内的元素类型。数组元素目前支持以下数据类型:BOOLEAN、TINYINT、SMALLINT、INT、BIGINT、LARGEINT、FLOAT、DOUBLE、VARCHAR、CHAR、DATETIME、DATE、JSON、BINARY (3.0 及以后)、MAP (3.1 及以后)、STRUCT (3.1 及以后)、Fast Decimal (3.1 及以后)。
数组内的元素默认可以为 NULL,比如 [NULL, 1, 2]。暂时不支持指定数组元素为 NOT NULL,但是您可以定义数组列本身为 NOT NULL,比如上面的第三个示例。
注意
数组类型的列在使用时有以下限制:
- StarRocks 2.1 之前版本中,仅支持在明细表中定义数组类型列。自 2.1 版本开始,支持在主键表、更新表、聚合表中定义数组类型列。注意在聚合表中,仅当聚合列的聚合函数为 replace 和 replace_if_not_null 时,才支持将该列定义为数组类型。
- 数组列暂时不能作为 Key 列。
- 数组列不能作为分桶(Distributed By)列。
- 数组列不能作为分区(Partition By)列。
- 数组列最多支持 14 层嵌套。
示例:
-- 建表并指定其中的 `c1` 列为一维数组,元素类型为 INT。
create table t0(
c0 INT,
c1 ARRAY<INT>
)
duplicate key(c0)
distributed by hash(c0);
-- 建表并指定 `c1` 为两层的嵌套数组,元素类型为 VARCHAR。
create table t1(
c0 INT,
c1 ARRAY<ARRAY<VARCHAR(10)>>
)
duplicate key(c0)
distributed by hash(c0);
-- 建表并定义 NOT NULL 数组的列。
create table t2(
c0 INT,
c1 ARRAY<INT> NOT NULL
)
duplicate key(c0)
distributed by hash(c0);