[TOC] ### 7.3.1 数字类型 #### BIGINT 描述: `BIGINT` `8字节有符号整数,范围[-9223372036854775808, 9223372036854775807]` INT 描述: `INT` `4字节有符号整数,范围[-2147483648, 2147483647]` #### LARGEINT 描述: `LARGEINT` `16字节有符号整数,范围[-2^127 + 1 ~ 2^127 - 1]。` #### SMALLINT 描述: `SMALLINT` `2字节有符号整数,范围[-32768, 32767]。` #### TINYINT 描述: `TINYINT` `1字节有符号整数,范围[-128, 127]。` #### BOOLEAN 描述: `BOOL, BOOLEAN` `与TINYINT一样,0代表false,1代表true` #### DECIMAL 描述: `DECIMAL(M,D)` `高精度定点数,M代表一共有多少个有效数字(precision),D代表小数点后最多有多少数字(scale)` <br/> Decimal V2 `M的范围是[1,27], D的范围[1, 9], 另外,M必须要大于等于D的取值。默认的D取值为0。 Fast Decimal (1.18版本支持) `M的范围是[1,38], D的范围[1, M]。默认的D取值为0。 DorisDB-1.18版本开始起, decimal类型支持更高精度的FastDecimal * 打开方式 ~~~ plain text admin set frontend config ("enable_decimal_v3" = "true"); #启用fast decimal ~~~ * 主要优化有: 1. 内部采用多种宽度的整数表示decimal, decimal(M<=18, D)使用64bit整数, 相比于原来decimal v2实现统一采用128bit整数, 算数运算和转换运算在64bit的处理器上使用更少的指令数量, 因此性能有大幅提升。 2. Fast Decimal 实现和decimal v2相比, 具体算法做了极致的优化, 尤其是乘法运算,性能提升有4倍左右。 * 当前的限制: 1. 目前fast decimal 不支持array类型, 如果用户想使用array(decimal)类型, 请使用array(double)类型, 或者关闭decimal v3之后, 使用array(decimal)类型. 2. hive直连外表中, orc和parquet数据格式对decimal暂未支持 #### DOUBLE 描述: `DOUBLE` `8字节浮点数` #### FLOAT 描述: `FLOAT` `4字节浮点数` ### 7.3.2 字符串类型 #### CHAR 描述: `CHAR(M)` `定长字符串,M代表的是定长字符串的长度。M的范围是[1, 255]。` #### VARCHAR 描述: `VARCHAR(M)` `变长字符串,M代表的是变长字符串的长度。M的范围是[1, 65533]。由于前两个字节用于表示长度,因此比65535少两字节。` #### STRING 描述: `STRING` `变长字符串,当前版本等价与VARCHAR(65533),未来会实现没有长度限制的版本` ### 7.3.3 日期类型 #### DATE 描述: DATE类型    日期类型,目前的取值范围是\['0000-01-01', '9999-12-31'\], 默认的打印形式是'YYYY-MM-DD' 示例: `mysql> SELECT DATE('2003-12-31 01:02:03');` `   -> '2003-12-31'` #### DATETIME 描述: `DATETIME` `日期时间类型,取值范围是['0000-01-01 00:00:00', '9999-12-31 23:59:59'].` `打印的形式是'YYYY-MM-DD HH:MM:SS'` ### 7.3.4 其他类型 #### HLL(HyperLogLog) 描述: `HLL` `HLL是基于HyperLogLog算法的工程实现,用于保存HyperLogLog计算过程的中间结果。它只能作为聚合表的value列类型,通过聚合来不断的减少数据量,以此来实现加快查询的目的。基于它得到的是一个估算结果,误差大概在1%左右。` `HLL列是通过其它列或者导入数据里面的数据生成的。` `HLL列只能通过配套的hll_union_agg、hll_raw_agg、hll_cardinality、hll_hash进行查询或使用。` 关键字: `HLL,HYPERLOGLOG` #### BITMAP 描述: BITMAP与HLL类似只能作为聚合表的value类型使用,常见用来加速count distinct的去重计数使用,通过位图可以进行精确计数,可以通过bitmap函数可以进行集合的各种操作,相对HLL他可以获得精确的结果,但是需要消耗更多的内存和磁盘资源,另外Bitmap只能支持整数类型的聚合,如果是字符串等类型需要采用字典进行映射。 语法: ~~~ CREATE TABLE `page_uv` ( `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 1 PROPERTIES ( "replication_num" = "1", "storage_format" = "DEFAULT" ); ~~~ 使用方式参考 [6.1 Bitmap使用](6.1用Bitmap实现精确去重.md) 关键字: BITMAP&nbsp;BITMAP\_UNION