三、数据类型

数据类型

  • 一、整型
  • 二、 浮点型
  • 三、Decimal
  • 四、布尔型
  • 五、字符串
  • 六、枚举类型
  • 七、时间类型
    • 1.Date类型
    • 2.DateTime类型
  • 八、数组
  • 九、其他数据类型
  • 十、默认值

一、整型

  • 固定长度的整型有两种:
    • 有符号整型(-2n-1~2n-1-1)
  • 使用场景: 个数、数量、也可以存储型 id。

符号整型

数据类型取值范围
Int8-128 ~ 127
Int16-32768 ~ 32767
Int32-2147483648 ~ 2147483647
Int64-9223372036854775808 ~ 223372036854775807

无符号整型

数据类型取值范围
Int80 ~ 255
Int160 ~ 65535
Int320 ~ 4294967295
Int640 ~ 18446744073709551615

二、 浮点型

  • ClickHouse支持Float32和Float64两种浮点类型
  • 建议尽可能以整数形式存储数据。例如,将固定精度的数字转换为整数值,如时间用毫秒为单位表示,因为浮点型进行计算时可能引起四舍五入的误差。
-- 取值范围
select 1-0.9 --的结果是0.09999999999999998
select 1/0 --的结果是 inf(正无穷)
select -1/0 --的结果是 -inf(负无穷)
select 0/0 --的结果是 nan(非数字)

三、Decimal

  • 有符号的浮点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会
    被丢弃(不舍入)。
  • 使用场景: 一般金额字段、汇率、利率等字段为了保证小数点精度,都使用 Decimal
    进行存储。
  • 数据采用与自身位宽相同的有符号整数存储。这个数在内存中实际范围会高于上述范围,从 String 转换到十进制数的时候会做对应的检查。由于现代CPU不支持128位数字,因此 Decimal128 上的操作由软件模拟。
    • 所以 Decimal128 的运算速度明显慢于 Decimal32/Decimal64。
  • Decimal(P,S),P参数指的是精度,有效范围:[1:38],决定可以有多少个十进制数字(包括分数);S参数指的是小数长度,有效范围:[0:P],决定数字的小数部分中包含的小数位数。
数据类型十进制的范围
Decimal32(S)Decimal32(S): ( -1 * 10^(9 - S), 1 * 10^(9 - S) )
Decimal64(S)Decimal64(S): ( -1 * 10^(18 - S), 1 * 10^(18 - S) )
Decimal128(S)Decimal128(S): ( -1 * 10^(38 - S), 1 * 10^(38 - S) )

四、布尔型

  • ClickHouse中没有定义布尔类型,可以使用UInt8类型,取值限制为0或1。

五、字符串

  • ClickHouse中的String类型没有编码的概念。字符串可以是任意的字节集,按它们原本的方式进行存储和输出。若需存储文本,建议使用UTF-8编码。至少,如果你的终端使用UTF-8,这样读写就不需要进行任何的转换。对不同的编码文本ClickHouse会有不同处理字符串的函数。比如,length函数可以计算字符串包含的字节数组的长度,然而lengthUTF8函数是假设字符串以 UTF-8编码,计算的是字符串包含的Unicode字符的长度。
  • 使用场景:名称、文字描述、字符型编码。 固定长度的可以保存一些定长的内容,比
    如一些编码,性别等但是考虑到一定的变化风险,带来收益不够明显,所以定长字符串使用
    意义有限。
  • 与 String 相比,极少会使用 FixedString,因为使用起来不是很方便。
数据类型十进制的范围
String字符串可以任意长度的。它可以包含任意的字节集,包含空字节。ClickHouse中的String类型可以代替其他DBMS中的VARCHAR、BLOB、CLOB等类型。
FixedString(N)固定长度 N 的字符串,N必须是严格的正自然数。当服务端读取长度小于N的字符串时候,通过在字符串末尾添加空字节来达到N字节长度。当服务端读取长度大于N的字符串时候,将返回错误消息。与String相比,极少会使用FixedString,因为使用起来不是很方便。
1)在插入数据时,如果字符串包含的字节数小于N,将对字符串末尾进行空字节填充。如果字符串包含的字节数大于N,将抛Too large value for FixedString(N)异常。
2)在查询数据时,ClickHouse不会删除字符串末尾的空字节。如果使用WHERE子句,则须要手动添加空字节以匹配FixedString的值(例如:where a=’abc\0’)。
注意,FixedString(N)的长度是个常量。仅由空字符组成的字符串,函数length返回值为N,而函数empty的返回值为1。

