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

举报
tea_year 发表于 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个月内不可修改。