ClickHouse基础知识(三):ClickHouse 数据类型全解

1 整型

固定长度的整型,包括有符号整型或无符号整型。

整型范围(-2n-1~2n-1-1):

无符号整型范围(0~2n-1):

使用场景: 个数、数量、也可以存储型 id。

2 浮点型

Float32 - float

Float64 – double

建议尽可能以整数形式存储数据。例如,将固定精度的数字转换为整数值,如时间用毫秒为单位表示,因为浮点型进行计算时可能引起四舍五入的误差。

使用场景:一般数据值比较小,不涉及大量的统计计算,精度要求不高的时候。比如 保存商品的重量。

3 布尔型

没有单独的类型来存储布尔值。可以使用 UInt8 类型,取值限制为 0 或 1。

4 Decimal 型

有符号的浮点数,可在加、减和乘法运算过程中保持精度。对于除法,最低有效数字会 被丢弃(不舍入)。

有三种声明: 括号里面表示小数位

➢ Decimal32(s),相当于 Decimal(9-s,s),有效位数为 1~9

➢ Decimal64(s),相当于 Decimal(18-s,s),有效位数为 1~18

➢ Decimal128(s),相当于 Decimal(38-s,s),有效位数为 1~38

s 标识小数位

使用场景: 一般金额字段、汇率、利率等字段为了保证小数点精度,都使用 Decimal 进行存储。

5 字符串

1)String

字符串可以任意长度的。它可以包含任意的字节集,包含空字节。

2)FixedString(N)

固定长度 N 的字符串,N 必须是严格的正自然数。当服务端读取长度小于 N 的字符 串时候,通过在字符串末尾添加空字节来达到 N 字节长度。 当服务端读取长度大于 N 的 字符串时候,将返回错误消息。

与 String 相比,极少会使用 FixedString,因为使用起来不是很方便。

使用场景:名称、文字描述、字符型编码。 固定长度的可以保存一些定长的内容,比 如一些编码,性别等但是考虑到一定的变化风险,带来收益不够明显,所以定长字符串使用 意义有限。

6 枚举类型

包括 Enum8 和 Enum16 类型。Enum 保存 'string'= integer 的对应关系。

Enum8 用 'String'= Int8 对描述。

Enum16 用 'String'= Int16 对描述。

1)用法演示

创建一个带有一个枚举 Enum8('hello' = 1, 'world' = 2) 类型的列

CREATE TABLE t_enum
(
 x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog;

2)这个 x 列只能存储类型定义中列出的值:'hello'或'world'

hadoop102 :) INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello');

3)如果尝试保存任何其他值,ClickHouse 抛出异常

 hadoop102 :) insert into t_enum values('a')

4)如果需要看到对应行的数值,则必须将 Enum 值转换为整数类型

 hadoop102 :) SELECT CAST(x, 'Int8') FROM t_enum;

使用场景:对一些状态、类型的字段算是一种空间优化,也算是一种数据约束。但是实 际使用中往往因为一些数据内容的变化增加一定的维护成本,甚至是数据丢失问题。所以谨慎使用。

7 时间类型

目前 ClickHouse 有三种时间类型

➢ Date 接受年-月-日的字符串比如 ‘2019-12-16’

➢ Datetime 接受年-月-日 时:分:秒的字符串比如 ‘2019-12-16 20:50:10’

➢ Datetime64 接受年-月-日 时:分:秒.亚秒 的字符串比如‘2019-12-16 20:50:10.66’

日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。

还有很多数据结构,可以参考官方文档:https://clickhouse.yandex/docs/zh/data_types/

8 数组

Array(T):由 T 类型元素组成的数组。

T 可以是任意类型,包含数组类型。 但不推荐使用多维数组,ClickHouse 对多维数组 的支持有限。例如,不能在 MergeTree 表中存储多维数组。

(1)创建数组方式 1,使用 array 函数

array(T)
hadoop102 :) SELECT array(1, 2) AS x, toTypeName(x) ;

(2)创建数组方式 2:使用方括号

[]
hadoop102 :) SELECT [1, 2] AS x, toTypeName(x);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows电脑引导损坏?按照这个教程能修复

前言 Windows系统的引导一般情况下是不会坏的,小伙伴们可以不用担心。发布这个帖子是因为要给接下来的文章做点铺垫。 关注小白很久的小伙伴应该都知道,小白的文章都讲得比较细。而且文章与文章之间的关联度其实还是蛮高的。在文章中,你会遇…

CSS关于AI智能页面布局排列

效果图如下&#xff1a; 具体代码如下&#xff1a; <template><div class"box"><div class"title"><img src"" alt class"logo" /><span class"title-hn">AI人工智能</span></div&…

『番外篇十』SwiftUI 实战:打造一款“五脏俱全”的网络图片显示 App(下)

概览 在上篇文章中,我们初步实现了一款小巧的网络图片显示器。 我们先是创建了 json 数据对应的图片模型,然后将 App 界面“分而治之”划分为独立的三个组件以便“逐个击破”,最后我们将所有这些融合在一起。 不过,目前的实现仍有一些问题。比如我们添加了一层不必要的 …

docker搭建Dinky —— 筑梦之路

简介 Dinky 是一个 开箱即用 、易扩展 &#xff0c;以 Apache Flink 为基础&#xff0c;连接 OLAP 和 数据湖 等众多框架的 一站式 实时计算平台&#xff0c;致力于 流批一体 和 湖仓一体 的探索与实践。 主要功能 其主要功能如下&#xff1a; 沉浸式 FlinkSQL 数据开发&#x…

浏览器常用基本操作之python3+selenium4自动化测试

