![](https://img-blog.csdnimg.cn/20200723111732993.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
clickhouse
文章平均质量分 59
ClickHouse是俄罗斯的Yandex公司于2016年开源的用于联机分析(OLAP)的面向列的数据库管理系统,由于出色的性能,正成为OLAP领域的主流数据库
高并发
多年clickhouse使用经验,熟悉java开发大数据开发
展开
-
clickhouse 上下线表
下线:DETACH TABLE|VIEW|DICTIONARY [IF EXISTS] [db.]name [ON CLUSTER cluster] [PERMANENTLY]上线:ATTACH TABLE|VIEW|DICTIONARY [IF EXISTS] [db.]name [ON CLUSTER cluster] [PERMANENTLY]笔者删表喜欢直接drop table,最近遇到drop表时,表正在被写着或者其他操作,从而导致删表失败,...原创 2022-08-03 10:19:40 · 2164 阅读 · 0 评论 -
clickhouse(19) mysql database映射
1.背景业务中需要使用mysql库映射,在clickhouse中查询mysql的元数据2.建库语句CREATE DATABASE database_name on cluster ck_clusterENGINE = MySQL('ip:host', 'database', 'user', 'password')SETTINGS mysql_datatypes_support_level = '';...原创 2022-05-25 15:09:11 · 1110 阅读 · 2 评论 -
clickhouse优缺点总结
1.优点数据按列存储,非常适合聚合计算。数据压缩空间大,减少io传输,但数据的解压缩需要消耗cpu。索引是类似跳表结构,并不是mysql的b树结构,不需要满足最左原则。写入速度非常快,建议写本地表而不是all表。2.缺点不支持事务,所以不存在隔离级别,所以定位是分析性数据库。不支持高并发,官方建议qps为100,可以通过修改config.xml的max_concurrent_queries配置。采用了并行处理机制,即使一个查询,也会用服务器一半的CPU去执行,所以不能支持高并发场景,默原创 2022-03-18 14:54:43 · 11733 阅读 · 0 评论 -
ClickHouse(十八)数据有限更新
1.概述使用clickhouse的聚合函数,可以实现数据的有限更新,从而减少使用optimize table带来的性能开销。2.测试数据表CREATE TABLE temp.iop_user_profile_list on cluster ck_cluster( `uid` Int64 COMMENT '用户唯一标识', `reg_time` DateTime COMMENT '注册时间', `nickname` String COMMENT '昵称', `phone原创 2022-02-21 12:40:26 · 1726 阅读 · 0 评论 -
用户画像(二):明细uid写入clickhouse本地表
1.背景导入uid集合的csv文件到ck中,由于导入文件的uid集合可能过大,写all可能存在阻塞问题,所以改为使用jdbc形式写本地表。2.思路如下是ck普通的一张替换引擎表,当往all写入数据的时候,all表会将你写入的数据,按uid的intHash32的值,取余12来写入到各个分片,如果我们也要写本地表,也可以按照这个方式,将数据hash取余分成12份(笔者的机器是12分片),通过查询system.clusters获取ck各个分片地址,拼接成jdbc的方式,写入到每个分片中。create t.原创 2022-02-17 18:46:47 · 1104 阅读 · 0 评论 -
ClickHouse sql优化技巧
1.使用分区clickhouse的表,走索引和非索引效率差距很大,在使用一个表进行查询时,必须限制索引字段。避免扫描全表确定索引分区字段,可以用show create table default.ods_user,查看本地表的建表语句,partition by 的字段就是分区字段。如果需要限制的时间和分区字段不是同一个字段时,可以扩大分区字段取数区间,然后再过滤2.distinct 和 group by优先使用group by,distinct满足不了的情况,可以使用group by,如果c原创 2022-01-18 14:51:15 · 4368 阅读 · 2 评论 -
ClickHouse AggregatingMergeTree
1.介绍该表引擎继承自MergeTree,可以使用 AggregatingMergeTree 表来做增量数据统计聚合。如果要按一组规则来合并减少行数,则使用 AggregatingMergeTree 是合适的。AggregatingMergeTree是通过预先定义的聚合函数计算数据并通过二进制的格式存入表内。是SummingMergeTree的加强版,SummingMergeTree能做的是对非主键列进行sum聚合,而AggregatingMergeTree则可以指定各种聚合函数。2.建表语句CRE原创 2021-10-14 15:41:23 · 1329 阅读 · 0 评论 -
ClickHouse SummingMergeTree
1.介绍求和引擎继承自 MergeTree。区别在于,当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值。如果主键的组合方式使得单个键值对应于大量的行,则可以显著的减少存储空间并加快数据查询的速度。2.建表语句CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]( name1 [type1] [DEF原创 2021-10-13 11:43:09 · 618 阅读 · 0 评论 -
ClickHouse分布式IN & JOIN 查询的避坑指南
当数据表包含多个分片的时候,我们需要将普通的本地查询转换为分布式查询。当然,这个转换动作是不需要用户自己进行的,在ClickHouse里面会由Distributed表引擎代劳。Distributed表引擎的定位就好比是一个分表的中间件,它本身并不存储数据,而是分片的代理,能自动的将SQL查询路由到每个分片。对于分片概念、定义方式以及相关表引擎作用等内容,这里就不再赘述了,我在ClickHouse这本书中对它们都有过详细的论述。总而言之,分布式查询是面向Distributed表引擎的,而Distribu转载 2021-08-12 17:37:44 · 1752 阅读 · 0 评论 -
ClickHouse(十七)轮询写本地表之多分片动态数据源
前言笔者操作的clickhouse集群,配置是24台机、12分片、2副本的,在写入数据原创 2021-06-22 15:19:23 · 2624 阅读 · 4 评论 -
ClickHouse (十六)异常处理总结
DB::Exception: Nested type Array(String) cannot be inside Nullable type (version 20.4.6.53 (official build))原因:字段类型是Nullable(String),在使用一些字符串函数如splitByString,他们对Nullable类型是不支持的,需要转成String。解决的话,使用cast强转一下就行:select splitByString(',',cast(col as String)).原创 2021-05-10 14:58:12 · 15254 阅读 · 4 评论 -
ClickHouse (十五)解析json数据
背景使用字符串行式保存在ClickHouse的json数据,需要我们解析提取相关字段,将json行转多列。如提取json数据的各个字段的值,以方便查询。WITH '[{"name":"天台","tall":100,"model":"M779011"},{"name":"楼顶","tall":90,"model":"M669011"}]' AS new, 'S123' AS numSELECT new, num┌─new───────────────────原创 2021-03-02 18:29:39 · 22922 阅读 · 2 评论 -
ClickHouse(十四)ClickHouse技术分享ppt
昨天在公司做了ClickHouse的技术分享介绍,给公司的小伙伴们分享了ClickHouse的初认识、特性、使用场景,以及与我们旧数据开发架构的对比。图片很多,民那桑慢慢看超喜欢ClickHouse官网的这两张说明行式与列式储存区别的动图:好了,就介绍到这里吧,继续加油民那桑!...原创 2021-02-26 13:37:18 · 3886 阅读 · 8 评论 -
clickhouse 十三 (操作数据表)
ALTER 仅支持 *MergeTree ,Merge以及Distributed等引擎表。使用MergeTree做测试表:CREATE TABLE test.tmp_uid_info( `uid` Int32, `alias` Int32, `sex` String, `totalDate` Date, `source` String, `name` String)ENGINE = MergeTree()PARTITION BY totalDa.原创 2021-02-05 16:06:18 · 2734 阅读 · 1 评论 -
ClickHouse 十二 (数据文件导入)
导入文本文件建表# 本地表 CREATE TABLE test.tmp_uid_info( `uid` Int32, `alias` Int32, `sex` String, `totalDate` Date, `source` String, `name` String)ENGINE = ReplicatedMergeTree('/clickhouse/activity/tables/{shard}/tmp_uid_info', '{replic原创 2021-01-23 16:17:55 · 13724 阅读 · 9 评论 -
clickhouse 十一 (MergeTree引擎)
MergeTree引擎介绍MergeTree(合并树)引擎是 clickhouse 中最为先进的表引擎,在写⼊数据时,数据总会以数据⽚段的形式写⼊磁盘,且数据⽚段不可修改。为了避免⽚段过多, clickhouse会通过后台线程,定期合并这些数据⽚段,属于相同分区的数据⽚段,会被合成⼀个新的⽚段。这种数据⽚段往复合并的特点,也正是合并树的名称由来。其主要特征有:存储的数据按照主键排序:通过创建稀疏索引,从而加快数据查询速度数据分区,通过主键指定分区字段支持数据副本支持数据采样列和表的TTL使原创 2021-01-20 15:23:20 · 489 阅读 · 0 评论 -
ClickHouse 十 (查看后台进程并杀死进程)
ClickHouse自带用于记录系统信息的系统库system,通过processes表,我们可以查看当前连接的进程信息。select query_id,read_rows,total_rows_approx,memory_usage, initial_user,initial_address,elapsed,queryfrom system.processes;# 字段含义# query_id 查询id,# read_rows 从表中读取的行数,# total_rows_app原创 2021-01-06 17:19:53 · 6339 阅读 · 1 评论 -
clickhouse 九(同步kafka数据)
1 步骤kafka作为消息队列通常用来收集各个服务产生的数据,而下游各种数据服务订阅消费数据,本文通过使用clickhouse 自带的kafka 引擎,来同步消费数据。同步步骤:kafka中创建topic,创建消费者并消费该topic(查看消费情况)建立目标表(通常是MergeTree引擎系列),用来存储kafka中的数据;建立kafka引擎表,用于接入kafka数据源;创建Materialized View(物化视图), 监听kafka中的数据并将数据同步到clickhouse的目标表中;原创 2020-12-30 16:54:16 · 8061 阅读 · 21 评论 -
ClickHouse 八(TTL 时效性)
什么是TTL?TTL的意思是Time To Live表示数据的存活时间。由于数据的价值会根据保存的时间成反比,出于存储成本的考虑通常只会保留近一年的数据。而在MergeTree (合并树)引擎中,可以通过设置TTL来轻松管理数据的存活时间,使数据的价值最大化。在ClickHouse 中,TTL可以设置值的生命周期,它既可以为整张表设置,也可以为每个列字段单独设置。表级别的 TTL 还会指定数据在磁盘和卷上自动转移的逻辑。TTL 表达式的计算结果必须是 日期(date) 或 日期时间(datetime),原创 2020-12-22 20:51:04 · 4632 阅读 · 1 评论 -
clickhouse 七(位图函数)
位图函数用于对两个位图对象进行计算,对于任何一个位图函数,它都将返回一个位图对象,例如and,or,xor,not等。位图对象有两种构造方法。一个是由聚合函数groupBitmapState构造的,另一个是由Array Object构造的。同时还可以将位图对象转化为数组对象。我们使用RoaringBitmap实际存储位图对象,当基数小于或等于32时,它使用Set保存。当基数大于32时,它使用RoaringBitmap保存。这也是为什么低基数集的存储更快的原因。1 位图的构建与转化bitmapBu.原创 2020-11-30 17:20:51 · 5452 阅读 · 6 评论 -
clickhouse 六(使用mysql表引擎)
1.说明:clickhouse使用mysql表引擎可以与mysql数据库中的数据表建⽴映射,并通过SQL向其发起远程查询或插入数据2.语法规则:引擎定义:CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], name2 [type2] [DEFAULT|MATERIALIZED|A原创 2020-10-19 17:49:03 · 5683 阅读 · 5 评论 -
clickhouse 五(分布式表原理解析)
1.Distributed引擎介绍Distributed表引擎是分布式表的代名词,它⾃身不存储任何数据,⽽是作为数据分⽚的透明代理,能够⾃动的路由数据⾄集群中的各个节点,即分布式表需要和其他数据表⼀起协同⼯作。分布式表会将接收到的读写任务,分发到各个本地表,而实际上数据的存储也是保存在各个节点的本地表中。 原理如下图:2.创建分布式表使用on cluster语句在集群的某台机器上创建一下代码,即可在每台机器上创建本地表和分布式表,⼀张本地表对应着⼀个数据分⽚,分布式表通常以本地表加“_al原创 2020-10-15 11:42:39 · 8333 阅读 · 9 评论 -
clickhouse 四(查看数据库和表的容量大小)
说明在mysql中information_schema这个数据库中保存了mysql服务器所有数据库的信息,而在clickhouse,我们可以通过system.parts查看clickhouse数据库和表的容量大小、行数、压缩率以及分区信息。在此通过测试数据库来说明。1.查看数据库容量、行数、压缩率SELECT sum(rows) AS `总行数`, formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`, fo原创 2020-10-13 16:13:39 · 13118 阅读 · 1 评论 -
clickhouse的argMin()和argMax()函数
1.语法规则函数语法argMin(arg,val)计算最小值的arg值。如果val的最小值有几个不同的arg值,则遇到的第一个值是输出。argMax(arg,val)计算最大值的参数值。如果存在多个不同的arg值来表示val的最大值,则遇到的第一个值是输出。argMin() 与argMax() 其实是相反的,一个求多值中最小,一个求多值中最大。我们看一下官网的介绍,以及一个求薪水最高的员工的例子:求最高薪水的员工:┌─user─────┬─salary─┐│原创 2020-09-21 11:17:56 · 8813 阅读 · 0 评论 -
Clickhouse分布式查询IN/JOIN与GLOABL IN GLOABL JOIN的区别
Clickhouse分布式查询IN/JOIN与GLOABL IN GLOABL JOIN的区别当使用常规IN时,查询被发送到远程服务器,并且它们中的每个服务器都在运行子查询 IN 或 JOIN 条款,除非每个远程服务器都存有全部数据,否则会造成数据不准确的情况使用 GLOBAL IN / GLOBAL JOINs,如select * from tablea where xx GLOABL in (select id from tableb )这样的形式, 首先从所有的远程服务器中获得tableb关于转载 2020-08-13 16:51:47 · 1646 阅读 · 0 评论 -
clickhouse 二(springboot+mybatis配置clickhouse,实现插入查询)
开发步骤1.添加maven依赖2、配属数据源3、参数配置3、Druid连接池配置5、Mapper.xml6、Mapper接口7.controller接口8.创建一个clickhouse表,然后插入几条数据测试一下9.测试1.添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st原创 2020-07-31 16:26:51 · 22995 阅读 · 34 评论 -
clickhouse 一(centos7安装clickhouse,设置用户名密码)
准备操作系统:centos7系统其实也就是安装上,ch的官网描述很清楚了,https://github.com/Altinity/clickhouse-rpm-install自己也就做个笔记,记录一下安装1.首先安装一下curlyum install -y curl2.添加clickhouse源curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | bash3.安装原创 2020-07-23 09:47:15 · 7308 阅读 · 2 评论 -
clickhouse 三(clickhouse函数使用总结)
1、日期类函数1.1 时间或日期截取函数(to)—— 返回非日期函数说明示例结果toYear()获取日期或时间日期的年份toYear(toDateTime(‘2018-12-11 11:12:13’)) toYear(toDate(‘2018-12-11’))返回 2018 返回 2018toMonth()取日期或时间日期的月份toMonth(toDateTime(‘2018-12-11 11:12:13’)) toMonth(toDate(‘2018-12-11原创 2020-06-30 16:24:04 · 5326 阅读 · 0 评论 -
clickhouse的可视化工具DBeaver
1.clickhouse由于其优异的查询性能,目前在大数据领域应用逐渐火热起来,由于navicat不支持clickhouse的可视化查询,我们就用DBeaver来代替navicat2.DBeaver下载DBeaver的官网 https://dbeaver.io/download/3.建立与clickhouse的连接可以直接连接ip也可以通过ssh来连接clickhouse,其实操作和n...原创 2020-04-20 12:03:01 · 32546 阅读 · 5 评论