![](https://img-blog.csdnimg.cn/faf450830813494ab0983c916e38937f.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
ClickHouse
文章平均质量分 74
ClickHouse 相关
一只努力的微服务
努力坚持终会有收获
展开
-
【ClickHouse系列】ClickHouse 支持 ANN 向量索引
最近邻域搜索(ANN)是指在 n 维空间中找到与给定点距离最小的点的问题。如果数据要逐条对比,性能和内存都有很大的消耗,所以添加了 annoy_index 索引,利用 ann 索引来加速计算。原创 2023-07-04 12:19:06 · 1148 阅读 · 1 评论 -
ClickHouse UNDROP TABLE 功能
不论是使用 ClickHouse 还是其他数据库,如果手抖删掉了一个表,想要恢复是相当困难。但是现在 ClickHouse 支持了能力,如果因为手抖误删了一个表,那在短时间内可以快速恢复。目前还是个实验性功能,如果想要体验可以使用最新分支。下面来体验一下整个功能。原创 2023-04-04 09:27:12 · 501 阅读 · 2 评论 -
ClickHouse 如何编写测试用例
想对 ClickHouse 进行开发,不能只懂得如何编写代码,更要懂得如何做好测试,这样才能保证自己开发的功能是可用的。所以如何编写测试用例是非常重要的,本文介绍一下 ClickHouse 如何编写测试用例。ClickHouse 的测试分很多种,这里主要介绍两种最常用的测试,即 stateless 测试和 integration 测试。原创 2023-03-16 23:54:43 · 546 阅读 · 0 评论 -
【ClickHouse系列】如何解决 Too Many Parts 问题
如何解决 Too Many Parts 问题原创 2023-03-11 22:50:48 · 2164 阅读 · 0 评论 -
ClickHouse 最简单的编译环境搭建方法
本文主要介绍如何搭建 ClickHouse 的开发环境。虽然 ClickHouse 官方文档对不同系统提供了相应的配置方法,但是在安装依赖时又常会出现各种各样的问题,所以本文给出一种非常快速的环境配置方法来方便读者更好的了解 ClickHouse。虽然 ClickHouse 支持 MacOS 编译,但是 MacOS 不能很好对支持 ClickHouse 所有组件的编译,所以建议还是使用 Linux 进行编译调试。本文是在 CentOS 7 中进行环境配置的。原创 2023-03-06 23:11:11 · 1043 阅读 · 0 评论 -
【ClickHouse源码】物化视图的写入过程
本文对 ClickHouse 物化视图的写入流程源码做个详细说明,基于 v22.8.14.53-lts 版本。原创 2023-03-01 22:26:16 · 485 阅读 · 0 评论 -
ClickHouse 配置文件使用说明
本文主要介绍 ClickHouse 的配置文件。在 ClickHouse 中配置主要分为两类,一类是负责 server 端配置的,另一类是负责用户端配置的。负责 server 端配置的一般会放在config.xml文件中,负责用户端配置的一般会放在users.xml文件中。当然如果都放在config.xml文件中也是可以的,但按照习惯还是会将二者分为两个文件进行配置。所后续不在将config.xml和users.xml分开来介绍下面的功能,都是可以通用的。原创 2023-02-24 21:09:01 · 3400 阅读 · 0 评论 -
ClickHouse 集群快速搭建
本文介绍 ClickHouse 集群的搭建方法,为了方便和便于读者尝试,我们使用 docker 的方式来启动 ClickHouse Server 和 Zookeeper,并且后续会提供一套自动化脚本来方便读者搭建一套集群来尝试使用 ClickHouse。这里使用的 ClickHouse docker 镜像版本为latest,因为只是测试使用,新版本会有更多的新功能让我们来体验。Zookeeper docker 镜像为 3.6.1 版本,这个版本是生产上运行比较稳定的且提供 Prometheus 监控的版本。原创 2023-02-23 15:18:28 · 1532 阅读 · 0 评论 -
【ClickHouse系列】如何用 ClickHouse 生成随机测试数据
ClickHouse 从 22.10 版本开始增加了均匀分布和非均匀分布函数来支持生成具有高度灵活性的随机数据。原创 2023-02-17 23:46:38 · 2051 阅读 · 0 评论 -
Bytebase 搭建及如何对接 ClickHouse
Bytebase 是一个数据库 CI/CD 工具,提供 SQL 审核、变更、留档、回滚等功能,本文对 Bytebase 的使用做个简要说明。原创 2023-02-14 23:46:04 · 1339 阅读 · 0 评论 -
【clickhouse系列】搭建clickhouse集群仅仅需要一个脚本而已
本例子可以支持灵活配置m*n的clickhouse集群使用方法分为执行脚本和配置文件两个配置文件config.toml机器的用户名和密码要配置成一样的# 分片数shard_num = 2# 副本数replica_num = 2# 机器ip列表host_list = ["10.0.0.2","10.0.0.3","10.0.0.4","10.0.0.5"]# zk ip或域名列表zk_host_list = ["10.0.0.6","10.0.0.7","10.0.0.8"]# 机器原创 2021-07-01 20:41:21 · 424 阅读 · 0 评论 -
【ClickHouse系列】使用clickhouse-operator搭建clickhouse集群
clickhouse-operator特性根据提供的自定义资源规范创建ClickHouse群集自定义存储资源调配(VolumeClaim模板)自定义pod模板自定义service模板ClickHouse配置和设置(包括Zookeeper集成)柔性模板ClickHouse集群自动扩展ClickHouse版本升级ClickHouse指标导出Prometheus要求:Kubern...原创 2020-03-18 10:25:51 · 4626 阅读 · 2 评论 -
【ClickHouse系列】ClickHouse各类函数用法详解
一、算数函数-->>>>>> 算数函数(数学上的计算)--求和SELECT plus(12, 21), plus(10, -10), plus(-10, -10);--差值SELECT minus(10, 5), minus(10, -10),minus(-10, -10);--积SELECT multiply(12, 2), multiply(12, -2), multiply(-12, -2);--平均值SELECT divide(12, 4), d转载 2020-09-14 22:04:02 · 11793 阅读 · 2 评论 -
【ClickHouse源码】各类存储引擎的实现原理
注册各类存储引擎在ClickHouse的Server端启动时会注册很多内容,包括存储引擎、函数、表函数等等,源码Server.cpp,如下:int Server::main(const std::vector<std::string> & /*args*/){ ...... registerFunctions(); registerAggregateFunctions(); registerTableFunctions(); register原创 2020-11-19 13:16:06 · 2126 阅读 · 1 评论 -
【ClickHouse原理】数据目录完全解析
本文主要介绍一下ck数据目录都包含什么文件,以及文件内容都是什么,并着重介绍一些二进制文件的格式及内容。首先按照如下规则创建表,用于后续数据的对照查询#创建表CREATE TABLE default.mt( `a` Int32, `b` Int32, `c` Int32, INDEX `idx_c` (c) TYPE minmax GRANULARITY 1)ENGINE = MergeTreePARTITION BY a ORDER BY bSETTING原创 2021-01-30 21:33:55 · 1994 阅读 · 0 评论 -
【ClickHouse源码】ReplicatedMergeTree之insert流程
ReplicatedMergeTree之insert流程核心方法在:dbms/src/Storages/MergeTree/ReplicatedMergeTreeBlockOutputStream.cpp中的write方法void ReplicatedMergeTreeBlockOutputStream::write(const Block & block){ last_bl...原创 2020-03-30 20:01:00 · 1902 阅读 · 0 评论 -
【ClickHouse系列】分布式下的IN/JOIN及GLOBAL关键字
分布式下的IN/JOIN如果是在单机情况下,涉及到IN/JOIN时是没有什么问题的,但是在分布式情况下就不一样了,ClickHouse是支持多分片多副本的,创建表也提供了友好的ON CLUSTER [name]的方式,所以就是建议使用者将数据进行分片处理增加读的效率,但也随之产生了单节点数据不完整的问题。如果SQL中涉及子查询就不得不有特殊的处理方式。ClickHouse中的分布式子查询在ClickHouse中为了方便做分布式查询,特意提供了Distributed表引擎,这个表引擎实际上是不存储数据的原创 2020-08-25 20:38:16 · 5720 阅读 · 2 评论 -
【ClickHouse源码】MergeTree重启加载数据过程
ClickHouse有很多表引擎,用的最多的是ReplicatedMergeTree,但是ReplicatedMergeTree也是基于MergeTree进行的增强,核心还是MergeTree,下面主要介绍一下MergeTree在ClickHouse重启时是如何加载数据的。MergeTree加载数据过程server端的启动是在Server.cpp中main()方法开始的,所以加载数据的过程也包含其中,由于代码过长只留下部分关键代码,如下:int Server::main(const std::vect原创 2021-01-13 21:08:39 · 1962 阅读 · 0 评论 -
【ClickHouse系列】MergeTree引擎介绍
MergeTree引擎介绍Clickhouse 中最强大的表引擎当属 MergeTree (合并树)引擎及该系列(*MergeTree)中的其他引擎。MergeTree 系列中的引擎目的在于将大量数据插入表中,数据迅速地一部分一部分写入表中,然后在后台通过某些规则进行数据合并。这种方法比插入期间连续重写存储中的数据效率更高。特点数据存储按主键排序支持数据分区支持数据复制(R...原创 2020-03-21 23:18:45 · 1962 阅读 · 2 评论 -
【ClickHouse系列】ClickHouse之zk目录结构说明
zk目录结构创建基于zk的ck集群(3zk-2shards-2replicas),主要信息如下:metrika1.xml<?xml version="1.0" encoding="utf-8"?><yandex> <clickhouse_remote_servers> <default> <shard> <...原创 2020-04-01 14:04:18 · 4213 阅读 · 5 评论 -
【ClickHouse源码】Distributed之表select流程
Distributed之表查询流程Distributed表引擎不会真实存储数据,是ClickHouse提供的一个分布式查询引擎,其查询原理大致概括起来就是将server端接收到的查询请求进行重写,并发送到指定的多个server端去执行查询,最终由接到请求的server端进行汇总,最后返回给client端。这个过程可以通过源码来更清晰的了解以下。首先,从BlockInputStreams Sto...原创 2020-04-08 22:33:29 · 1845 阅读 · 0 评论 -
【ClickHouse源码】通过CachedReadBufferFromRemoteFS了解Cache缓存机制
CachedReadBufferFromRemoteFS为支持本地Cache封装的一个ReadBuffer。下面主要介绍CachedReadBufferFromRemoteFS的3个函数,来理解ClickHouse Cache的实现。预先了解下3种读类型(ReadType):CACHED:本地缓存中已存在REMOTE_FS_READ_BYPASS_CACHE:在读远端文件时,如果本地缓存不存在,不做任何操作,直接绕过缓存读远端文件REMOTE_FS_READ_AND_PUT_IN_CACHE:原创 2022-05-19 12:25:08 · 889 阅读 · 0 评论 -
【ClickHouse系列】ClickHouse 轻量级删除原理
ClickHouse 轻量级删除原理介绍及其使用方法原创 2022-12-27 23:26:38 · 3022 阅读 · 1 评论 -
【ClickHouse源码】Distributed之表insert流程
Distributed表引擎介绍Distributed表引擎是一种特殊的表引擎,自身不会存储任何数据,而是通过读取或写入其他远端节点上的表进行数据处理的表引擎。该表引擎需要依赖各个节点的本地表来创建,本地表的存在是Distributed表创建的依赖条件,创建语句如下:CREATE TABLE {teble} ON CLUSTER {cluster}AS {local_table}ENGINE= Distributed({cluster}, {database}, {local_table},{pol原创 2020-11-19 13:03:33 · 2377 阅读 · 0 评论 -
【ClickHouse系列】ClickHouse常用聚合函数的使用方法
本文主要介绍下 ClickHouse 中常用的聚合函数。转载 2022-12-01 22:05:45 · 4290 阅读 · 0 评论 -
【ClickHouse实践】ClickHouse中HTTP错误码处理
当您通过 ClickHouse HTTP 接口提交查询时,任何错误都会在响应标头中的一个名为的特殊字段中返回。原创 2022-11-23 22:06:37 · 1072 阅读 · 0 评论 -
【ClickHouse实践】基于S3实现副本间数据零拷贝(实验性)
本文仅仅是在了解原理的基础上,在不改动源码的情况下做的一种实验性尝试。实验介绍实验环境:两台CentOS7云主机(规格不限),都安装20.8.3.18版本ck,多读和一读原理一样,所以只选择两台机器做功能测试实验方法及于预期:两个集群都创建相同的S3策略的表,A集群执行写入,在A集群会生成S3的元信息文件,将A集群元信息文件通过rsync同步到B集群同表的detached目录下,对B集群该表执行attach partition加载S3元信息,最终可实现相同数据的读取。配置ck及验证配置s3.x原创 2021-01-30 21:38:42 · 946 阅读 · 0 评论 -
【ClickHouse源码】ReadIndirectBufferFromRemoteFS介绍
ReadIndirectBufferFromRemoteFS直译过来就是针对远程文件系统创建的间接的ReadBuffer,这是由于远程文件系统并不能像本地文件系统一样直接操作文件,所以通过ReadBuffer抽象出了必要的接口,让各种ReadBuffer去实现,ReadIndirectBufferFromRemoteFS就是其中之一。头文件如下:class ReadIndirectBufferFromRemoteFS : public ReadBufferFromFileBase{public:原创 2022-05-19 21:02:20 · 303 阅读 · 0 评论 -
【ClickHouse系列】使用S3实现ClickHouse的无限量存储
首先说明此S3并非ClickHouse支持的S3表引擎,而是可以使用MergeTree表引擎直接将数据存到S3中。可能被第一句话绕蒙了,先来大致了解下这两种方式:S3表引擎和DiskS3S3表引擎创建S3表,注意原生S3表引擎只支持S3的公有读写,不支持配置AK/SKCREATE TABLE s3_test ( dt Date, id Int64, data String) ENGINE = S3('http://{s3url}/{bucket}/{file}', 'CSV原创 2020-09-14 21:16:38 · 4145 阅读 · 2 评论 -
【clickhouse系列】为什么有空part存在
问题有时候偶尔会发现ClickHouse会存在许多空part,并且一直不会被删除。一般是因为为表设置了TTL的问题,早期版本会保留空part,查询part也会返回0行。SELECT partition, name, active, rowsFROM system.partsWHERE (table = 'query_log') AND active┌─partition──┬─name────────────────────────┬─active─┬──rows原创 2021-05-18 19:10:42 · 621 阅读 · 0 评论 -
【ClickHouse源码】ReplicatedMergeTree之表创建流程
ReplicatedMergeTree之表创建流程复制流是后台进行的,是异步的,在ReplicatedMergeTree创建时会自动启动很多个异步task,可以看下其构造函数StorageReplicatedMergeTree::StorageReplicatedMergeTree( const String & zookeeper_path_, const Strin...原创 2020-04-03 10:30:08 · 3937 阅读 · 2 评论 -
【clickhouse系列】如何做到数据实时更新
UPDATE+Optimize方式用法建表及插入数据CREATE TABLE tb_test( ts DateTime, uid String, biz String) ENGINE = MergeTree() ORDER BY (ts) SETTINGS index_granularity = 8192;INSERT INTO tb_test VALUES ('2019-06-07 20:01:01', 'a', 'a1');INSERT INTO tb_te原创 2021-06-18 09:34:35 · 3345 阅读 · 6 评论 -
【ClickHouse系列】写入频繁时为什么易产生Too many part问题
问题现象在发现GET_PART类型的queue非常大的情况下,在system.replication_queue表中出现以下信息:node_nametypepostpone_reasonqueue-0000000120MERGE_PARTSNot executing log entry queue-0000000120 of type MERGE_PARTS for part xxx_31402_31418_2 because part xxx_31412_31412_0 is原创 2021-10-28 23:05:26 · 7020 阅读 · 6 评论 -
【ClickHouse系列】ClickHouse表引擎MergeTree实践
MergeTree系列Log、Special、Integration主要用于特殊用途,场景相对有限。MergeTree系列才是官方主推的存储引擎,支持几乎所有ClickHouse核心功能。以下重点介绍MergeTree、ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree、SummingMergeTree、Agg...转载 2020-03-22 13:31:39 · 4535 阅读 · 3 评论 -
【ClickHouse系列】Kafka表引擎如何回置offset
本文目的是给出一种ClickHouse中如何在Kafka表引擎出现异常或者需要再次消费之前已消费过的数据的场景kafka下载地址wget https://mirror.bit.edu.cn/apache/kafka/2.6.0/kafka_2.12-2.6.0.tgz脚本在kafka的bin路径下建表语句这里以CSV格式为例,其余格式可以参考另一篇:【ClickHouse系列】Kafka引擎表消费CSV/JSON/AVRO类型数据CREATE TABLE test ( C_CU原创 2020-11-28 23:29:27 · 1421 阅读 · 0 评论 -
【clickhouse系列】使用operator-sdk快速开发clickhouse-operator
ch-operator是一个基于operator-sdk框架的实验性的clickhouse operator项目,目的是为了熟悉operator-sdk框架的使用以及clickhouse集群怎样适配k8s。operator-sdk安装安装最新版本brew install operator-sdk指定版本安装export RELEASE_VERSION=v0.13.0curl -LO https://github.com/operator-framework/operator-sdk/relea原创 2021-04-05 12:27:18 · 567 阅读 · 0 评论 -
【ClickHouse源码】MergeTree之Alter、Merge、Mutation主要方法介绍
文章目录MergeTree1. BackgroundJobExecutor1.1 startup1.2 IBackgroundJobExecutor::start()1.3 jobExecutingTask1.4 getDataProcessingJob2. alter2.1. getMutationCommands2.2 changeSettings2.3 alterTable2.4 startMutation2.5 waitForMutation3. merge3.1 selectPartsToMerg原创 2021-10-28 23:24:35 · 1268 阅读 · 0 评论 -
【ClickHouse系列】Kafka引擎表消费CSV/JSON/AVRO类型数据
ClickHouse支持的导入导出数据格式是非常丰富的,具体可以查看官方文档:https://clickhouse.tech/docs/en/interfaces/formats。本文主要针对三种类型CSV/JSON/AVRO如何创建Kafka表引擎进行详细说明。前置知识Kafka表引擎参数CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]( name1 [type1] [DEFAULT|MATERIALIZE原创 2020-11-28 23:02:52 · 3310 阅读 · 3 评论 -
【ClickHouse系列】clickhouse-copier是如何进行数据迁移的
clickhouse-copier是官方的数据迁移工具,用于多个集群之间的数据迁移。详细的配置可以参照官方文档:https://clickhouse.tech/docs/en/operations/utilities/clickhouse-copier/clickhouse-copier配置文件配置文件有两个,一个是zk的zookeeper.xml配置,一个是迁移任务的task.xml配置。zookeeper.xml配置文件<yandex> <logger>原创 2020-12-22 19:31:37 · 3378 阅读 · 4 评论 -
【ClickHouse源码】两种Merge算法(Horizontal和Vertical)的使用场景
/// parts should be sorted.MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTemporaryPart( const FutureMergedMutatedPart & future_part, const StorageMetadataPtr & metadata_snapshot, MergeList::Entry & merge原创 2022-05-19 20:46:20 · 1329 阅读 · 0 评论