ClickHouse--03--数据类型

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 数据类型
    • 1. Int
    • 2.Float
        • toFloat32(...) 用来将字符串转换成 Float32 类型的函数
        • toFloat64(...) 用来将字符串转换成 Float64 类型的函数
    • 3.Decimal
        • toDecimal32(value,S):将字符串 value 转换为 Decimal32 类型,小数点后有 S 位。
        • toTypeName(字段):获取字段的数据类型函数。
    • 4.String
    • 5.FixedString
        • toFixedString(value,N):将字符串转换为 N 位长度,N 不能小于 value 字符串实际长度。
    • 6.UUID
        • generateUUIDv4()随机生成一个 32 位的 UUID。
    • 7.Date
        • now() : 获取当前天日期,返回格式:yyyy-MM-dd HH:mm:ss
        • toDate(value) : 将字符串转成 Date,只支持 yyyy-MM-dd 格式。
    • 8.DateTime
        • toDateTime(DateTimeValue) : 将 字 符 串 转 成 DateTime , 只 支 持 yyyy-MM-dd HH:MI:SS。
        • toDateTime(DateTimeValue,时区) :同上,支持将数据转换为对应时区时间。
    • 9.DateTime64
        • toDateTime64(timeStr,precision):将字符串转成 DateTime64,精度为 precision。支持 yyyy-MM-dd HH:MI:SS.SSS 时间格式。
        • toDateTime64(timeStr,precision,timezone):同上,只是可以将时间转换为对应时区时间。
    • 10.布尔类型
    • 11.枚举类型 Enum
    • 12.Nullable
    • 13 .数组类型 Array(T)
    • 14.Tuple 类型
    • 15 .嵌套类型 Nested
    • 16.Domain


数据类型

ClickHouse 提供了许多数据类型,它们可以划分为基础类型、复合类型和特殊类型。我们可以在 system.data_type_families 表中检查数据类型名称以及是否区分大小写。这个表中存储了 ClickHouse 支持的所有数据类型。

在这里插入图片描述
下面介绍下常用的数据类型,ClickHouse 与 Mysql、Hive 中常用数据类型的对比图如下:
在这里插入图片描述

1. Int

  • ClickHouse 中整形分为 Int8、Int16、Int32、Int64 来表示整数不同的取值范围,其末尾数字正好代表占用字节的大小(8 位=1字节),整形又包含有符号整形和无符号整形,他们写法上的区别为无符号整形前面加“U”表示。

在这里插入图片描述
在这里插入图片描述

2.Float

  • 我们建议使用整数方式来存储数据,因为浮点类型数据计算可能导致四舍五入的误差。
    浮点类型包含单精度浮点数和双精度浮点数。
    在这里插入图片描述
  • Float32 从小数点后第 8 位起会发生数据溢出。

在这里插入图片描述

示例

toFloat32(…) 用来将字符串转换成 Float32 类型的函数
toFloat64(…) 用来将字符串转换成 Float64 类型的函数

在这里插入图片描述
在这里插入图片描述

3.Decimal

  • 有符号的定点数,可在加、减和乘法运算过程中保持精度。ClickHouse 提供了Decimal32、Decimal64、Decimal128、Decimal256 几种精度的定点数,支持几种写法:
    在这里插入图片描述
    在这里插入图片描述
    另外,Decimal 数据在进行四则运算时,精度(总位数)和规模(小数点位数)会发
    生变化,具体规则如下:
    在这里插入图片描述
    示例:
toDecimal32(value,S):将字符串 value 转换为 Decimal32 类型,小数点后有 S 位。
toTypeName(字段):获取字段的数据类型函数。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.String

  • 字符串可以是任意长度的。
  • 它可以包含任意的字节集,包含空字节
  • 因此,字符串类型可以代替其他 DBMSs 中的 VARCHAR、BLOB、CLOB 等类型。

5.FixedString

固定长度 N 的字符串(N 必须是严格的正自然数),一般在明确字符串长度的场景下使用,可以使用下面的语法对列声明为 FixedString 类型:
在这里插入图片描述

  • 当向 ClickHouse 中插入数据时,如果字符串包含的字节数少于 N ,将对字符串末尾进行空字节填充。如果字符串包含的字节数大于 N,将抛出 Too large value for FixedString(N)异常
  • 当做数据查询时,ClickHouse 不会删除字符串末尾的空字节。 如果使用 WHERE 子句,则须要手动添加空字节以匹配 FixedString 的值,新版本后期不需要手动添加。

