ClickHouse入门手册1.0

1、数据类型

1.1 整数类型:

ClickHouse中整型数据均为固定长度(可以设置长度参数,但是会被忽略),整型包括有符号整型和无符号整型。

有符号整型:Int8,Int16,Int32,Int64,Int128,Int256

无符号整型:UInt8,UInt16,UInt32,UInt64,UInt128,UInt256

1.2 字符串类型:

String

1.3 固定字符串:

FixedString(N)

固定字符串需要指定长度!

当数据长度刚好是N时,FixedString类型比较高效,其他情况下效率会降低。

注意:插入数据时,如果字符串长度小于N,则会对字符串尾部用空子节填充;如果长度大于N,会抛出Too large value for FixedString(N)异常。

1.4 标识符类型:

UUID

通用唯一标识符是一个16字节的数字,用于标志记录。

1.5 日期/时间类型:

Date32

DateTime64

1.6 ip4/6地址

IPv4

IPv6

tips:IPv4是与UInt32类型保持兼容的类型,用于保存IPv4地址的值;而IPv6是与FixedString(16)兼容的类型,用于保存IPv6地址的值。

1.7 浮点数

Float32

Float64

1.8 定点数:

Decimal(P,S)

有符号定点数,在运算过程中保持精度。其中参数P表示精度,有效范围[1~38],决定有多少个十进制数字;参数S表示规模,有小范围[0~P],决定小数位的位数。

部分资料中定点数有Decimal32,Decimal64,Decimal128类型,其实是不同P参数的表示:

P取值[1~9],对应Decimal32(S);

P取值[10~18],对应Decimal64(S);

P取值[19~38],对应Decimal128(S);

1.9 枚举类型:

Enum8

Enum16

ClickHouse中Enum类型用来保存String=Integer的映射关系,其中Enum8是String=Int8的描述,Enum16是String=Int16的描述。

1.10 数组类型:

Array(T)

由T类型组成的数组,T可以是任意类型,包含数组类型(但是不推荐,ClickHouse对多维数组的支持有限)。

1.11 键值对:

Map(key,value)

用来保存k-v键值对类型的数据。其中参数key类型支持String/FixedString/Integer,参数value支持String/FixedString/Array/Integer。

1.12 空类型:

Nullable

空类型,ClickHouse允许用NULL表示缺省值,如Nullable(Int8)可以保存Int8类型的值,没有值的行会存储为NULL。

注意:使用Nullable对数据库几乎总是负面影响!!!

建表语句示例:

CREATE TABLE ALL_COLUMN_TYPE_Table
(col1_Int8 Int8 COMMENT '字段Int8',col2_Int16 Int16 COMMENT '字段Int16',col3_Int32 Int32 COMMENT '字段Int32',col4_Int64 Int64 COMMENT '字段Int128',col5_Int128 Int128 COMMENT '字段UInt8',col6_UInt8 UInt8 COMMENT '字段UInt8',col7_UInt16 UInt16 COMMENT '字段UInt16',col8_UInt32 UInt32 COMMENT '字段UInt32',col9_UInt64 UInt64 COMMENT '字段UInt64',col10_UInt128 UInt128 COMMENT '字段UInt128',col11_UUID UUID COMMENT '字段UUID',col12_Date32 Date32 COMMENT '字段Date32',col13_DateTime64 DateTime64 COMMENT '字段DateTime64',col14_Float32 Float32 COMMENT '字段Float32',col15_Float64 Float64 COMMENT '字段Float64',col16_String String COMMENT '字段String',col17_Enum8 Enum8('a'=2,'b'=3) COMMENT '字段Enum8',col18_Enum16 Enum16('男'=1,'女'=2) COMMENT '字段Enum16',col19_FixedString FixedString(12) COMMENT '字段FixedString',col20_Decimal Decimal(16,12) COMMENT '字段Int8',col21_IPv4 IPv4 COMMENT '字段IPv4',col22_IPv6 IPv6 COMMENT '字段IPv6',col23_Map Map(String, Int8) COMMENT '字段Map',col24_Array Array(IPv4) COMMENT '字段数组'  
)
ENGINE = MergeTree
ORDER BY col1_Int8
PARTITION BY col24_Array

Tips:

(1)字段大小写敏感,`UP`和`up`会认为是两个字段。

(2)ClickHouse关键字部分大小写敏感,建议sql全部用大写,避免迷の错误。

(3)Array(T),T支持所有类型。

(4)不同引擎支持的建表参数有区别,如Log家族不支持索引和分区,具体参见4.2引擎说明。

