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://xiahunao.cn/news/2780496.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

学习Android的第十天

目录 Android CheckBox 复选框 获得选中的 CheckBox 的值 自定义点击效果 改变文字与选择框的相对位置 修改文字与选择框的距离 Android ToggleButton 开关按钮 改变 ToggleButton 的状态和文本 Android Switch 开关 改变 Switch 的状态和文本 Android CheckBox 复选框…

Python 3 中使用 pandas 和 Jupyter Notebook 进行数据分析和可视化

简介 Python 的 pandas 包用于数据操作和分析,旨在让您以直观的方式处理带标签或关联数据。 pandas 包提供了电子表格功能,但由于您正在使用 Python,因此它比传统的图形电子表格程序要快得多且更高效。 在本教程中,我们将介绍如…

深入解析大型数据中心云平台的网络技术与实践

最简单的总结 SDN主流选择了OverLay。虚拟集群的规模(非物理机所能比拟) 使得Vxlan的组播传播( 虚拟机构成的集群包含的 MAC 地址数量往往多一两个数量级 MAC地址表 )对网络设备性能要求巨大(你不可能每个交换机都买核心交换机一样的配置吧)…

ZigBee学习——在官方例程实现组网

✨Z-Stack版本:3.0.2 ✨IAR版本:10.10.1 ✨这篇博客是在善学坊BDB组网实验的基础上进行完善,并指出实现的过程中会出现的各种各样的问题! 善学坊教程地址: ZigBee3.0 BDB组网实验 文章目录 一、基础工程选择二、可能遇…

力扣刷题之旅:高阶篇(一)—— 并查集的应用

力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。 --点击进入刷题地址 引言 在算法的世界中,并查集是一种非常高效且实用的数…

PySQLRecon:一款功能强大的MSSQL安全测试工具

关于PySQLRecon PySQLRecon是一款功能强大的MSSQL安全测试工具,该工具基于SQLRecon实现其功能,可以帮助广大红队研究人员针对MSSQL执行攻击性安全测试。 环境配置 由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Pyt…

微软和苏黎世联邦理工学院开源SliceGPT创新压缩技术节省大量部署资源;OpenAI成立儿童安全团队,防AI误用

🦉 AI新闻 🚀 微软和苏黎世联邦理工学院开源SliceGPT创新压缩技术节省大量部署资源 摘要:微软和苏黎世联邦理工学院研究人员开源了SliceGPT,通过对大模型的权重矩阵进行压缩切片,实现了模型紧缩,节省了部…

Netty应用(六) 之 异步 Channel

目录 12.Netty异步的相关概念 12.1 异步编程的概念 12.2 方式1:主线程阻塞,等待异步线程完成调用,然后主线程发起请求IO 12.3 方式2:主线程注册异步线程,异步线程去回调发起请求IO 12.4 细节注释 12.5 异步的好处…

《UE5_C++多人TPS完整教程》学习笔记10 ——《P11 设置加入游戏会话(Setup for Joining Sessions)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P11 设置加入游戏会话(Setup for Joining Sessions)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主&…

阿里云服务器带宽计费模式是什么?怎么选择?

阿里云服务器带宽计费模式分为“按固定带宽”和“按使用流量”,有什么区别?按固定带宽是指直接购买多少M带宽,比如1M、5M、10M、100M等,阿里云直接分配用户所购买的带宽值,根据带宽大小先付费再使用;按使用…

leetcode(矩阵)74. 搜索二维矩阵(C++详细解释)DAY7

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中…

数学实验第三版(主编:李继成 赵小艳)课后练习答案(八)(4)

实验八:近似计算 练习四 1.自己设置一种计算欧拉常数近似值的方法,看你对欧拉常数的计算能精确到小数点后多少位? 从示例7的图8.5我们已经得知,只要求出每个小矩形中在函数y1/x以上的部分的面积之和,我们就可以得知…

【后端高频面试题--SpringBoot篇】

🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 这里写目录标题 1.什么是SpringBoot?它的主要特点是什么?2.列举一些Spri…

【java】11:IDEA常用快捷键+包

1. IDEA 常用快捷键 删除当前行, 默认是 ctrl Y 自己配置 ctrl d复制当前行, 自己配置 ctrl alt 向下光标补全代码 alt /添加注释和取消注释 ctrl / 【第一次是添加注释,第二次是取消注释】导入该行需要的类 先配置 auto import , 然后使用 altenter 即可快速…

【leetcode热题100】子集 II

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1: 输入:nums [1,2,2] 输出…

极狐GitLab 使用阿里云作为 OmniAuth 身份验证 provider

使用阿里云作为 OmniAuth 身份验证 provider 您可以启用阿里云 OAuth 2.0 OmniAuth provider并使用您的阿里云账户登录极狐GitLab。 创建阿里云应用 登录阿里云平台,在上面创建一个应用。阿里云会生成一个 client ID and secret key 供您使用。 登录到阿里云平台…

模型 AARRR(获取、激活、留存、收益、推荐)

系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。用户增长五环。 1 模型 AARRR(获取、激活、留存、收益、推荐)的应用 1.1 抖音的AARRR模型应用 抖音是一款非常成功的应用程序,它在用户获取、用户激活、用户留存、收入获取和用户…

C++新特性“CPU优化对齐”

哈喽 各位读者伙伴大家好 本篇文章讲一下C新特性 alignas&alignof 在这之前 我们大家应该先了解一下数据对齐的问题 什么是数据对齐问题呢? 以下是两个结构体在内存中的分布图: 为什么要数据对齐呢? 首先是CPU 电脑中的CPU(单核或者多核…

mac docker 宿主机和容器间网络打通

动因 是这样,笔者最近满怀欣喜入手Docker,看着各种文章命令都是不断点头称道:“嗯嗯,不错不错”,在接下来终于准备大干一场的时候碰壁了,主要情况是说在Mac中跑了第一把的时候发现碰到,虚拟机和宿主机居然…

LV.23 D1 ARM体系结构概述 学习笔记

一、必须要了解的ARM知识点 1、ARM公司简介 ARM(Advanced RISC Machines)有三种含义: 它是一个公司的名称、它是一类微处理器的通称、它是一种技术的名称。 2、ARM处理器家族 早先经典处理器 包括ARM7、ARM9、ARM11家族。 Corte…