示例:

toFixedString(value,N):将字符串转换为 N 位长度,N 不能小于 value 字符串实际长度。

在这里插入图片描述

在这里插入图片描述

6.UUID

UUID 是一种数据库常见的主键类型,在 ClickHouse 中直接把它作为一种数据类型。

  • UUID 共有 32 位,它的格式为 8-4-4-4-12
  • 如果在插入新记录时未指定 UUID 列值,则UUID 值将用 0 来填充(00000000-0000-0000-0000-000000000000)。
  • UUID 类型不支持算术运算、聚合函数 sum 和 avg

示例

generateUUIDv4()随机生成一个 32 位的 UUID。

在这里插入图片描述
在这里插入图片描述

7.Date

  • Date 只能精确到天,用两个字节存储,表示从 1970-01-01(无符号)到当前的日期 值。日期中没有存储时区信息,不能指定时区。

示例:

now() : 获取当前天日期,返回格式:yyyy-MM-dd HH:mm:ss
toDate(value) : 将字符串转成 Date,只支持 yyyy-MM-dd 格式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.DateTime

DateTime 精确到秒,可以指定时区。

  • 用四个字节(无符号的)存储 Unix 时间戳。允许存储与日期类型相同的范围内的值。最小值为 0000-00-00 00:00:00,时间戳类型值精确到秒。
  • 时区使用启动客户端或服务器时的系统时区。默认情况下,客户端连接到服务的时候会 使用服务端时区。您可以通过启用客户端命令行选项–use_client_time_zone 来设 置使用客户端时区

示例:

toDateTime(DateTimeValue) : 将 字 符 串 转 成 DateTime , 只 支 持 yyyy-MM-dd HH:MI:SS。
toDateTime(DateTimeValue,时区) :同上,支持将数据转换为对应时区时间。

在这里插入图片描述
在这里插入图片描述

9.DateTime64

DateTime64 精确到毫秒和微秒,可以指定时区。在内部,此类型以 Int64 类型将数据存储。时间刻度的分辨率由 precision 参数确定。

  • 此外,DateTime64 类型可以像存储其他数据列一样存储时区信息,时区会影响 DateTime64 类型的值如何以文本格式显示,以及如何解析以字符串形式指定的时间数据 (‘2020-01-01 05:00:01.000’)。时区信息不存储在表的行中,而是存储在列的元数据中。
    在这里插入图片描述
    示例:
toDateTime64(timeStr,precision):将字符串转成 DateTime64,精度为 precision。支持 yyyy-MM-dd HH:MI:SS.SSS 时间格式。
toDateTime64(timeStr,precision,timezone):同上,只是可以将时间转换为对应时区时间。

在这里插入图片描述
在这里插入图片描述

10.布尔类型

  • ClickHouse 中没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0或 1。具体参照枚举类型。

11.枚举类型 Enum

枚举类型通常在定义常量时使用,ClickHouse 提供了 Enum8 和 Enum16 两种枚举类型。

  • Enum 保存’string’=integer 的对应关系。在 ClickHouse 中,尽管用户使用的是字符串常量,但所有含有 Enum数据类型的操作都是按照包含整数的值来执行。这在性能方面比使用 String 数据类型更有效。
  • Enum8 和 Enum16 分别对应’String’=Int8 和’String’=Int16,Enum8 类型的每个值范围是-128 … 127,Enum16 类型的每个值范围是-32768 … 32767,所有的字符串或者数字都必须是不一样的,允许存在空字符串,Enum 类型中数字可以是任意顺序,顺序并不重要。
  • 向 Enum 字段中插入值时,可以插入枚举的字符串值也可以插入枚举对应的 Int 值, 建议插入对应的字符串值,这样避免插入对应的 Int值不在 Enum 枚举集合中再次查询表 时报错。定义了枚举类型值之后,不能写入其他值的数据,写入的值不在枚举集合中就会抛 出异常。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

