当前位置:网站首页>ClickHouse-数据类型
ClickHouse-数据类型
2022-04-23 17:04:00 【魔笛Love】
数据类型
整型
固定长度的整型,包括有符号整型或无符号整型。
整型范围(-2的n-1次方到2的n-1次方-1):
Int8 - [-128 : 127] ,对应java的byte
Int16 - [-32768 : 32767],对应java的short
Int32 - [-2147483648 : 2147483647],对应java的int
Int64 - [-9223372036854775808 : 9223372036854775807],对应java的long
无符号整型范围(0~2的n次方-1):
UInt8 - [0 : 255]
UInt16 - [0 : 65535]
UInt32 - [0 : 4294967295]
UInt64 - [0 : 18446744073709551615]
使用场景: 个数、数量、也可以存储型 id。
浮点型
Float32 - float
Float64 – double
建议尽可能以整数形式存储数据。例如,将固定精度的数字转换为整数值,如时间用毫秒为单位表示,因为浮点型进行计算时可能引起四舍五入的误差。
使用场景:一般数据值比较小,不涉及大量的统计计算,精度要求不高的时候。比如保存商品的重量。
布尔型
没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。
Decimal 型
有符号的浮点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会被丢弃(不舍入)。浮点数要存就存成Decimal类型,比如钱。
有三种声明:
- Decimal32(s),相当于 Decimal(9-s,s),有效位数为 1~9,例如Decimal32(5)表示整数部分有4位,小数部分有5位,且截断是不是四舍五入,是直接截断
- Decimal64(s),相当于 Decimal(18-s,s),有效位数为 1~18
- Decimal128(s),相当于 Decimal(38-s,s),有效位数为 1~38
s 标识小数位
使用场景: 一般金额字段、汇率、利率等字段为了保证小数点精度,都使用 Decimal进行存储。
字符串
1)String
字符串可以任意长度的。它可以包含任意的字节集,包含空字节。
2)FixedString(N)
固定长度 N 的字符串,N 必须是严格的正自然数。当服务端读取长度小于 N 的字符串时候,通过在字符串末尾添加空字节来达到 N 字节长度。 当服务端读取长度大于 N 的字符串时候,将返回错误消息。
与 String 相比,极少会使用 FixedString,因为使用起来不是很方便。
使用场景:名称、文字描述、字符型编码。 固定长度的可以保存一些定长的内容,比如一些编码,性别等但是考虑到一定的变化风险,带来收益不够明显,所以定长字符串使用意义有限。
枚举类型
包括 Enum8 和 Enum16 类型。Enum 保存 ‘string’= integer 的对应关系。
Enum8 用 ‘String’= Int8 对描述。
Enum16 用 ‘String’= Int16 对描述。
用法演示
创建一个带有一个枚举 Enum8(‘hello’ = 1, ‘world’ = 2) 类型的列
CREATE TABLE t_enum
(
x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog;
这个 x 列只能存储类型定义中列出的值:‘hello’或’world’
hadoop113 :) INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello');
然后进行查询
hadoop113 :) select * from t_enum;
SELECT *
FROM t_enum
Query id: 99231044-3186-4734-9b11-26c81083e054
┌─x─────┐
│ hello │
│ world │
│ hello │
└───────┘
3 rows in set. Elapsed: 0.006 sec.
如果尝试保存任何其他值,ClickHouse 抛出异常
hadoop113 :) insert into t_enum values('a')
...
Code: 36. DB::Exception: Unknown element 'a' for enum: data for INSERT was parsed from query
...
如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型
hadoop113 :) SELECT CAST(x, 'Int8') FROM t_enum;
┌─CAST(x, 'Int8')─┐
│ 1 │
│ 2 │
│ 1 │
└─────────────────┘
使用场景:对一些状态、类型的字段算是一种空间优化,也算是一种数据约束。但是实际使用中往往因为一些数据内容的变化增加一定的维护成本,甚至是数据丢失问题。所以谨慎使用。
时间类型
目前 ClickHouse 有三种时间类型
* Date 接受年-月-日的字符串比如 ‘2019-12-16’
* Datetime 接受年-月-日 时:分:秒的字符串比如 ‘2019-12-16 20:50:10’
* Datetime64 接受年-月-日 时:分:秒.亚秒的字符串比如‘2019-12-16 20:50:10.66’
日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。
数组
Array(T):由 T 类型元素组成的数组。
T 可以是任意类型,包含数组类型。 但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。例如,不能在 MergeTree 表中存储多维数组。
/* 创建数组方式 1,使用 array 函数array(T),其中toTypeName是将列的类型获取到 */
hadoop102 :) SELECT array(1, 2) AS x, toTypeName(x);
┌─x─────┬─toTypeName(array(1, 2))─┐
│ [1,2] │ Array(UInt8) │
└───────┴─────────────────────────┘
/* 创建数组方式 2:使用方括号[] */
hadoop102 :) SELECT [1, 2] AS x, toTypeName(x);
┌─x─────┬─toTypeName(array(1, 2))─┐
│ [1,2] │ Array(UInt8) │
└───────┴─────────────────────────┘
空值Nullable
非常不建议使用Nullable,因为其几乎总是对性能产生负面影响,因此在设计数据库时非要存空值的话,建议转成对应类型的一个特殊值,例如Int类型的-1等,能不用Nulltable就不用。
还有很多数据结构,可以参考官方文档:https://clickhouse.yandex/docs/zh/data_types/
版权声明
本文为[魔笛Love]所创,转载请带上原文链接,感谢
https://blog.csdn.net/clearlxj/article/details/121771352
边栏推荐
- Document operation II (5000 word summary)
- Change the password after installing MySQL in Linux
- STM32__ 03 - beginner timer
- Calculate pie chart percentage
- VLAN高级技术,VLAN聚合,超级Super VLAN ,Sub VLAN
- ∑GL-透视投影矩阵的推导
- MySQL restores data through binlog file
- VLAN advanced technology, VLAN aggregation, super VLAN, sub VLAN
- SPC introduction
- 博士申请 | 厦门大学信息学院郭诗辉老师团队招收全奖博士/博后/实习生
猜你喜欢
Change the password after installing MySQL in Linux
ACL 2022 | dialogved: a pre trained implicit variable encoding decoding model for dialogue reply generation
Milvus 2.0 détails du système d'assurance de la qualité
1-4 configuration executable script of nodejs installation
Nacos + aspnetcore + Ocelot actual combat code
JS, entries(), keys(), values(), some(), object Assign() traversal array usage
Installing labellmg tutorial in Windows
English | day15, 16 x sentence true research daily sentence (clause disconnection, modification)
Feign report 400 processing
CentOS MySQL multi instance deployment
随机推荐
杂文 谈谈古典的《拆掉思维里的墙》
Paging SQL
Expression "func" tSource, object "to expression" func "tSource, object" []
扫码登录的原理你真的了解吗?
Calculate pie chart percentage
True math problems in 1959 college entrance examination
Talk about browser cache control
【题解】[SHOI2012] 随机树
织梦DEDECMS安全设置指南
AIOT产业技术全景结构-数字化架构设计(8)
Bottom processing of stack memory in browser
MySQL master-slave configuration under CentOS
Multithreaded @ async thread pool
Get the column name list of the table quickly in Oracle
Path environment variable
Baidu Map 3D rotation and tilt angle adjustment
Grpc gateway based on Ocelot
Milvus 2.0 質量保障系統詳解
Tencent resolves the address according to the IP address
Further optimize Baidu map data visualization