六、枚举类型

  • ClickHouse支持Enum8和Enum16两种枚举类型。Enum保存的是’string’=integer的对应关系。在 ClickHouse中,尽管用户使用的是字符串常量,但所有含有Enum 数据类型的操作都是按照包含整数的值来执行,这在性能方面比使用String数据类型更有效。
  • 在ORDER BY、GROUP BY、IN、DISTINCT等函数中,Enum 的行为与相应的数字作用相同。例如,按数字排序。对于等式运算符和比较运算符,Enum 的工作机制与它们在底层数值上的工作机制相同。
  • Enum中的字符串和数值都不允许为NULL,当声明表字段时使用Nullable类型包含Enum类型时,在插入数据时允许NULL值。Enum类型提供toString函数来返回字符串值;toT函数可以转换为数值类型,T表示一个数值类型,如果T恰好对应Enum底层的数值类型则这个转换是0成本的。Enum类型可以使用Alter无成本修改对应集合的值,可以使用Alter来添加或删除Enum的成员(出于安全保障,如果改变之前用过的Enum会报异常),也可以用Alter将Enum8转换为Enum16或反之。
  • 使用场景:对一些状态、类型的字段算是一种空间优化,也算是一种数据约束。但是实
    际使用中往往因为一些数据内容的变化增加一定的维护成本,甚至是数据丢失问题。所以谨慎使用。
数据类型String=Integer对应关系取值范围
Enum8‘String’= Int8-128 ~ 127
Enum16‘String’= Int16-32768 ~ 32767
  • 演示
