当前位置: 首页 > news >正文

【入门篇】ClickHouse 数据类型

文章目录

  • 1. 引言
  • 2. ClickHouse 数据类型
    • 2.1 基本数据类型
      • 2.1.1 整型
      • 2.1.2 浮点型
      • 2.1.3 字符串型
    • 2.2 复合数据类型
      • 2.2.1 数组
      • 2.2.2 枚举类型
      • 2.2.3 元组
      • 2.2.4 Map
      • 2.2.5 Nullable
    • 2.3 特殊数据类型
      • 2.3.1 日期和时间类型
      • 2.3.2 UUID
      • 2.3.3 IP 地址
      • 2.3.4 AggregateFunction
    • 2.4 数据类型的选择和使用
      • 2.4.1 如何选择合适的数据类型
      • 2.4.2 数据类型转换
  • 3. 相似数据类型区别
  • 4. 其他数字类型
    • 4.1. ClickHouse地理位置数据类型
    • 4.2. ClickHouse空值和非空值
    • 4.3. ClickHouse数据类型转换
    • 4.4. ClickHouse数据类型的性能考虑
      • 1. 存储空间影响:
      • 2. 查询性能影响:

在这里插入图片描述

1. 引言

ClickHouse 数据库系统支持多种数据类型,以及复杂的表结构设计。以下是一篇可能的博文的详细目录,这篇博文将介绍 ClickHouse 的数据类型和表的结构设计。

2. ClickHouse 数据类型

数据类型定义使用场景示例
基本数据类型
整型(Int8, Int16, Int32, Int64)存储整数值,支持正负整数存储年龄、统计数量等整数场景年龄:25,浏览次数:1000
浮点型(Float32, Float64)存储小数值,支持不同精度的小数存储价格、评分等需要精确到小数的数据价格:23.5,评分:4.3
字符串型(String, FixedString)存储文本数据,支持可变长度和固定长度的字符串存储名字、地址、描述等文本信息姓名:“张三”,地址:“北京市”
复合数据类型
数组(Array)存储同一类型的多个值存储一篇文章的多个标签、一个订单的多个商品等标签:[“科技”, “教育”]
枚举类型(Enum)存储预定义的一组值,将字符串映射为整数存储性别、订单状态等有限且固定的值性别:男,订单状态:已支付
元组(Tuple)存储固定长度的有序列表,每个元素可以是任意类型存储经纬度、RGB 颜色值等固定长度的组合数据经纬度:(116.4, 39.9)
Map存储键值对存储用户的属性、商品的元数据等用户属性:{“age”: 25, “city”: “北京”}
Nullable存储可能为空的值,为任意类型的数据添加一个表示是否为空的标记存储可能为空的字段,如用户的昵称、商品的优惠价格等昵称:Nullable(“张三”)
特殊数据类型
日期和时间类型(Date, DateTime)存储日期和时间存储用户的注册时间、订单的创建时间等注册时间:2021-08-01
UUID存储唯一标识符,生成全局唯一的随机字符串存储用户的唯一 ID、订单的唯一 ID 等用户ID:550e8400-e29b-41d4-a716-446655440000
IP 地址(IPv4, IPv6)存储 IP 地址存储用户的 IP 地址、服务器的 IP 地址等用户IP:192.168.1.1
AggregateFunction存储聚合函数的状态统计用户的平均活跃时长、计算商品的销售总额等平均活跃时长:5.5 小时

2.1 基本数据类型

2.1.1 整型

整型是整数形式的数据类型,支持正负整数的存储。ClickHouse 支持多种整型,如 Int8, Int16, Int32, Int64 等,每种类型分别支持的数据范围不同。例如,Int8 支持 -128 到 127 的整数,而 Int32 支持 -2147483648 到 2147483647 的整数。根据你的数据大小和需求来选择合适的整数类型。

使用场景:存储年龄、统计数量等整数场景。

2.1.2 浮点型

浮点型是小数形式的数据类型。ClickHouse 提供 Float32 和 Float64 两种浮点数类型,用于存储小数。Float32 支持约 7 位精度的小数,而 Float64 支持约 15 位精度的小数。

使用场景:存储价格、评分等需要精确到小数的数据。

2.1.3 字符串型

字符串型用于存储文本数据。ClickHouse 中的字符串类型包括 String 和 FixedString。String 用于存储可变长度的字符串,FixedString 用于存储固定长度的字符串。

使用场景:存储名字、地址、描述等文本信息。

2.2 复合数据类型

2.2.1 数组

Array 类型用于存储同一类型的多个值。它可以存储任意类型的数据,包括基本类型和复合类型。

使用场景:存储一篇文章的多个标签、一个订单的多个商品等。

2.2.2 枚举类型