12.Nullable

  • Nullable 类 型 只 能 与 基 础 数 据 类 型 搭 配 使 用 , 表 示 某 个 类 型 的 值 可 以 为NULL,Nullable(Int8)表示可以存储Int8类型的值,没有值时存NULL。使用Nullable 需要注意:Nullable 类型的字段不能作为索引字段,尽量避免使用 Nullable 类型,因 为字段被定义为 Nullable 类型后会额外生成[Column].null.bin 文件保存 Null 值,增加开销,比普通列消耗更多的存储空间。
    在这里插入图片描述
    在这里插入图片描述

13 .数组类型 Array(T)

  • Array(T),由 T 类型元素组成的数组。T 可以是任意类型,包含数组类型。但不推 荐使用多维数组,ClickHouse 对多维数组的支持有限。例如,不能在 MergeTree 表中存储多维数组。
  • 数组的定义方式有两种:Array(T),[1,2,3… …],数组类型里面的元素必须具 有相同的数据类型,否则会报异常。另外,需要注意的是,数组元素中如果存在 Null 值, 则元素类型将变为 Nullable。
  • 从数组中查询获取值使用 xx[1|2… …],直接使用中括号获取值,下标从 1 开始
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

14.Tuple 类型

元组类型有 1~n 个元素组成,每个元素允许设置不同的数据类型,且彼此之间不要求兼容。与数组类似,元组也可以使用两种方式定义:tuple(1,‘hello’,12.34)或者直接写(1,‘hello’,45.67),元组中可以存储多种数据类型,但是要注意数据类型的顺序。
在这里插入图片描述
在这里插入图片描述

15 .嵌套类型 Nested

ClickHouse 支持嵌套数据类型(Nested),可以为一个表定义一个或者多个嵌套数据类型字段,但是每个嵌套字段只支持一级嵌套,即嵌套字段内不能继续使用嵌套类型。嵌套一般用来表示简单的级联关系,嵌套本质上是一个多维数组,嵌套类型中的每个数组的长度必须相同。目前,Nested 类型支持很局限,MergeTree 引擎中不支持 Nested 类型。
在这里插入图片描述
在这里插入图片描述

16.Domain

Domain 类型是特定实现的类型,目前支持 IPv4 和 IPv6 两类,本质上他们是对整形和字符串的进一步封装,IPv4 类型基于 UInt32 封装,IPv6 基于 FixedString(16)封装。

  • 出于便捷性的考量,例如:IPv4 类型支持格式检查,格式错误的 IP 无法被写入。出于性能的考量,IPv4 和 IPv6 相对于 String 更加紧凑,占用的空间更小,查询性能更快。
  • 在使用 Domain 时需要注意,虽然表面看起来与 String 一样,但是 Domain类型并不是字符串,也不支持隐式自动转换成字符串,如果需要返回 IP 的字符串形式,需要调用函数 IPv4NumToString()和IPv6NumToString()显式实现。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

蓝桥杯——第 5 场 小白入门赛(c++详解!!!)

文章目录 1 十二生肖基本思路: 2 欢迎参加福建省大学生程序设计竞赛基本思路:代码: 3 匹配二元组的数量基本思路:代码: 4 元素交换基本思路:代码: 5 下棋的贝贝基本思路:代码: 6 方程…

推荐在线图像处理程序源码

对于喜爱图像编辑的朋友们来说,Photoshop无疑是处理照片的利器。然而,传统的Photoshop软件不仅需要下载安装,还对电脑配置有一定的要求,这无疑增加了使用的门槛。 现在,我们为您带来一款革命性的在线PS修图工具——基…

大话设计模式——1.模板方法模式(Template Method Pattern)

定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 例子:比较重大的考试往往有A、B两套试卷,其中一套出现问题可以立马更换另一套。 定义基…

java Servlet 云平台教学系统myeclipse定制开发SQLServer数据库网页模式java编程jdbc

一、源码特点 JSP 云平台教学系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助 系统采用serlvet dao bean,系统具有完整的源代码和数据库 ,系统主要采用B/S模式开发。开发 环境为TOMCAT7.0,Myeclipse8.5开发,数据…

使用 IDEA 开发一个简单易用的 SDK

目录 一、什么是 SDK 二、为什么要开发 SDK 三、开发 SDK 的详细步骤 四、导入 SDK 进行测试 附:ConfigurationProperties 注解的介绍及使用 一、什么是 SDK 1. 定义:软件开发工具包 Software Development Kit 2. 用于开发特定软件或应用程序的工…

[JavaWeb玩耍日记]Maven的安装与使用

