StarRocks 支持数据类型:数值类型、字符串类型、日期类型、半结构化类型、其他类型。您在建表时可以指定以下类型的列,向表中导入该类型的数据并查询数据。
5.1 数值类型
SMALLINT
2 字节有符号整数,范围 [-32768, 32767]
INT
4 字节有符号整数,范围 [-2147483648, 2147483647]
BIGINT
8 字节有符号整数,范围 [-9223372036854775808, 9223372036854775807]
LARGEINT
16 字节有符号整数,范围 [-2^127 + 1 ~ 2^127 - 1]
DECIMAL
DECIMAL(P [, S]) 高精度定点数,P 代表一共有多少个有效数字 (precision),S 代表小数点后最多有多少数字 (scale)。1.19.0 及以后版本对 DECIMAL 类型的(P,S)有默认值设置,默认是 Decimal(10,0)。
DOUBLE
8 字节浮点数。
FLOAT
4 字节浮点数。
BOOLEAN
BOOL, BOOLEAN
与 TINYINT 一样,0 代表 false,1 代表 true, NULL代表空。
实际使用中可以用CHAR(1)或VARCHAR(1)来代表BOOLEAN类型,字段值用Y表示“是”,用N表示“否”。
TINYINT
PERCENTILE
5.2 字符串类型
CHAR
定长字符串,M 代表的是定长字符串的长度。M 的范围是 1~255。
VARCHAR
变长字符串。M 代表变长字符串长度,单位:字节,默认取值为 1。
StarRocks 2.1 之前的版本,M 的取值范围为 1~65533。
【公测中】自 StarRocks 2.1 版本开始,M 的取值范围为 1~1048576。
STRING
字符串,最大长度 65533 字节。
BINARY/VARBINARY
自 3.0 版本起,StarRocks 支持 BINARY/VARBINARY 数据类型,用于存储二进制数据,单位为字节。
支持的最大长度与 VARCHAR 类型相同,M 的取值范围为 1~1048576。如果未指定 M,默认为最大值 1048576。
BINARY 是 VARBINARY 的别名,用法与 VARBINARY 相同。
5.3 日期类型
DATETIME
日期时间类型,取值范围是 ['0000-01-01 00:00:00', '9999-12-31 23:59:59']。
打印的形式是'YYYY-MM-DD HH: MM: SS'
DATE
日期类型,目前的取值范围是 ['0000-01-01', '9999-12-31'],默认的打印形式是 'YYYY-MM-DD'。
5.4 半结构化类型
ARRAY
数组(Array) 是数据库中的一种扩展数据类型,其相关特性在众多数据库系统中均有支持,可以广泛的应用于 A/B Test 对比、用户标签分析、人群画像等场景。StarRocks 当前支持多维数组嵌套、数组切片、比较、过滤等特性。
定义一维数组: ARRAY<type>
定义嵌套数组: ARRAY<ARRAY<type>>
定义 NOT NULL 数组列: ARRAY<type> NOT NULL
JSON
自 2.2.0 版本起,StarRocks 支持 JSON。本文介绍 JSON 的基本概念,以及 StarRocks 如何创建 JSON 类型的列、导入和查询 JSON 数据,通过 JSON 函数及运算符构造和处理 JSON 数据。
JSON 是一种轻量级的数据交换格式,JSON 类型的数据是一种半结构化的数据,支持树形结构。JSON 数据层次清晰,结构灵活易于阅读和处理,广泛应用于数据存储和分析场景。JSON 支持的数据类型为数字类型(NUMBER)、字符串类型(STRING)、布尔类型(BOOLEAN)、数组类型(ARRAY)、对象类型(OBJECT),以及 NULL 值。
JSON 的更多介绍,请参见 JSON 官网,JSON 数据的输入和输出语法,请参见 JSON 规范 RFC 7159 。
StarRocks 支持存储和高效查询分析 JSON 数据。StarRocks 采用二进制格式编码来存储 JSON 数据,而不是直接存储所输入文本,因此在数据计算查询时,降低解析成本,从而提升查询效率。
MAP
MAP 是一种复杂数据类型,用于存储无序的键值对 (key-value pair),例如 {a:1, b:2, c:3}。Map 中的 Key 不能重复。一个 Map 最多支持 14 层嵌套。
StarRocks 从 3.1 版本开始支持存储和导入 MAP 类型的数据。您可以在建表时定义 MAP 列,向表中导入 MAP 数据,查询 MAP 数据。
StarRocks 从 2.5 版本开始支持查询数据湖中的复杂数据类型 MAP 和 STRUCT。您可以通过 StarRocks 提供的 External Catalog 方式来查询 Apache Hive™,Apache Hudi,Apache Iceberg 中的 MAP 和 STRUCT 数据。仅支持查询 ORC 和 Parquet 类型文件。
想了解如何使用 External Catalog 查询外部数据源,参见 Catalog 概述 和对应的 Catalog 文档。
语法
MAP<key_type,value_type>
key_type:Key 的数据类型。必须是 StarRocks 支持的基本数据类型 (Primitive Type),例如数值、字符串、日期类型。不支持复杂类型,例如 HLL、JSON、ARRAY、MAP、BITMAP、STRUCT。
value_type:Value 的数据类型。可以是 StarRocks 支持的任意类型,包括复杂类型。
Key 和 Value 取值都可以为 NULL。
STRUCT
STRUCT 是一种复杂数据类型,可以存储不同数据类型的元素(也称字段),例如 <a INT, b STRING>。
Struct 中的字段名称不能重复。字段可以是基本数据类型 (Primitive Type),例如数值、字符串、日期类型;也可以是复杂数据类型,例如 ARRAY 或 MAP。
Struct 中的字段可以是另外一个 Struct,Map,或者 Array,方便用户定义嵌套数据结构。例如 STRUCT<a INT, b STRUCT<c INT, d INT>, c MAP<INT, INT>, d ARRAY<INT>>。
StarRocks 从 3.1 版本开始支持存储和导入 STRUCT 数据类型。您可以在建表时定义 STRUCT 列,向表中导入 STRUCT 数据,查询 STRUCT 数据。
StarRocks 从 2.5 版本开始支持查询数据湖中的复杂数据类型 MAP 和 STRUCT。您可以通过 StarRocks 提供的 External Catalog 方式来查询 Apache Hive™,Apache Hudi,Apache Iceberg 中的 MAP 和 STRUCT 数据。仅支持查询 ORC 和 Parquet 类型文件。
语法
STRUCT<name type>
name:字段名称,和建表语句中的列名相同。
type:字段类型。可以是 StarRocks 支持的任意类型。
5.5 其他类型
BITMAP
BITMAP 与 HLL (HyperLogLog) 类似,常用来加速 count distinct 的去重计数使用。
您可以通过 bitmap 函数进行集合的各种操作,相比 HLL 可以获得更精确的结果。但是 BITMAP 需要消耗更多的内存和磁盘资源,另外 BITMAP 只能支持整数类型的聚合,如果是字符串等类型需要采用字典进行映射。
HLL
HyperLogLog 类型,用于近似去重。详细的使用方法请参考 使用 HyperLogLog 实现近似去重。
HLL 是基于 HyperLogLog 算法的工程实现,用于保存 HyperLogLog 计算过程的中间结果,HLL 类型的列只能作为表的 value 列类型,通过聚合来不断的减少数据量,以此来实现加快查询的目的。基于 HLL 到的是一个估算结果,误差大概在 1% 左右。
HLL 列是通过其它列或者导入数据里面的数据生成的,导入的时候通过 HLL_HASH 函数来指定数据中哪一列用于生成 HLL 列它常用于替代 count distinct,通过结合 rollup 在业务上用于快速计算 UV