当前位置:网站首页>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
边栏推荐
- Promise (III)
- PHP efficiently reads large files and processes data
- Get the column name list of the table quickly in Oracle
- Go language, array, string, slice
- 深入了解3D模型相关知识(建模、材质贴图、UV、法线),置换贴图、凹凸贴图与法线贴图的区别
- Zhimeng dedecms security setup Guide
- Further optimize Baidu map data visualization
- MySQL modify master database
- MySQL master-slave configuration under CentOS
- First knowledge of go language
猜你喜欢
Nodejs installation and environment configuration
MySQL master-slave replication
Do you really understand the principle of code scanning login?
Scope and scope chain in JS
Further study of data visualization
Node access to Alipay open platform sandbox to achieve payment function
TypeError: set_figure_params() got an unexpected keyword argument ‘figsize‘
自定义my_strcpy与库strcpy【模拟实现字符串相关函数】
Derivation of Σ GL perspective projection matrix
ByteVCharts可视化图表库,你想要的我都有
随机推荐
Milvus 2.0 质量保障系统详解
聊一聊浏览器缓存控制
Grpc gateway based on Ocelot
MySQL master-slave replication
【生活中的逻辑谬误】稻草人谬误和无力反驳不算证明
◰GL-着色器处理程序封装
JSON deserialize anonymous array / object
How does flash cache data in memory?
El cascade and El select click elsewhere to make the drop-down box disappear
Knowledge points and examples of [seven input / output systems]
True math problems in 1959 college entrance examination
[markdown notes]
Use between nodejs modules
Variable length parameter__ VA_ ARGS__ Macro definitions for and logging
Lock锁
1-3 components and modules
Mock test using postman
Baidu Map Case - modify map style
AIOT产业技术全景结构-数字化架构设计(8)
文件操作《二》(5000字总结篇)