ARRAY

您所在的位置:网站首页 ps不能导入数据组吗 ARRAY

ARRAY

2024-07-11 08:36| 来源: 网络整理| 查看: 265

ARRAY

本文介绍如何使用 StarRocks 中的数组类型。

数组(Array) 是数据库中的一种扩展数据类型,其相关特性在众多数据库系统中均有支持,可以广泛的应用于 A/B Test 对比、用户标签分析、人群画像等场景。StarRocks 当前支持多维数组嵌套、数组切片、比较、过滤等特性。

定义数组类型的列​

您可以在建表时定义数组类型的列。

-- 定义一维数组。ARRAY-- 定义嵌套数组。ARRAY-- 定义 NOT NULL 数组列。ARRAY NOT NULL

数组列的定义形式为 ARRAY,其中 type 表示数组内的元素类型。数组元素目前支持以下数据类型:BOOLEAN、TINYINT、SMALLINT、INT、BIGINT、LARGEINT、FLOAT、DOUBLE、VARCHAR、CHAR、DATETIME、DATE、JSON、BINARY (3.0 及以后)。

数组内的元素默认可以为 NULL,比如 [NULL, 1, 2]。暂时不支持指定数组元素为 NOT NULL,但是您可以定义数组列本身为 NOT NULL,比如上面的第三个示例。

注意

数组类型的列在使用时有以下限制:

StarRocks 2.1 之前版本中,仅支持在明细模型表中(Duplicate Key)定义数组类型列。自 2.1 版本开始,支持在 Primary Key、Unique Key、Aggregate Key 模型表中定义数组类型列。注意在聚合模型表(Aggregate Key) 中,仅当聚合列的聚合函数为 replace 和 replace_if_not_null 时,才支持将该列定义为数组类型。 数组列暂时不能作为 Key 列。 数组列不能作为分桶(Distributed By)列。 数组列不能作为分区(Partition By)列。 数组列暂不支持 DECIMAL V3 数据类型。 数组列最多支持 14 层嵌套。

示例:

-- 建表并指定其中的 `c1` 列为一维数组,元素类型为 INT。create table t0( c0 INT, c1 ARRAY)duplicate key(c0)distributed by hash(c0);-- 建表并指定 `c1` 为两层的嵌套数组,元素类型为 VARCHAR。create table t1( c0 INT, c1 ARRAY)duplicate key(c0)distributed by hash(c0);-- 建表并定义 NOT NULL 数组的列。create table t2( c0 INT, c1 ARRAY NOT NULL)duplicate key(c0)distributed by hash(c0); 使用 SELECT 语句构造数组​

您可以在 SQL 语句中通过中括号([])来构造数组常量,每个数组元素通过逗号(,)分隔。

示例:

mysql> select [1, 2, 3] as numbers;+---------+| numbers |+---------+| [1,2,3] |+---------+mysql> select ["apple", "orange", "pear"] as fruit;+---------------------------+| fruit |+---------------------------+| ["apple","orange","pear"] |+---------------------------+mysql> select [true, false] as booleans;+----------+| booleans |+----------+| [1,0] |+----------+

当数组元素具有不同类型时,StarRocks 会自动推导出合适的类型(supertype)。

mysql> select [1, 1.2] as floats;+---------+| floats |+---------+| [1,1.2] |+---------+mysql> select [12, "100"];+--------------+| [12,'100'] |+--------------+| ["12","100"] |+--------------+

您可以使用尖括号()声明数组类型。

mysql> select ARRAY[1, 2];+-----------------------+| ARRAY[1.0,2.0] |+-----------------------+| [1,2] |+-----------------------+mysql> select ARRAY["12", "100"];+------------------------+| ARRAY[12,100] |+------------------------+| [12,100] |+------------------------+

数组元素中可以包含 NULL。

mysql> select [1, NULL];+----------+| [1,NULL] |+----------+| [1,null] |+----------+

定义空数组时,您可以使用尖括号声明其类型。您也可以直接定义为 [],此时 StarRocks 会根据上下文推断其类型,如果无法推断则会报错。

mysql> select [];+------+| [] |+------+| [] |+------+mysql> select ARRAY[];+----------------------------------+| ARRAY[] |+----------------------------------+| [] |+----------------------------------+mysql> select array_append([], 10);+----------------------+| array_append([], 10) |+----------------------+| [10] |+----------------------+ 导入数组类型的数据​

StarRocks 当前支持三种方式写入数组数据。

通过 INSERT INTO 语句导入数组​

INSERT INTO 语句导入方式适合小批量数据逐行导入或对 StarRocks 内外部表数据进行 ETL 处理并导入。

示例:

create table t0( c0 INT, c1 ARRAY)duplicate key(c0)distributed by hash(c0);INSERT INTO t0 VALUES(1, [1,2,3]); 通过 Broker Load 批量导入 ORC 或 Parquet 文件中的数组​

StarRocks 中的数组类型,与 ORC 或 Parquet 格式中的 List 结构相对应,所以无需额外指定。具体导入方法请参考 Broker load。

当前 StarRocks 支持直接导入 ORC 文件的 List 结构。Parquet 格式导入正在开发中。

通过 Stream Load 或 Routine Load 导入 CSV 格式数组​

您可以使用 Stream Load 或 Routine Load 方式导入 CSV 文本文件或 Kafka 中的 CSV 格式数据,默认采用逗号分隔。

访问数组中的元素​

您可以使用中括号([])加下标形式访问数组中某个元素。下



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3