Enum 类型用于存储预定义的一组值。它可以将字符串映射为整数,从而节省存储空间,并提高查询效率。

使用场景:存储性别、订单状态等有限且固定的值。

2.2.3 元组

Tuple 类型用于存储固定长度的有序列表。元组中的每个元素可以是任意类型。

使用场景:存储经纬度、RGB 颜色值等固定长度的组合数据。

2.2.4 Map

Map 类型用于存储键值对。它可以方便地查询和更新数据。

使用场景:存储用户的属性、商品的元数据等。

2.2.5 Nullable

Nullable 类型用于存储可能为空的值。它可以为任意类型的数据添加一个表示是否为空的标记。

使用场景:存储可能为空的字段,如用户的昵称、商品的优惠价格等。

2.3 特殊数据类型

2.3.1 日期和时间类型

ClickHouse 提供 Date 和 DateTime 类型,用于存储日期和时间。Date 类型用于存储日期(年月日),DateTime 类型用于存储日期和时间。

使用场景:存储用户的注册时间、订单的创建时间等。

2.3.2 UUID

UUID 类型用于存储唯一标识符。它可以生成全局唯一的随机字符串。

使用场景:存储用户的唯一 ID、订单的唯一 ID 等。

2.3.3 IP 地址

ClickHouse 提供 IPv4 和 IPv6 类型,用于存储 IP 地址。

使用场景:存储用户的 IP 地址、服务器的 IP 地址等。

2.3.4 AggregateFunction

AggregateFunction 类型用于存储聚合函数的状态。它可以方便地进行聚合查询。

使用场景:统计用户的平均活跃时长、计算商品的销售总额等。

2.4 数据类型的选择和使用

2.4.1 如何选择合适的数据类型

选择数据类型时,需要考虑数据的性质、业务的需求和查询的效率等因素。例如,如果数据可能为空,则应该选择 Nullable 类型;如果数据有限并且固定,则可以考虑使用 Enum 类型。

2.4.2 数据类型转换

ClickHouse 提供了一系列的函数,可以在不同的数据类型之间进行转换。例如,可以使用 toString 函数将数字转换为字符串,使用 toInt32 函数将字符串转换为整数。

3. 相似数据类型区别

  1. Int和UInt的差别:Int类型的整数可以是负数,而UInt类型的整数只能是非负的。

  2. Float32和Float64的差别:Float32是单精度浮点数,Float64是双精度浮点数。

  3. String和FixedString的差别:String类型可以存储任意长度的字符串,而FixedString类型则需要在定义时指定字符串的长度。

  4. Date, DateTime, DateTime64的差别:Date类型用于表示日期,DateTime用于表示日期和时间,而DateTime64则提供了更高的时间精度。

  5. Enum8和Enum16的差别:Enum8可以存储最多256个枚举值,而Enum16可以存储最多65536个枚举值。

  6. Tuple和Nested的定义和使用:Tuple类型可以存储一组不同类型的值,而Nested类型则可以存储一组结构相同的数据。

4. 其他数字类型

4.1. ClickHouse地理位置数据类型

  1. Point、LineString、Polygon等类型的定义和使用:

Point:用于表示地球表面上一个点的地理位置。例如:Point(经度, 纬度)Point(30.5, 50.2)

LineString:表示一系列连接的线段,由多个Point构成。例如:LineString(Point(30.5, 50.2), Point(31.5, 51.2), Point(32.5, 52.2))

Polygon:表示一个多边形区域,由多个点组成的环状结构。例如:Polygon((30.5, 50.2), (31.5, 51.2), (32.5, 52.2), (30.5, 50.2)),注意首尾点需相同。

地理位置数据类型的使用场景:适用于存储和查询地理空间信息,例如地图应用、物流、出行等需要进行地理位置分析的场景。

4.2. ClickHouse空值和非空值

  1. Null和NotNull的定义和使用:

Null:表示数据的缺失或未知值,可以在表定义时将某一列指定为 Nullable 类型,例如 Nullable(String)

NotNull:表示不允许存储空值,即数据必须有值。默认情况下,大多数数据类型都是 NotNull。

空值和非空值的使用场景:在某些情况下,数据可能不完整或者不能获取某些字段,可以使用 Nullable 类型存储数据。如果某一列数据总是存在,可以使用 NotNull 类型,这样可以提高查询性能。

4.3. ClickHouse数据类型转换

  1. 如何在不同的数据类型之间进行转换:可以使用CAST函数进行类型转换。例如,将String类型转为Int32类型:CAST('123' AS Int32)

  2. 数据类型转换的注意事项:在进行类型转换时,需要确保原数据能够成功转换为目标类型,否则可能会导致数据丢失或者转换错误。

4.4. ClickHouse数据类型的性能考虑

