联机分析列式数据库系统ClickHouse

举报
人工智能-张晨光 发表于 2025/09/17 17:21:04 2025/09/17
【摘要】 数据类型https://clickhouse.com/docs/en/sql-reference/data-types/ClickHouse提供了许多数据类型,它们可以划分为基础类型、复合类型和特殊类型。我们可以在system.data_type_families表中检查数据类型名称以及是否区分大小写。这个表中存储了ClickHouse支持的所有数据类型。select * from syst...

数据类型

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) 小数

image-20230605223655649.png

create table tb_user(
uid Int8 ,
sal Decimal32(2) -- 指定2位小数点
) engine=TinyLog ;
insert into tb_user values(1,10000),(2,30000),(3,2000) ;


3) 字符串数据类型

image-20230605223839601.png


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) 枚举类型

image-20230605223938827.png

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) 数组

image-20230605223959056.png


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,需注意类型匹配与大小写问题,建表时需按需选择适配类型 。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。