(5)如果CREATE TABLE没有指定Schema,那么会建在default数据库中(If you do not specify the database name, the table will be in the default database.)。

(6)ClickHouse主键和排序键。官网对主键的说明如下:

primary keys in ClickHouse are not unique for each row in a table
The primary key of a ClickHouse table determines how the data is sortedwhen written to disk. Every 8,192 rows or 10MB of data (referred to 
as the index granularity) creates an entry in the primary key index file. 
This granularity concept creates a sparse index that can easily fit inmemory, and the granules represent a stripe of the smallest amount of 
column data that gets processed during SELECT queries.
The primary key can be defined using the PRIMARY KEY parameter. If you 
define a table without a PRIMARY KEY specified, then the key becomes the 
tuple specified in the ORDER BY clause. If you specify both a PRIMARY KEY 
and an ORDER BY, the primary key must be a subset of the sort order.
The primary key is also the sorting key......

主键不唯一;主键用作写入排序;未定义主键会使用排序键排序,如果同时定义了主键和排序键,主键必须是排序键的子集。

2、常用sql语法

这部分资料搬运自官网中文文档,建议直接访问官网:SQL语法 | ClickHouse Docs

2.1 SELECT

数据检索,略。

2.2 ALTER

表修改,ALTER操作只支持MergeTree家族引擎表。语法结构:

ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...

2.3 SHOW

SHOW查询,语法结构:

#table
SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY] [db.]table [INTO OUTFILE filename] [FORMAT format]#database
SHOW DATABASES [INTO OUTFILE filename] [FORMAT format]#processlist
SHOW PROCESSLIST [INTO OUTFILE filename] [FORMAT format]

2.4 DESCRIBE

DESCRIBE TABLE,语法结构:

DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]

2.5 DROP

删除操作,语法结构:

#table
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]#dictionary
DROP DICTIONARY [IF EXISTS] [db.]name#user
DROP USER [IF EXISTS] name [,...] [ON CLUSTER cluster_name]

注意:DROP操作大小写敏感!!!

2.6 CREATE

创建操作,语法结构:

#table
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(name1 [type1] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|EPHEMERAL|ALIAS expr1] [compression_codec] [TTL expr1] [COMMENT 'comment for column'],name2 [type2] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|EPHEMERAL|ALIAS expr2] [compression_codec] [TTL expr2] [COMMENT 'comment for column'],...
) ENGINE = engineCOMMENT 'comment for table'#database
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]#view
CREATE [OR REPLACE] VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster_name] AS SELECT ...

2.7 INSERT

插入操作,语法结构:

INSERT INTO [TABLE] [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...

tips:ClickHouse有2类解析器:完整SQL解析器和数据格式解析器,除了INSERT查询,其他情况下使用完整SQL解析器。可以通过设置input_format_values_interpret_expressions参数,当其值为1时,ClickHouse优先使用数据格式解析器(快速流式解析器),如果失败,ClickHouse会在尝试使用完整SQL解析器。

3、建表参数

3.1 分区

通过PARTITION BY关键字定义分区信息。

分区主要目的是降低扫描范围,优化查询速度。

MergeTree家族可以使用分区键。设置分区的表会通过指定的规则划分为逻辑数据库,为减少操作,分区是分开存储的,访问数据时候ClickHouse尽量使用分区的最小子集。

分区支持表达式和元数据,如:

PARTITION BY (toMonday(StartDate), EventType)

可通过如下语句查看表分区信息:

SELECTpartition,name,active
FROM system.parts
WHERE table = 'ALL_COLUMN_TYPE_Table'

3.2 排序

通过ORDER BY关键字定义排序。

排序键支持多个字段集合,如:

#list,需要括号
ORDER BY (col1_Int8,col4_Int64)
#单个字段
ORDER BY col1_Int8

Tips:部分资料中表示排序键是必填字段,这种论述是错误。正确论述应该是——排序键和主键必须指定至少一个!

You must provide an ORDER BY or PRIMARY KEY expression in the table definition.

如下建表语句是正确可执行的:

CREATE TABLE ALL_COLUMN_TYPE_Table9
(col1_Int8 Int8 COMMENT '字段Int8',col2_Int16 Int16 COMMENT '字段Int16',col3_Int32 Int32 COMMENT '字段Int32',col4_Int64 Int64 COMMENT '字段Int128',col5_Int128 Int128 COMMENT '字段UInt8',col6_UInt8 UInt8 COMMENT '字段UInt8',col7_UInt16 UInt16 COMMENT '字段UInt16',col8_UInt32 UInt32 COMMENT '字段UInt32',col9_UInt64 UInt64 COMMENT '字段UInt64',col10_UInt128 UInt128 COMMENT '字段UInt128',col11_UUID UUID COMMENT '字段UUID',col12_Date32 Date32 COMMENT '字段Date32',col13_DateTime64 DateTime64 COMMENT '字段DateTime64',col14_Float32 Float32 COMMENT '字段Float32',col15_Float64 Float64 COMMENT '字段Float64',col16_String String COMMENT '字段String',col17_Enum8 Enum8('a'=2,'b'=3) COMMENT '字段Enum8',col18_Enum16 Enum16('男'=1,'女'=2) COMMENT '字段Enum16',col19_FixedString FixedString(12) COMMENT '字段FixedString',col20_Decimal Decimal(16,12) COMMENT '字段Int8',col21_IPv4 IPv4 COMMENT '字段IPv4',col22_IPv6 IPv6 COMMENT '字段IPv6',col23_Map Map(String, Int8) COMMENT '字段Map',col24_Array Array(IPv4) COMMENT '字段数组'
)
ENGINE = MergeTree 
PRIMARY KEY col3_Int32

3.3 主键

通过PRIMARY KEY语法指定。

主键支持字段集合,如下:

#list
PRIMARY KEY (col1_Int8,col3_Int32,col5_Int128)#单个字段
PRIMARY KEY col1_Int8

4、引擎

ClickHouse引擎可以分为两类:数据库引擎和表引擎。

4.1 数据库引擎:

创建数据库语法结构:

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MaterializeMySQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]
 