# 创建一个带有一个枚举 Enum8('hello' = 1, 'world' = 2) 类型的列
CREATE TABLE t_enum
(x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog;# 插入数据
INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello');# 如果尝试保存任何其他值,ClickHouse 抛出异常
insert into t_enum values('a')# 如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型
SELECT CAST(x, 'Int8') FROM t_enum;

七、时间类型

1.Date类型

  • ClickHouse支持Date类型,这个日期类型用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。允许存储从 Unix 纪元开始到编译阶段定义的上限阈值常量(目前上限是2106年,但最终完全支持的年份为2105),最小值输出为0000-00-00。日期类型中不存储时区信息。

2.DateTime类型

  • ClickHouse支持DataTime类型,这个时间戳类型用四个字节(无符号的)存储Unix时间戳。允许存储与日期类型相同范围内的值,最小值为0000-00-00 00:00:00。时间戳类型值精确到(不包括闰秒)
  • 注意:使用客户端或服务器时的系统时区,时间戳是从文本转换为二进制并返回。在文本格式中,有关夏令时的信息会丢失。
    • 默认情况下,客户端连接到服务的时候会使用服务端时区。您可以通过启用客户端命令行选项–use_client_time_zone 来设置使用客户端时间。
    • 因此,在处理文本日期时(例如,在保存文本转储时),请记住在夏令时更改期间可能存在歧义,如果时区发生更改,则可能存在匹配数据的问题。

八、数组

  • ClickHouse支持Array(T)类型,T可以是任意类型,包括数组类型,但不推荐使用多维数组,因为对其的支持有限(MergeTree引擎表不支持存储多维数组)。T要求是兼容的数据类型,因为ClickHouse会自动检测并根据元素内容计算出存储这些数据的最小数据类型,如:不能使用array(1,’hello’)。
  • 案例
#  创建数组方式 1,使用 array 函数
SELECT array(1, 2) AS x, toTypeName(x);
# 创建数组方式 2:使用方括号
SELECT [1, 2] AS x, toTypeName(x);

九、其他数据类型

  • 官网地址

十、默认值

  • 在ClickHouse中,对于某些类型的列,在没有显示插入值时,会自动填充默认值处理。
数据类型String=Integer对应关系
Int和Uint0
String空字符串
Array空数组
Date0000-00-00
DateTime0000-00-00 00:00:00
NULL不支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程状态

广义概念: 从广义上来讲,进程分为新建、运行、阻塞、挂起、退出五个状态,其中新建和退出两个状态可以直接理解字面意思。 运行状态: 这里涉及到运行队列的概念,CPU在读取数据的时候,需要把内存中的进程放入…

Word docx文件重命名为zip文件,解压后直接查看和编辑

一个不知道算不算冷的知识[doge]: docx格式的文件本质上是一个ZIP文件 当把一个.docx文件重命名为.zip文件并解压后,你会发现里面包含了一些XML文件和媒体文件,它们共同构成了Word文档的内容和格式。 例如,word/document.xml文件…

C++ STL string详解

1. string简介 C语言中,可以用字符数组来存储字符串,如: char ch[] "hello world"; C中,可以使用string类对象来存储字符串,使用起来比C语言中的字符数组要方便得多,而且不用考虑容量的问题。…

Leetcode-103. 二叉树的锯齿形层序遍历

这个年和树过不去啦啦啦! 题目: 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1&…

Linux设置jar包开机自启动

步骤 1、新建jar包自启文件 sudo vi /etc/init.d/jarSysInit.sh 按i键进入编辑模式输入以下内容: export JAVA_HOME/home/jdk/jdk-11.0.22 export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar export PATH$PATH:$JAVA_…

2023年

我记得 自打 17 年以来一路如开挂一样。 高开、架构、项目、负责人、领导者。 学习、创业加思考,车子、房子加贷款。 我跑着, 飞着,仿佛耳朵里只剩下风的声音。眼前的一切也象开了 3x 倍加速一样变化飞快。 转变的开始 去年感受到了最大…

跟着pink老师前端入门教程-day26

一、计算机编程基础 (一)编程语言 1、编程 编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 计算机程序:就是计算机所执行的一系列的指令集合,而程序全部…

二叉搜索树题目:递增顺序搜索树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 后记 题目 标题和出处 标题:递增顺序搜索树 出处:897. 递增顺序搜索树 难度 3 级 题目描述…

P1498 南蛮图腾题解

题目 给定一个正整数n,参考输出样例,输出图形。 输入输出格式 输入格式 每个数据输入一个正整数n,表示图腾的大小(此大小非彼大小) 输出格式 这个大小的图腾 输入输出样例 输入样例 2 输出样例 /\/__\/\ /\…

HTTP缓存技术

大家好我是苏麟 , 今天说说HTTP缓存技术 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP缓存技术 HTTP 缓存有哪些实现方式? 对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响…

【mysql】数据约束

一、数据约束: 什么是约束? 为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。 数据库完整性约…

Windows注册表参数 %1 和 %L 和 %V 的区别

Windows注册表参数 %1 和 %L 和 %V 的区别 Windows注册表参数 %1、%L和%V的区别如下: %1表示文件路径,是当前文件的路径,可以是短路径或长路径。%L表示文件长路径,是当前文件的固定长路径。%V表示文件路径,在没有动作…

84 CTF夺旗-PHP弱类型异或取反序列化RCE

目录 案例1:PHP-相关总结知识点-后期复现案例2:PHP-弱类型对比绕过测试-常考点案例3:PHP-正则preg_match绕过-常考点案例4:PHP-命令执行RCE变异绕过-常考点案例5:PHP-反序列化考题分析构造复现-常考点涉及资源&#xf…

【HTML】过年不能放烟花,那就放电子烟花

闲谈 大家回家过年可能都多多少少放过些🧨,但是有些在城市上过年的小伙伴可能就没有机会放鞭炮了。不过没关系,我们懂技术,我们用技术自娱自乐,放电子烟花,总不可能被警长叔叔敲门问候吧。 开干 首先&…

Redis篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、什么是 Redis?二、Redis 与其他 key-value 存储有什么不同?三、Redis 的数据类型?四、使用 Redis 有哪些好处?五、Redis 相比 Memcached 有哪些优势?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住…

Spring 用法学习总结(四)之 JdbcTemplate 连接数据库

🐉目录 9 JdbcTemplate 9 JdbcTemplate Spring 框架对 JDBC 进行了封装,使用 JdbcTemplate 方便实现对数据库操作 相关包: 百度网盘链接https://pan.baidu.com/s/1Gw1l6VKc-p4gdqDyD626cg?pwd6666 创建properties配置文件 💥注意…

分布式文件系统 SpringBoot+FastDFS+Vue.js【二】

分布式文件系统 SpringBootFastDFSVue.js【二】 六、实现上传功能并展示数据6.1.创建数据库6.2.创建spring boot项目fastDFS-java6.3.引入依赖6.3.fastdfs-client配置文件6.4.跨域配置GlobalCrosConfig.java6.5.创建模型--实体类6.5.1.FastDfsFile.java6.5.2.FastDfsFileType.j…

vscode 和 keil协同使用开发stm32程序,超详细教程

vscode 和 keil协同使用开发stm32程序 文章目录 vscode 和 keil协同使用开发stm32程序1. 安装vscode拓展安装chinese插件 2 .安装Mingw3.配置环境变量4. 打开Keil项目 VSCODE 是一款广受好评的代码编辑器, KEIL 是常用的嵌入式开发工具但编程界面简陋。 将两个工具…

npm使用国内淘宝镜像(最新地址)

目录 前言 一、命令配置 二、使用cnpm安装 三、常见包地址 四、总结 往期回顾 前言 我们前端程序员在使用国外的镜像源速度很慢并且容易下载失败,有时候需要尝试多次才有可能下载成功,很麻烦,但是可以切换为国内镜像源,下…

BigDecimal的常用API

BigDecimal用于解决浮点型运算时结果出现失真的问题。 这里0.20.1等于0.3就出现了失真 import java.math.BigDecimal; import java.math.RoundingMode;public class Test {public static void main(String[] args) {//BigDeciaml的使用:解决小数运算失真的问题doub…