clickhouse大纲
2022-09-10 09:19:11 0 举报
AI智能生成
ck学习大纲
作者其他创作
大纲/内容
数据分片与分布式查询
数据分片是将数据进行横向切分
是一种分治思想的体现
本地表(Local Table)与分布式表(Distributed Table)的概念
多主架构
用Multi-Master多主架构,集群中的每个节点角色对
对等的角色使系统架构变得更加简单,不用再区分主控节点、数据节点和计算节点
规避了单点故障的问题,非常适合用于多数据中心、异地多活的场景
列式存储与数据压缩
a. 使用列式存储,按列组织,不同列不同文件
b. 数据默认使用LZ4算法压缩,压缩比8:1
c. 列式存储除了降低IO和存储的压力之外,还为向量化执行做好了铺垫
核心特性
完备的DBMS功能
列式存储与数据压缩
向量化执行引擎
关系模型与SQL查询
多样化的表引擎
多线程与分布式
多主架构
数据分片与分布式查询
实践
场景
实时数据分析
明细动态聚合查询 + 物化视图
应用场景: SCRM,DMP,CDP,直播分析,日志指标分析等。
特征
特征
灵活,支持明细数据 SQL 查询,并用物化视图加速。
多核(垂直扩展),分布式处理(水平扩展),MPP 架构。
支持实时批量数据摄入。
列式存储,向量化引擎,代码编译生成。
主键索引,二级索引。
不擅长
没有高速,低延迟的更新和删除方法。
稀疏索引使得点查性能不佳。
不支持事务。
应用场景
用户行为分析,精细化运营分析: 日活,留存率分析,路径分析,有序漏斗转化率分析,Session 分析等。
实时日志分析,监控分析,实时数仓
集群部署
LoadBalancer: LVS。
Proxy: APISIX 代理网关,用于熔断,限流,安全,日志等功能。
Distribute table: 分布式表,分发查询请求,合并,排序结果。
CH Shard & Replication: 分片,副本。
ZooKeeper: 协调多个副本复制。
写入
离线通过 Spark 将 Hive 表数据导入,实时通过 Flink 将 Kafka 数据导入。
批量方式写入。
写本地表,读分布式表。
Random,Hash 等方式。
读写分离
why
业务场景写入量巨大,写多读少。为写入扩分片,提高写入吞吐,但是读写不分离,查询QPS又不高,导致资源浪费。
解决方案
离线读写分离,将写入单独分离出来,构建完数据文件后,attach 到目标集群。
可行的方案
使用 K8s ch 临时集群来写入,构建数据文件。
使用 Spark 构建数据文件。
规划
ClickHouse 容器化部署: 容器化部署更高拥有更好的弹性伸缩能力,也能和其它的服务进行混合部署来节省成本。
ClickHouse 更多的推广,更多业务的接入: 比如用户行为分析,实时数仓,实时报表等业务。
ClickHouse 更好的平台化以及故障防范: ClickHouse 平台化,业务方易用性,多租户隔离,限流,熔断,监控报警,业务治理等方面进行更多地投入。
使用 Druid + ClickHouse 的双链路或者将 Druid 的业务迁移到 ClickHouse
痛点
ClickHouse 不太像一个传统意义上的分布式数据库,整体来说比较 “手动档”。很多地方都需要用户自己去设计一个流程去完善,比如写入,物化视图等。
没有自动 Rebalance 的能力,导致扩容缩容运维特别复杂。
Join 不是采用 Shuffle / Exchange Join,数据量大性能差。
行级别 Update/Delete 性能差,官方也不推荐。
社区和很多大厂都在针对这些痛点进行相关的尝试,改进,比如存储计算分离,Exchange Join 实现等。
替代方案
Doris DB
Hologres
TiFlash
其他
Catboost
创建数据表.
将数据插入到表中.
将CatBoost集成到ClickHouse中 (可跳过)。
从SQL运行模型推断.
实时工具
clickhouse-local
性能测试
clickhouse-copier
系统表
system.functions
system.query_log
系统.asynchronous_metric_log
系统.asynchronous_metrics
系统.data_type_families
系统.detached_parts
系统.graphite_retentions
系统.merge_tree_settings
系统.metric_log
系统.numbers_mt
系统.part_log
系统.query_thread_log
系统.storage_policies
系统.text_log
系统.trace_log
系统.一
系统.列
系统.副本
系统.动物园管理员
系统.合并
系统.字典
系统.指标
系统.数字
系统.数据库
系统.活动
系统.流程
系统.磁盘
系统.突变
系统.表
系统.表_engines
系统.设置
系统.贡献者
系统.集群
系统.零件
概况
简介
用于联机分析(OLAP)的列式数据库管理系统(DBMS)
特征
绝大多数是读请求
数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。
已添加到数据库的数据不能修改。
对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
宽表,即每个表包含着大量的列
查询相对较少(通常每台服务器每秒查询数百次或更少)
对于简单查询,允许延迟大约50毫秒
列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
事务不是必须的
对数据一致性要求低
每个查询有一个大表。除了他以外,其他的都很小。
查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中
性能
不太复杂的查询在单个服务器上大约能够以2-10GB/s(未压缩)的速度进行处理
延迟应该小于50毫秒(在最佳的情况下应该小于10毫秒)
单个服务器上每秒处理数百个查询
每次写入不少于1000行的批量写入,或每秒不超过一个写入请求,批写有优势
ClickHouse为何如此之快
着眼硬件,先想后做
算法在前,抽象在后
勇于尝鲜,不行就换
特定场景,特殊优化
持续测试,持续改进
接口
网络接口
HTTP, 包含文档,易于使用
Native TCP,简单,方便使用
工具类库
命令行客户端
clickhouse-client
http客户端
CURL
JDBC驱动
ClickHouse-Native-JDBC
clickhouse4j
ODBC驱动
C++客户端
第三方工具
Client libraries
Integrations
GUI
Proxies
第三方集成库
关系数据库MySQL、PostgreSQL、MSSQL
消息队列
kafka
流处理
flink
对象存储
S3
容器编排
K8S
配置管理
puppet
监控Monitoring
Graphite
Grafana
Prometheus
Nagios
Zabbix
Sematext
日志
rsyslog
fluentd
logagent
Geo
MaxMind
可视化UI
WEB界面Tabix
HouseOps 是一个交互式 UI/IDE 工具
灯塔 是ClickHouse的轻量级Web界面
DBeaver 具有ClickHouse支持的通用桌面数据库客户端
DataGrip 是JetBrains的数据库IDE
第三方代理
chproxy的HTTP代理和负载均衡器
KittenHouse被设计为ClickHouse和应用服务器之间的本地代理
ClickHouse-Bulk是一个简单的ClickHouse收集器
MySQL接口
mysql --protocol tcp -u default -P 9004
引擎
延时引擎Lazy
expiration_time_in_seconds
Atomic
CREATE DATABASE test ENGINE = Atomic;
MySQL引擎
CREATE DATABASE db_name ENGINE = MySQL
数据库引擎
MySQL
表引擎
合并数家族
GraphiteMergeTree
它能减少存储空间,同时能提高Graphite数据的查询效率
AggregatingMergeTree
表来做增量数据的聚合统计,包括物化视图的数据聚合
MergeTree
强大的表引擎当属 MergeTree (合并树)引擎及该系列(*MergeTree)中的其他引擎
存储的数据按主键排序
支持数据分区,如果指定了 分区键 的话
支持数据副本
支持数据采样
ReplacingMergeTree
该引擎和 MergeTree 的不同之处在于它会删除排序键值相同的重复项
SummingMergeTree
存储聚合数据
折叠树
该引擎继承于 MergeTree,并在数据块合并算法中添加了折叠行的逻辑
数据副本
可支持副本的树
ReplicatedMergeTree
ReplicatedSummingMergeTree
ReplicatedReplacingMergeTree
ReplicatedAggregatingMergeTree
ReplicatedCollapsingMergeTree
ReplicatedVersionedCollapsingMergetree
ReplicatedGraphiteMergeTree
自定义分区键
基于 MergeTree 表的 物化视图 也支持分区
可以通过 system.parts 表查看表片段和分区信息
日志
StripeLog
写入许多小数据量(小于一百万行)的表的场景下使用这个引擎
日志
Log引擎适用于临时数据
TinyLog
最简单的表引擎,用于将数据存储在磁盘上
集成
MongoDB
PostgreSQL
JDBC
ODBC
HDFS
Kafka
MySQL
特别
关联表引擎
JOIN
随机数生成表引擎
设置 generate_engine_table 引擎表
物化视图-MaterializedView
使用一个不同的引擎来存储数据,这个引擎要在创建物化视图时指定
Null
从 Null 类型的表中读取时,返回空
URL
用于管理远程 HTTP/HTTPS 服务器上的数据
内存表
Memory 引擎以未压缩的形式将数据存储在 RAM 中。数据完全以读取时获得的形式存储
分布式引擎
分布式引擎本身不存储数据, 但可以在多个服务器上进行分布式查询
合并Merge 引擎
本身不存储数据,但可用于同时从任意多个其他的表中读取数据
字典
Dictionary 引擎将字典数据展示为一个ClickHouse的表
文件
从 ClickHouse 导出数据到文件。
将数据从一种格式转换为另一种格式。
通过编辑磁盘上的文件来更新 ClickHouse 中的数据
外部数据
ClickHouse 允许向服务器发送处理查询所需的数据以及 SELECT 查询
缓冲区
缓冲数据写入 RAM 中,周期性地将数据刷新到另一个表
视图
它不存储数据,仅存储指定的 SELECT 查询
设置
始终存在于 RAM 中的数据集。它适用于IN运算符的右侧
表引擎
类型
数据的存储方式和位置,写到哪里以及从哪里读取数据
支持哪些查询以及如何支持。
并发数据访问。
索引的使用(如果存在)。
是否可以执行多线程请求。
数据复制参数。
引擎类型
- MergeTree
- ReplacingMergeTree
- SummingMergeTree
- AggregatingMergeTree
- CollapsingMergeTree
- VersionedCollapsingMergeTree
- GraphiteMergeTree
完备的DBMS功能
❑ DDL(数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务。
❑ DML(数据操作语言):可以动态查询、插入、修改或删除数据。
❑ 权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
❑ 数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
❑ 分布式管理:提供集群模式,能够自动管理多个数据库节点。
OLAP场景的特点
读多于写
大宽表,读大量行但是少量列,结果集较小
SQL
SQL语法
空字符
SQL的起始和结束可以有:空格字符,tab制表符,换行符,CR符,换页符等
注释
SQL风格的注释以 -- 开始,直到行末
C语言风格的注释以 /* 开始,以 */ 结束,支持多行
关键字
- 标准SQL。例如,SELECT, select 和 SeLeCt 都是允许的
- 在某些流行的RDBMS中被实现的关键字,例如,DateTime 和 datetime是一样的
变量名
集群,数据库,表,分区,列名称
函数
数据类型
表达式别名
字符
CH包含数字,字母,括号,NULL值等字符
数字
数字类型的值类型为能容纳该值的最小数据类型
当做64位的有符号整数,使用该函数 strtoull
解析成64位无符号整数,同样使用函数 strtoull
字母
CH只支持用单引号包含的字母。特殊字符可通过反斜杠进行转义
转义字符都有相应的实际值: \b, \f, \r, \n, \t, \0, \a, \v, \xHH。
括号
数组都是使用方括号进行构造 [1, 2, 3]
NULL值
代表不存在的值
isNull 、 isNotNull
函数
now()
运算符
表达式 1 + 2 * 3 + 4 会被解析成 plus(plus(1, multiply(2, 3)), 4)
数据类型及数据库/表引擎
CREATE 语句中的数据类型和表引擎写法与变量或函数类似
表达式别名
expr AS alias
星号
select查询中,星号可以代替表达式使用
表达式
表达式是函数、标识符、字符、运算符的应用程序、括号中的表达式、子查询或星号
语句
select
all子句
array join
distinct
format
from
group by
having
into outfile
join
limit
limit by
order by
prewhere
sample
union all
where
with
alter
system
RELOAD EMBEDDED DICTIONARIES
RELOAD DICTIONARIES
RELOAD DICTIONARY
DROP DNS CACHE
DROP MARK CACHE
DROP UNCOMPRESSED CACHE
DROP COMPILED EXPRESSION CACHE
DROP REPLICA
FLUSH LOGS
RELOAD CONFIG
SHUTDOWN
KILL
STOP DISTRIBUTED SENDS
FLUSH DISTRIBUTED
START DISTRIBUTED SENDS
STOP MERGES
START MERGES
STOP TTL MERGES
START TTL MERGES
STOP MOVES
START MOVES
STOP FETCHES
START FETCHES
STOP REPLICATED SENDS
START REPLICATED SENDS
STOP REPLICATION QUEUES
START REPLICATION QUEUES
SYNC REPLICA
RESTART REPLICA
RESTART REPLICAS
show
SHOW CREATE TABLE
SHOW DATABASES
SHOW PROCESSLIST
SHOW TABLES
SHOW DICTIONARIES
SHOW GRANTS
SHOW CREATE USER
SHOW CREATE ROLE
SHOW CREATE ROW POLICY
SHOW CREATE QUOTA
SHOW CREATE SETTINGS PROFILE
grant
revoke
其他
杂项查询
ATTACH
CHECK TABLE
DESCRIBE TABLE
DETACH
DROP
DROP DATABASE
DROP TABLE
DROP DICTIONARY
DROP USER
DROP ROLE
DROP ROW POLICY
DROP QUOTA
DROP SETTINGS PROFILE
DROP VIEW
EXISTS
KILL QUERY
KILL MUTATION
OPTIMIZE
RENAME
SET
SET ROLE
SET DEFAULT ROLE
TRUNCATE
USE
create database
CREATE DATABASE
CREATE TABLE
CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER cluster (p Date, i Int32) ENGINE = Distributed(cluster, default, hits)
CREATE VIEW
CREATE DICTIONARY
insert into
函数
简介
算术函数
比较函数
逻辑函数
类型转换函数
IN 运算符
自省
GEO函数
Hash函数
IP函数
JSON函数
Nullable处理函数
URL函数
UUID函数
arrayJoin函数
位图函数
位操作函数
其他函数
功能与Yandex的工作。梅特里卡词典
取整函数
字典函数
字符串函数
字符串拆分合并函数
字符串搜索函数
字符串替换函数
数学函数
数组函数
时间日期函数
机器学习函数
条件函数
编码函数
随机函数
高阶函数
聚合函数
count
min
max
sum
avg
any
stddevPop
stddevSamp
varPop(x)
varSamp
covarPop
covarSamp
anyHeavy
anyLast
argMin
argMax
avgWeighted
corr
topK
topKWeighted
groupArray
groupUniqArray
groupArrayInsertAt
groupArrayMovingSum
groupArrayMovingAvg
groupArraySample
groupBitAnd
groupBitOr
groupBitXor
groupBitmap
groupBitmapAnd
groupBitmapOr
groupBitmapXor
sumWithOverflow
deltaSum
sumMap
minMap
maxMap
initializeAggregation
skewPop
skewSamp
kurtPop
kurtSamp
uniq
uniqExact
uniqCombined
uniqCombined64
uniqHLL12
quantile
quantiles
quantileExact
quantileExactWeighted
quantileTiming
quantileTimingWeighted
quantileDeterministic
quantileTDigest
quantileTDigestWeighted
simpleLinearRegression
stochasticLinearRegression
stochasticLogisticRegression
categoricalInformationValue
studentTTest
welchTTest
mannWhitneyUTest
median
rankCorr
表函数
file
merge
numbers
url
mysql
jdbc
odbc
hdfs
input
generateRandom
remote, remoteSecure
字典
外部字典
概述
配置外部字典
在内存中存储字典
字典更新
外部字典的来源
字典键和字段
分层字典
内部字典
数据类型
UUID
DateTime64
低基数类型
域
AggregateFunction(name, types_of_arguments…)
Decimal(P,S),Decimal32(S),Decimal64(S),Decimal128(S)
Enum8,Enum16
Float32,Float64
SimpleAggregateFunction
Tuple(T1, T2, …)
UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64
可为空(类型名称)
固定字符串
字符串
布尔值
日期
日期时间
阵列(T)
嵌套数据结构
特殊数据类型
ANSI兼容
操作符
IN 操作符
IN, NOT IN, GLOBAL IN,和 GLOBAL NOT IN 运算符
位运算
下标运算符
负号
乘号、除号和取余
加号和减号
关系运算符
集合关系运算符
逻辑非
逻辑与
逻辑或
条件运算符
0 条评论
下一页