引擎

说明

MaterializedMySQL

实验性,生产中禁止使用。

MySQL

用于将远程MySQL服务器中的表映射到ClickHouse中,允许对表进行SELECT和INSERT查询。

Lazy

为存储较小的*Log表优化的,访问之间会存在很长的时间间隔。

Atomic

数据库Atomic中所有的表都会有唯一UUID,默认情况下使用Atomic数据引擎。

SQLite

允许连接到SQLite数据库,并支持ClickHouse和SQLite交换数据。

PostgreSQL

允许连接到远程PostgreSQL服务,支持读写操作。

4.2 表引擎:

主要有两类,一类是MergeTree家族,一类是Log家族。

引擎家族

引擎

说明

MergeTree

VersionedCollapsingMergeTree

允许快速写入不断变化的对象;删除后台中的旧对象状态。

GraphiteMergeTree

用来对Graphite数据进行瘦身(使用CK保存Graphite数据比较合适)

AggregatingMergeTree

适合用来做增量数据的聚合统计,包括物化视图等。

CollapsingMergeTree

可以异步删除折叠行,可以有效降低存储量并提高SELECT效率。

MergeTree

用来保存极大量数据到一张表中,数据片段可以按照一定规则合并。

ReplacingMergeTree

和MergeTree相比,该引擎会删除排序键值相同的重复项。

SharedMergeTree

插入吞吐量、后台合并吞吐量、扩缩容更快。

SummingMergeTree

相同主键会合并为一行,可以有效减少存储空间和提高查询效率。

Log

Log

适合临时数据,测试、演示、write-once表等

SpripeLog

写入数据量较小(小于百万)的场景下,该引擎比较适合。

TinyLog

最简单的表引擎,数据保存在磁盘上,数据包都单独压缩在文件中。

Tips:Log家族引擎不支持索引,建表不支持ORDER BY/PRIMAEY/PARTITION BY

Engine Log doesn't supportPARTITION_BY, PRIMARY_KEY, ORDER_BY or SAMPLE_BY clauses. 

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

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

相关文章

从0开始学习JavaScript--JavaScript中的解构赋值及使用场景

在现代JavaScript中,解构赋值是一种强大而灵活的语法特性,它允许从数组或对象中提取值并赋给变量。这种语法不仅使代码更简洁,而且提高了可读性。在本篇文章中,将深入探讨JavaScript中解构赋值的基本概念、语法规则以及丰富的使用…

Python接口自动化测试如何设计接口测试用例(详解)

简介 上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前,我们来想一下,如何进行接口测试的准备工作。或者说,接口测试的流程是什么?有些人就很好奇,接口测试要流程干嘛?不就是拿着接口…

亲子开衫外套 I 真的好温柔好有气质

分享适合宝宝和麻麻 一起穿的开衫外套 包芯纱拼貂毛 软糯亲肤不扎人 上身体验感非常不错 这种面料还不易起球 质感满满,单穿内搭都可!