ClickHouse的数据类型选择对于存储空间和查询性能都有重要影响。在设计数据库架构时,考虑以下性能因素可以优化系统的性能:

1. 存储空间影响:

  • 数据类型大小:不同的数据类型在存储上占据的空间大小不同。选择较小的数据类型可以节省存储空间。例如,使用Int8代替Int32可以将整数存储空间减少为1/4。
  • 压缩:ClickHouse具有强大的数据压缩功能,可以显著减少数据存储的大小。根据数据类型的特性,选择合适的压缩算法和设置可以进一步减少存储空间占用。

2. 查询性能影响:

  • 数据类型的计算复杂度:某些数据类型的计算和操作可能比其他类型更复杂。例如,字符串类型的比较和模式匹配通常比整数类型更耗时。选择计算复杂度较低的数据类型可以提高查询性能。
  • 索引和过滤效率:索引和过滤是查询性能的关键。某些数据类型支持更高效的索引和过滤操作。例如,使用日期类型而不是字符串类型可以更快地进行时间范围查询。
  • 数据类型的顺序性:ClickHouse是一个列式数据库,数据按列存储。某些数据类型具有更好的顺序性,可以提高查询性能。例如,有序的整数类型比无序的字符串类型更易于压缩和查询。

在选择数据类型时,需要综合考虑存储空间、查询性能和数据语义的要求。需要根据具体的应用场景和数据特点进行权衡和测试,以获得最佳的性能和存储效率。

同时,还要注意避免过度优化。在某些情况下,微小的存储空间节省或查询性能提升可能并不值得引入复杂性和额外的开发成本。因此,评估和测试在真实场景下的综合性能表现是十分重要的。

数据类型存储空间占用
UInt81字节
Int81字节
UInt162字节
Int162字节
UInt324字节
Int324字节
UInt648字节
Int648字节
Float324字节
Float648字节
Decimal(M, D)取决于精度和规模(M+D+1)
String根据字符串长度和编码方式
FixedString(N)N字节
Date4字节
DateTime8字节
Enum81字节
Enum162字节
Array(T)根据元素类型和元素数量进行计算
Tuple(T1, T2,…)根据元素类型和元素数量进行计算
Nullable(T)根据基本类型和null值标志位进行计算
UUID16字节
IPv44字节
IPv616字节
Nested根据嵌套结构和各个字段的数据类型进行计算

以上是一些常见的ClickHouse数据类型及其在存储空间方面的一般影响。需要注意的是,实际存储空间可能会受到数据压缩、列引擎的特定设置以及其他因素的影响。因此,在具体应用中,最好进行实际测试和评估,以获取准确的存储空间占用情况。

相关文章:

【入门篇】ClickHouse 数据类型

文章目录 1. 引言2. ClickHouse 数据类型2.1 基本数据类型2.1.1 整型2.1.2 浮点型2.1.3 字符串型 2.2 复合数据类型2.2.1 数组2.2.2 枚举类型2.2.3 元组2.2.4 Map2.2.5 Nullable 2.3 特殊数据类型2.3.1 日期和时间类型2.3.2 UUID2.3.3 IP 地址2.3.4 AggregateFunction 2.4 数据…...

关于Python数据分析,这里有一条高效的学习路径

无处不在的数据分析 谷歌的数据分析可以预测一个地区即将爆发的流感,从而进行针对性的预防;淘宝可以根据你浏览和消费的数据进行分析,为你精准推荐商品;口碑极好的网易云音乐,通过其相似性算法,为不同的人…...

基于 json-server 工具,模拟实现后端接口服务环境

文章目录 本地配置后端接口一、安装json-server1、安装 JSON 服务器 安装 JSON 服务器2、创建一个db.json包含一些数据的文件(重点)3、启动 JSON 服务器 启动 JSON 服务器4、现在如果你访问http://localhost:3000/posts/1,你会得到 本地配置后…...

想要精通算法和SQL的成长之路 - 课程表II

想要精通算法和SQL的成长之路 - 课程表 前言一. 课程表II (拓扑排序)1.1 拓扑排序1.2 题解 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 课程表II (拓扑排序) 原题链接 1.1 拓扑排序 核心知识: 拓扑排序是专…...

【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发

