定义恰当数据字段类型对StarRocks查询的优化是非常重要的,从查询效率的角度考虑,我们可以遵循两条原则:
- 如果数据没有Null,可以指定Not Null属性;
- 尽量使用数字列代替字符串列。
StarRocks支持多种类型,大致可以分为:数值、时间、字符以和其他类型。
1数值类型
1.1严格数值整型
类型 |
大小 |
范围(区间) |
TINYINT |
1 Byte |
[-128 , 127] |
SMALLINT |
2 Bytes |
[-32768 , 32767] |
INT |
4 Bytes |
[-2147483648 , 21474836470] |
BIGINT |
8 Bytes |
[-9223372036854775808 , 9223372036854775807] |
LARGEINT |
16 Bytes |
[-2^127 + 1 , 2^127 – 1] |
BOOLEAN |
1 Byte |
0或1(0代表False,1代表True) |
1.2近似数值类型
类型 |
大小 |
范围(区间) |
FLOAT |
4 Bytes |
[-3.402 823 466 E+38,-1.175 494 351 E-38],0,[1.175 494 351 E-38,3.402 823 466 351 E+38] |
DOUBLE |
8 Bytes |
[-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308],0,[2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308] |
1.3高精度定点数
类型 |
大小 |
范围 |
说明 |
Decimal V2 |
8 Bytes |
DECIMAL(M[,D]) |
M范围是[1,27],D的范围[1, 9],M需大于等于D的取值。默认的D取值为0 |
Fast Decimal |
16 Bytes |
M的范围是[1,38], D的范围[1, M]。默认的D取值为0。 |
注意:自StarRocks 1.18版本已默认为Fast Decimal。
2日期和时间类型
StarRocks的时间类型只有两个:DATA和DATATIME,这两个类型都不会保存时区信息。
类型 |
大小 |
取值范围 |
默认形式 |
DATE |
4 Bytes |
['0000-01-01', '9999-12-31'] |
YYYY-MM-DD |
DATETIME |
8 Bytes |
['0000-01-01 00:00:00', '9999-12-31 23:59:59'] |
YYYY-MM-DD HH:MM:SS |
3字符串类型
StarRocks的字符串类型目前有三种:
类型 |
范围 |
用途 |
CHAR |
CHAR(M),M为[1, 255] |
定长字符串 |
VARCHAR |
VARCHAR(M),M为[1, 65533] |
变长字符串 |
STRING |
目前等价与VARCHAR(65533) |
变长字符串 |
说明:
1)Varchar中,由于前两个字节用于表示长度,因此比65535少两字节;
2)上表中M的值为字节数(不同于MySQL的字符数),所以在做MySQL的数据迁移时,StarRocks中M的值可以是MySQL的三到四倍;
3)当前不支持不限长的文本存储。
4其他类型
4.1 HLL(HyperLogLog)
HLL是基于HyperLogLog算法的工程实现,用于保存HyperLogLog计算过程的中间结果。hll(length),长度length范围1~16385。用户不需要指定长度和默认值、长度根据数据的聚合程度系统内控制,并且HLL列只能通过配套的hll_union_agg、hll_cardinality、hll_hash进行查询或使用。
使用示例:
create table table09(
id int,
dt date,
uv hll hll_union
)
distributed by hash(id) buckets 32;
4.2 BITMAP
BITMAP与HLL类似只能作为聚合表的value类型使用,常见用来加速count distinct的去重计数使用。
使用示例:
CREATE TABLE table10 (
`page_id` INT NOT NULL COMMENT '页面id',
`visit_date` datetime NOT NULL COMMENT '访问时间',
`visit_users` BITMAP BITMAP_UNION NOT NULL COMMENT '访问用户id'
) ENGINE=OLAP
AGGREGATE KEY(`page_id`, `visit_date`)
DISTRIBUTED BY HASH(`page_id`) BUCKETS 10
PROPERTIES (
"replication_num" = "1"
);