ChatGPT Plus/GPT4高级数据分析和插件功能详解

ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题,ChatGPT都能为您提供实用且高质量的建议和指导,提高编程效率和准确性。此外,ChatGPT是一位出色的合作伙伴,可以为您提供论文写作的…

智能优化算法应用:基于鸟群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于鸟群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鸟群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鸟群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Python向Excel写入内容的方法大全

在数据处理和分析中,将Python中的数据写入Excel是一项常见任务。 本文将介绍几种常见的方法,以及如何使用它们向Excel中写入内容。 方法一:使用openpyxl库 openpyxl是一个功能强大的库,用于读写Excel文件。以下是一个简单的使用…

Java数据结构之优先级队列(PriorityQueue)

1、概念 队列:是一种FIFO(First-In-First-Out)先进先出的数据结构,对应于生活中的排队的场景, 排在前面的人总是先通过,依次进行。 优先队列:是特殊的队列,从“优先”一词&#xff…

第20章 多线程

创建线程 继承Thread 类 Thread 类时 java.lang 包中的一个类,从类中实例化的对象代表线程,程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行,任务是指线程在启动时执行的工作,start() 方法启动线程&am…

c++中explicit关键字用法

c中explicit关键字用法 对于这个关键字的作用主要就是禁止隐式转换! 官方中文文档描述如下: explicit(1)explicit ( 表达式)(2)(C20 起) 表达式 - 经按语境转换为 bool 类型的常量表达式 (1) 指定构造函数或转换函数 (C11 起)或推导指引 (C…

系列十五、BeanDefinition

一、BeanDefinition 1.1、概述 BeanDefinition是一个接口,主要负责存储bean的定义信息,决定bean的生产方式,是一个定义态的bean,类似于说明书。后续BeanFactory就可以根据这些信息生产bean了。比如实例化:可以通过反射…

NTT 的各类优化:Harvey、PtNTT,Intel AVX2、ARM Neon、GPGPU

参考文献: [Har14] Harvey D. Faster arithmetic for number-theoretic transforms[J]. Journal of Symbolic Computation, 2014, 60: 113-119.[Sei18] Seiler G. Faster AVX2 optimized NTT multiplication for Ring-LWE lattice cryptography[J]. Cryptology ePr…

QML Column Row 属性 pyside6

在 QML 中,Column 和 Row 是常用的布局元素,用于水平(Row)和垂直(Column)排列它们的子元素。以下是这两个元素的主要属性列表: Column 属性 spacing: 子元素之间的垂直间隔。width 和 height:…

并查集带权并查集

定义 : 并查集 : 一种数据结构,用于处理一些不相交集合的合并与查询问题; 例题 : 如 : 有n种元素,分属于不同的n个集合; 有两种操作 : 1.给出两个元素的亲属关系,合并两个集合(x与y是亲戚,亲戚的亲戚…

【数据库】数据库可恢复性目标的实现模型,针对灾难级故障的数据完整性保护对策

系统故障的对策 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更…

竞赛选题 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

tcpdump使用心得

参考原文 https://danielmiessler.com/p/tcpdump/ 几个用例 tcpdump -i eth0 显示eth0网卡当前所有的抓包情况eth0是网卡名,可以通过ifconfig获得,也可以通过 tcpdump -D 显示当前可以监听的网卡 -i 参数表示接口,后跟要监听的网卡 tcpdu…

树与二叉树堆:链式二叉树的实现

目录 链式二叉树的实现: 前提须知: 前序: 中序: 后序: 链式二叉树的构建: 定义结构体: 初始化: 构建左右子树的指针指向: 前序遍历的实现: 中序…

LiveData源码分析,粘性事件,数据倒灌

最近面试天天被虐,有个问题问的很频繁,就是 LiveData 的数据倒灌问题怎么解决。 我不知道有多少人连数据倒灌是什么都没听过的,更不要说什么解决方案啦。 我按照我的理解描述一下数据倒灌:就是设置了 LiveData 的数据之后&#…

论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network

前言 Distributed Initialization for Visual-Inertial-Ranging Odometry with Position-Unknown UWB Network这篇论文是发表在ICRA 2023上的一篇文章,本文提出了一种基于位置未知UWB网络的一致性视觉惯性紧耦合优化测距算法( DC-VIRO )的分布式初始化方法。 对于…

Vue学习笔记-Vuex四个map方法的使用

在组件中导入方法 import {mapState,mapGetters,mapActions,mapMutations} from vuexmapState方法的使用 注意:这里的…是ES6语法,表示将该的对象所有属性展开,放入其所在上级对象中 ...... computed:{//借助mapState生成计算属性&#xf…