1、打开指定的网页地址 我们使用selenium进行自动化测试时&#xff0c;打开浏览器之后&#xff0c;第一步就是让浏览器访问我们指定的地址&#xff0c;可使用get方法实现 1 2 3 from selenium import webdriver driver webdriver.Edge() driver.get(https://www.baidu.com/)…

学习笔记之——NeRF SLAM(基于神经辐射场的SLAM)

NeRF SLAM&#xff08;Neural Radiance Fields Simultaneous Localization and Mapping&#xff09;是一种结合神经辐射场&#xff08;NeRF&#xff09;和SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;的先进技术&#xff0c;用于实时地构建三维环境地图…

leaflet学习笔记-leaflet-ajax获取数据(五)

前言 地图开发中都会用一些GeoJSON数据进行渲染&#xff0c;这是用就会需要加载GeoJSON数据&#xff0c;这时就可以使用leaflet-ajax进行数据的获取 数据准备 本文通过阿里云的地图选择器&#xff08;DataV.GeoAtlas官网&#xff09;可以找到云南省的GeoJSON数据&#xff0c…

TDD-LTE 附着流程和去附着流程

目录 1. 附着流程 1.1. 正常附着流程 2. 异常附着流程 2.1 RRC建立失败 2.2 核心网拒绝 2.3 eNodeB未收到初始化上下文建立请求 2.4 RRC重配置请求丢失 2. 去附着流程 2.1 非关机去附着流程 2.1.1 连接态非关机去附着 2.1.2 空闲态非关机去附着 2.2 关机去附着流程 …

线性代数-行列式-错题笔记-1

视频讲解链接&#xff1a;http://【线性代数行列式&#xff0c;每日一题&#xff0c;考研疯狂刷题必备&#xff0c;一分钟训练营】https://www.bilibili.com/video/BV1NG4y1H71S?vd_source18c50b47f8412cfd9655895729fcd4f2

.NET DevOps 接入指南 | 1. GitLab 安装

引言 容器、DevOps和微服务被称为驱动云原生快速发展的三架马车。而DevOps是其中非常重要的一环&#xff0c;DevOps 是由Developers&#xff08;Dev&#xff09;和Operations&#xff08;Ops&#xff09;两个单词简称组成&#xff0c;中文直译就是“开发运维一体化”。 DevOps…

2023年12月Scratch等级考试(四级)真题试卷

2023年12月Scratch等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;24 总分数&#xff1a;100 选择题 第 1 题 单选题 Scratch运行下列程序&#xff0c;输入“abcdef”&#xff0c;程序结束后&#xff0c;变量“字符串”是&#xff1f;&#xff0…

外贸人应该顺应趋势做外贸

2024年&#xff0c;有人疑惑外贸将如何发展&#xff1f;我想紧跟趋势是不会出错的&#xff0c;多年前网络没有如今那么发达&#xff0c;客户到中国参展或者来访就能确认订单。如今到处都是各种推广平台&#xff0c;客户足不出户就能在线上订购产品&#xff0c;如果你还是想靠之…

基于Java SSM框架实现智能仓储管理系统项目【项目源码+论文说明】

基于java的SSM框架实现仓库管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;智能仓储系统当然也不能排除在外。智能仓储系统是以实际运用为开发背景&#xf…

易用、高效、可靠!高精度组合定位系统P-Box测试解决方案

简介 TCU&#xff08;Telematics Control Unit&#xff09;是车载网联通讯终端&#xff0c;用于实现车辆远程通讯和远程服务。随着自动驾驶技术的不断发展&#xff0c;准确获取车辆定位信息变得越来越重要。P-Box将GNSS定位与惯性导航定位相结合&#xff0c;能够为车辆提供精准…

C++上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法

前言 本人一直从事C上位软件开发工作较多&#xff0c;在之前的项目中通过C访问西门子PLC S7-200/S7-1200/S7-1500并进行数据交互的应用中一直使用的是ModbusTCP/ModbusRTU协议进行。Modbus上位开源库采用的LibModbus。经过实际应用发现Modbus开源库单次发送和接受的数据不能超过…

R306指纹识别模块功能实现示例

1 基本通信流程 1.1 UART 命令包的处理过程 1.2 UART 数据包的发送过程 UART 传输数据包前&#xff0c;首先要接收到传输数据包的指令包&#xff0c;做好传输准备后发送成功应答包&#xff0c;最后才开始传输数据包。数据包主要包括&#xff1a;包头、设备地址、包标识、包长…

【深度学习下载大型数据集】快速下载谷歌云盘数据集

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 跑深度学习的时候,一些数据集比较大,比如60多个G,而且只是训练集. 然后这些数据是由某些实验室组采集的,并不像一些大公司搞的,一般都直接方法一些网盘中. 如果是谷歌网盘,本身通过代理也不麻烦,但是发现即使通过代…

Java中常见的进制转换

进制是一种表示数字的方法&#xff0c;用于计算机科学、数学和电子工程等领域。常见的进制包括十进制、二进制、八进制和十六进制。 十进制是我们最常用的数字表示方法&#xff0c;使用10个数字(0-9)来表示所有数字。 二进制是计算机最基本的进制&#xff0c;使用2个数字(0和1)…

vue3 实现el-date-picker日期筛选过程

一、图例 二、需求&#xff1a; 有2个查询条件&#xff0c;startTime 和 endTime 选中时间1&#xff0c;禁止选中时间2&#xff0c;当前值传递给 startTime 选中时间2&#xff0c;禁止选中时间1&#xff0c;当前值传递给 startTime 和 endTime 三、完整代码 <div class…

java中使用redis

1、redis数据类型 1.1、5种数据类型 redis存储的是key-value结构的数据&#xff0c;其中key是字符串类型&#xff0c;value有5种常用的数据类型&#xff1a;字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。 字符串(string)&#xff1a;普通字符…
最新文章