sgGoogleTranslate源码 <template><div :id"$options.name"> </div> </template> <script> export default {name: "sgGoogleTranslate",props: ["languages", "currentLanguage"],data() {return {//…...

论文总结《A Closer Look at Few-shot Classification Again》

原文链接 A Closer Look at Few-shot Classification Again 摘要 这篇文章主要探讨了在少样本图像分类问题中&#xff0c;training algorithm 和 adaptation algorithm的相关性问题。给出了training algorithm和adaptation algorithm是完全不想关的&#xff0c;这意味着我们…...

Postman使用_参数设置和获取

文章目录 参数引用内置动态参数手动添加参数脚本设置参数脚本获取参数 参数就像变量一样&#xff0c;它可以是固定的值&#xff0c;也可以是变化的值&#xff0c;比如&#xff1a;会根据一些条件或其他参数进行变化。我们如果要使用该参数就需要引用它。 参数引用 引用动态参数…...

【SQL】优化SQL查询方法

优化SQK查询 一、避免全表扫描 1、where条件中少使用&#xff01; 或 <>操作符&#xff0c;引擎会放弃索引&#xff0c;进行全表扫描 2、in \or &#xff0c;用between 或 exist 代替in 3、where 对字段进行为空判断 4、where like ‘%条件’ 前置百分号 5、where …...

Linux-相关操作

2.2.2 Linux目录结构 /&#xff1a;根目录&#xff0c;一般根目录下只存放目录&#xff0c;在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”&#xff0c;你其实是在告诉电脑&#xff0c;先从/&#xff08;根目录&#xff09;开始&#xf…...

二十、MySQL多表关系

1、概述 在项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求以及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种对应关系 2、多表关系分类 &#xff08;1&#xff0…...

HarmonyOS/OpenHarmony应用开发-DevEco Studio新建项目的整体说明

一、文件-新建-新建项目 二、传统应用形态与IDE自带的模板可供选用与免安装的元服与IDE中自带模板的选择 三、以元服务&#xff0c;远程模拟器为例说明IDE整体结构 1区是工程目录结构&#xff0c;是最基本的配置与开发路径等的认知。 2区是代码开发与修改区&#xff0c;是开发…...

去耦电路设计应用指南(三)磁珠/电感的噪声抑制

&#xff08;三&#xff09;磁珠/电感的噪声抑制 1. 电感1.1 电感频率特性 2. 铁氧体磁珠3. LC 型和 PI 型滤波 当去耦电容器不足以抑制电源噪声时&#xff0c;电感器&磁珠/ LC 滤波器的结合使用是很有效的。扼流线圈与铁氧体磁珠 是用于电源去耦电路很常见的电感器。 1. …...

Spring Bean的获取方式

参考https://juejin.cn/post/7251780545972994108?searchId2023091105493913AF7C1E3479BB943C80#heading-12 记录并补充 1.通过BeanFactoryAware package com.toryxu.demo1.beans;import org.springframework.beans.BeansException; import org.springframework.beans.facto…...

4795-2023 船用舱底水处理装置 学习记录

声明 本文是学习GB-T 4795-2023 船用舱底水处理装置. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了船用舱底水处理装置(以下简称处理装置)中舱底水分离器(以下简称分离器)和舱底 水报警装置(以下简称报警装置)的要求、试验方法…...

[框架设计之道(二)]设备、任务设置及业务流程

[框架设计之道&#xff08;二&#xff09;]设备、任务设置及业务流程 说明 此文档是开发中对设备设置项的管理。因为硬件在使用的过程中涉及大量设置项&#xff0c;因此需要单独开一篇文档说明设备的设置和任务的设置。 一、设备设置 1.基础接口 /// <summary> /// 配置…...

Nuxt3+Vite批量引入图片

通过计算属性获取images文件夹所有层级下所有静态资源 <script name"MarketplaceHeader" setup lang"ts"> //批量导入静态资源图片 const importImage: any computed(() > (name: string, type png, folder images) > {const glob: Record…...

采用nodejs + socket.io实现简易聊天室功能(群聊 + 私聊)

项目演示 支持群聊以及私聊 项目代码 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport…...

消息队列(一):需求分析

为什么要做这样一个项目&#xff1f; 首先&#xff0c;我们在之前学习的时候&#xff0c;就认识了一下 生产者消费者模式&#xff0c;这样一个模式有两大好处&#xff1a; 解耦合 本来有个分布式系统&#xff0c;A服务器 调⽤ B服务器&#xff08;A给B发请求&#xff0c;B给A…...

ImageViewer技术实现细节

第1章 ImageViewer工具使用方法 1.1. 图像加载 1.1.1. 单图像加载 左上角菜单,“File”->“单图像”,或者Ctrl-S,弹出文件对话框,选择图像文件,当前支持bmp,png,jpg格式。 结果如下图所示: 1.1.2. 多图像加载 左上角菜单,“File”->“多图像”,或者Ctrl-M…...

MFC多文档程序,从菜单关闭一个文档和直接点击右上角的x效果不同

MFC多文档程序&#xff0c;从菜单关闭一个文档和直接点击右上角的x效果不同 若文档内容有修改&#xff0c;则前者会询问用户&#xff0c;是否保存修改&#xff1b;后者不保存修改直接关闭。 原因在于&#xff0c;从菜单关闭时&#xff0c;调用OnClose&#xff0c;一定会调用Sa…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...