目录 一.作用 二.安装 三.使用 2.对项目使用compile命令进行编译,看看新的文件会在哪里产生? 3.需要认识的命令 4.Maven对项目执行不同命令的生命周期特点? 5.如何导入工程外的Maven? 6.如何直观地查看Maven导入了哪些工程或哪些jar包…

Hive SQL编译成MapReduce任务的过程

一、 Hive 底层执行架构 1.1 Hive底层架构 1 )用户接口: Client CLI ( command-line interface )、 JDBC/ODBC(jdbc 访问 hive) 、 WEBUI (浏览器访问 hive ) 2 )元数据: Metas…

WordPress修改所有用户名并发送邮件通知的插件Easy Username Updater

前面跟大家介绍了『如何修改WordPress后台管理员用户名?推荐2种简单方法』一文,但是对于有很多用户的站长来说,操作有点复杂,而且无法发邮件通知对方,所以今天boke112百科向大家推荐一款可以直接在WordPress后台修改所…

HarmonyOS 开发学习笔记

HarmonyOS 开发学习笔记 一、开发准备1.1、了解ArkTs语言1.2、TypeScript语法1.2.1、变量声明1.2.2、条件控制1.2.3、函数1.2.4、类和接口1.2.5、模块开发 1.3、快速入门 二、ArkUI组件2.1、Image组件2.2、Text文本显示组件2.3、TextInput文本输入框组件2.4、Button按钮组件2.5…

【JS逆向三】逆向某某网站的sign参数,并模拟生成仅供学习

逆向日期:2024.02.06 使用工具:Node.js 类型:webpack 文章全程已做去敏处理!!! 【需要做的可联系我】 可使用AES进行解密处理(直接解密即可):AES加解密工具 1、打开某某…

MySQL-运维

一、日志 1.错误日志 错误日志是MySQL中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&#xf…

线性判别分析(LDA)

一、说明 LDA 是一种监督降维和分类技术。其主要目的是查找最能分隔数据集中两个或多个类的特征的线性组合。LDA 的主要目标是找到一个较低维度的子空间,该子空间可以最大限度地区分不同类别,同时保留与歧视相关的信息。 LDA 是受监督的,这意…

EMC学习笔记(二十四)降低EMI的PCB设计指南(四)

降低EMI的PCB设计指南(四) 1.电路板分区2.信号走线2.1 电容和电感串扰2.2 天线2.3 端接和传输线2.4输入端的阻抗匹配 tips:资料主要来自网络,仅供学习使用。 1.电路板分区 电路板分区与电路板平面规划具有相同的基本含义&#x…

PyCharm2023.3.2配置conda环境

重点在于Path to conda这一步,需要找到conda.bat这个文件,PyCharm才能识别出现有的conda环境。

互联网加竞赛 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的行人重识别 该项目较为新颖,适合…

Flink从入门到实践(三):数据实时采集 - Flink MySQL CDC

文章目录 系列文章索引一、概述1、版本匹配2、导包 二、编码实现1、基本使用2、更多配置3、自定义序列化器4、Flink SQL方式 三、踩坑1、The MySQL server has a timezone offset (0 seconds ahead of UTC) which does not match the configured timezone Asia/Shanghai. 参考资…

Structured Streaming

目录 一、概述 (一)基本概念 (二)两种处理模型 (三)Structured Streaming和Spark SQL、Spark Streaming关系 二、编写Structured Streaming程序的基本步骤 (一)实现步骤 &…

人工智能|深度学习——使用多层级注意力机制和keras实现问题分类

代码下载 使用多层级注意力机制和keras实现问题分类资源-CSDN文库 1 准备工作 1.1 什么是词向量? ”词向量”(词嵌入)是将一类将词的语义映射到向量空间中去的自然语言处理技术。即将一个词用特定的向量来表示,向量之间的距离(例…

【 buuctf--刷新过的图片】

前言:这题主要运用到了新的工具F5-steganography由于 java 环境不合适的原因,我不得不重新配java11.0.18。 具体思路:非常帅气的一张图片。。。用 binwalk,stegsolve,zsteg,exiftool 等工具无果后&#xf…

【Java程序设计】【C00253】基于Springboot的在线考试管理系统(有论文)

基于Springboot的在线考试管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的在线考试系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块:系统登录,管理…