联机分析列式数据库系统ClickHouse
数据类型
https://clickhouse.com/docs/en/sql-reference/data-types/
ClickHouse提供了许多数据类型,它们可以划分为基础类型、复合类型和特殊类型。我们可以在system.data_type_families表中检查数据类型名称以及是否区分大小写。这个表中存储了ClickHouse支持的所有数据类型。
select * from system.data_type_families limit 10;
SELECT *
FROM system.data_type_families
LIMIT 10
┌─name────────────┬─case_insensitive─┬─alias_to─┐
│ Polygon │ 0 │ │
│ Ring │ 0 │ │
│ MultiPolygon │ 0 │ │
│ IPv6 │ 0 │ │
│ IntervalSecond │ 0 │ │
│ IPv4 │ 0 │ │
│ UInt32 │ 0 │ │
│ IntervalYear │ 0 │ │
│ IntervalQuarter │ 0 │ │
│ IntervalMonth │ 0 │ │
└─────────────────┴──────────────────┴──────────┘
10 rows in set. Elapsed: 0.004 sec.
下面介绍下常用的数据类型,ClickHouse与Mysql、Hive中常用数据类型的对比图如下:
MySQL | Hive | ClickHouse(区分大小写) |
---|---|---|
byte | TINYINT | Int8 |
short | SMALLINT | Int16 |
int | INT | Int32 |
long | BIGINT | Int64 |
varchar | STRING | String |
timestamp | TIMESTAMP | DateTime |
float | FLOAT | Float32 |
double | DOUBLE | Float64 |
boolean | BOOLEAN | 无 |
1) 整数数据类型
ClickHouse中整形分为Int8、Int16、Int32、Int64来表示整数不同的取值范围,其末尾数字正好代表占用字节的大小(8位=1字节),整形又包含有符号整形和无符号整形,他们写法上的区别为无符号整形前面加“U”表示。
-
有符号整型范围
类型 | 字节 | 范围 |
---|---|---|
Int8 | 1 | [-128:127] |
Int16 | 2 | [-32768:32767] |
Int32 | 4 | [-2147483648:2147483647] |
Int64 | 8 | [-9223372036854775808:9223372036854775807] |
-
无符号整形范围:
类型 | 字节 | 范围 |
---|---|---|
UInt8 | 1 | [0:255] |
UInt16 | 2 | [0:65535] |
UInt32 | 4 | [0:4294967295] |
UInt64 | 8 | [0:18446744073709551615] |
create table t1(
id UInt32 ,
age UInt8 ,
flow Int64
) engine=Log ;
注意:clickhouse区分大小写
2) 小数
create table tb_user(
uid Int8 ,
sal Decimal32(2) -- 指定2位小数点
) engine=TinyLog ;
insert into tb_user values(1,10000),(2,30000),(3,2000) ;
3) 字符串数据类型
drop table if exists tb_stu ;
create table if not exists tb_stu(
sid FixedString(8) ,
name String ,
address String
) engine = TinyLog ;
insert into tb_stu values('aaaaaaaa' , 'zhangsan' ,'beijing') ;
4) 枚举类型
CREATE TABLE t_enum
(
x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog
这个 x 列只能存储类型定义中列出的值:'hello'或'world'。如果尝试保存任何其他值,ClickHouse 抛出异常。
:) INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
5) 数组
create table t_array(id UInt32,name String,score Array(UInt32)) ENGINE = TinyLog;
insert into t_array values (1,'zs',array(10,20,30)),(2,'ls',[100,200,300])
select id,name,score[1] from t_array;
总结
ClickHouse数据类型技术总结 ClickHouse数据类型分基础、复合及特殊类型,可通过`system.data_type_families`表查看,且区分大小写。
基础类型中,整数分有符号(Int8/16/32/64)与无符号(UInt8/16/32/64),末尾数字表字节数,对应不同取值范围;小数用Decimal(如Decimal32(2)表2位小数);字符串含String(变长)和FixedString(n)(定长);无布尔类型,可用整数替代。
复合类型含枚举(Enum8/16,值需在定义范围内)、数组(Array<T>,支持array()或[]初始化,按索引访问)等。 与MySQL、Hive相比,ClickHouse数据类型更精细,如整数按字节细分,时间类型为DateTime,需注意类型匹配与大小写问题,建表时需按需选择适配类型 。
- 点赞
- 收藏
- 关注作者
评论(0)