ClickHouse的特性及读写

1 ClickHouse特性

  OLAP数据库一般有2个要求:①容量要比关系型数据库大,②在线查询的速度要快。ClickHouse这两点都满足并且还支持标准的sql,支持比较复杂的语句,支持分布式。ClickHouse的几个显著特点如下:

  (1)列式存储

  列式存储的优点:①列式存储不同于行式存储,以行为单位进行存储,行式存储更变故搜索查询。列式存储以列为单位进行存储,这样更适合做聚合计算,如求和是针对一列的数据进行求和,这一列的数据又放在一起。②行式存储每个字段类型不一致,列式存储不同的类型是不在一起的,一个数据块存储的类型都是一致的,这样的话就便于压缩,类型相同压缩算法发挥的空间就比较大,压缩比高,所以海量数据的话就能对节省磁盘空间。③因为一个数据块类型相同,压缩比高,不仅节省了磁盘空间,还节省了内存空间,可以在内存中存储更多的数据。

  列式存储的缺点:不支持事务

  (2)支持DBMS的功能

  支持的SQL和关系型数据库基本没有什么差别,支持标准SQL的大部分语法,包括DDL和DML及各种函数。虽然ClickHouse可以修改数据结构,可以删除数据,但是性能不好。

  (3)支持多种引擎

  ClickHouse与Mysql类型把表级别的存储引擎插件化,支持的引擎可以分为6大类,用的最多的是MegreTree家族

2 ClickHouse的写入

  一般关系型数据的写入基本上是随机写,为了方便查询,要知道插入的位置,找到合适的位置插入。写入操作本事不重,但是要找到合适的位置就是个问题,随机的读写,每次写入位置不同,机械磁盘的磁头就不同的转找位置,所以写入能力比较弱。像HBASE,也是随机写入,但是采用LSM树进行是异步的写入,先把数据写到内存,就完事了,要插入的位置交给磁盘去处理。

  ClickHouse也是采用了LSM Tree结构数据写入后定期在后台合并。写入操作是先写到内存,然后在写磁盘的时候不是写到对应的位置,而是直接写到一个临时的分区里面,全部都堆在内存数据量大的话很麻烦,然后会简单的做个排序,后台会异步周期性的将临时分区的数据合并到整个存储分区中

3 ClickHouse的读取

  ClickHouse将数据划分为多个分区(partition),每个分区再进一步划分为多个索引段(index ganularity)。把分区里面的数据划分成细粒度的好处是可以多核并行处理。

  假设一个数据有3个分区,执行一条查询SQL没有指定任何分区的话就利用多线程,把SQL提交到每个分区查询,每个CPU现成管理一个分区的数据查询,最后合并结果。这种极致的并行处理能力极大的降低了查询的延迟。但是因为查询是多线程的,所以非常消耗CPU,每条SQL都是并行的,这样的话带来的问题就是并行查询很多SQL的时候就会并发非常高,核数不够的话CPU就会不停的在线程之间来回切换。CPU在大量线程里面轮转本事就要消耗CPU,所以开销更大。

  ClickHouse对一条SQL就已经是高并发,并行处理了,如果提交的SQL还是高并发就不适合使用ClickHouse。ClickHouse适合查询数据量比较大,SQL比较复杂的查询,他的单一SQL处理能力非常强,因为是并行的,如即席查询,或者像大屏这种低频的查询。不适合开发给用户,进行高QPS的查询业务,他的QPS理论上比Mysql还要低。

4 与标准SQL的区别

4.1 Insert

  与标准SQL基本一致,包括标准的插入

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

  以及表到表的插入

INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...

  但是和hive不一样没有insert overwrite

4.2 Update,Delete

  ClickHouse有Update和Delete的能力,可看做是Alter的一种,但是和一般的OLAP数据库不一样,称为Mutation查询。Mutation的语法,其实是数据结构的调整,本身不是以数据为单位的修正。

  Mutation是很重的操作,因为每次修改或者删除都会导致放弃目标数据原有的分区,意味着分区会被重写,假设我们以天为分区。假设一个分区内的数据有被删除或者修改了。删除的话他是把这个分区的数据重新的再建立一个新分区,没有删除的数据就会重新复制一份,老分区的数据暂时不动,做数据合并的时候他会被删除掉。我们查的时候感觉不出,其实分区已经替换了,所以是个很重的操作,而且不支持事务。Mutation支持分为两步,同步的操作时在新增数据新增分区的时候把就分区打上逻辑上的失败标记,指导触发合并的时候才会删除就数据释放磁盘空间

  所以要做Update和Delete的话尽量做批量的操作,不进行频繁的小数据操作。

  删除

ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr

  修改

ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr

4.3 Select

  select查询与标准SQL差别不大:①支持子查询②支持with子句③支持join(不推荐,join无法使用缓存)④但是不支持窗口函数⑤不支持自定义函数,mysql可以做个function自定义函数,还有存储过程,hive有个变相的方法语法上不支持,但是可以写代码自定义jar包发布成一个函数。ClickHouse是c++写的,只能通过改源码编译可能支持部分的,只能是常驻特别简单的,针对业务的函数不可能每次重编译,所以不行。⑥group by操作增加了按照维度来计算汇总的操作:with rollup(上卷)从右往左依次去掉维度汇总/with cube(立方体)从右边开始去完维度,从左边开始去维度;/with total(只计算合计)等操作

4.4 Alert

  可以根据字段或者数据结构进行调整,这种alert都是比较重,一般都是在夜里批量的操作

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

4.5 导出数据

  即席查询往往是从数据库里临时需要导出一张报表来导出execel让业务人员去用,所以导出是常用的,常用的就是csv,csvwithNames是带表头的

clickhouse-client --query="SELECT * FROM {some_table} FORMAT Avro" > file.avro

  对应的插入语句为

cat file.avro | clickhouse-client --query="INSERT INTO {some_table} FORMAT Avro"

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

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

相关文章

天池 在线编程 最大得分(DP)

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744275 2. 解题 class Solution { public:/*** param matrix: the matrix* return: the maximum score you can get*/int maximumScore(vector<vector<i…

imagick用法!

https://coderwall.com/p/9hj97w sudo apt-get install imagemagick sudo apt-get install php5-imagick sudo service apache2 restart 使用imagick类&#xff1a; http://www.wodezhan.cn/?p15转载于:https://www.cnblogs.com/vincedotnet/p/3592957.html

天池 在线编程 LR String

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744276 2. 解题 class Solution { public:/*** param s: a string* param t: a string* param n: max times to swap a l and a r.* return: return if s can …

Python中如何在一行里获取多个异常

我知道这样&#xff1a; try:# 可能错的地方 except:# 如果错了执行这里也知道这样&#xff1a; try:# 可能错的地方 except IDontLikeYourFaceException:# 给爷笑一个 except YouAreTooShortException:# 踩高跷但是我想在两个不同的异常里做同样的事&#xff0c;我能想到的办法…

DolphinScheduler对比Airflow

DolphinSchedulerAirFlow稳定性单点故障去中心化的多Master和多Worke是&#xff08;单一调度程序&#xff09;HA额外要求不需要(本身就支持HA)Celery / Dask / Mesos Load Balancer DB过载处理任务队列机制&#xff0c;单个机器上可调度的任务数量可以灵活配置&#xff0c;当…

Python中字符串格式化:%和format

Python2.6推出了[str.format()]方法&#xff0c;和原有的%格式化方式有小小的区别。那个方法更好&#xff1f; 下面的方法有同样的输出&#xff0c;它们的区别是什么&#xff1f; #!/usr/bin/pythonsub1 "python string!"sub2 "an arg"a "i am a …

jsAutomation 服务器不能创建对象(转)

var ExApp new ActiveXObject("Excel.Application") “automation服务器不能创建对象”的问题的解决方案大全本人工作中的应用系统都是jsp的&#xff0c;大量javascript程序&#xff0c;一旦出“automation服务器不能创建对象”问题&#xff0c;大量报表及查询无法保…

天池 在线编程 音乐组合

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744274 2. 解题 对60求余后&#xff0c;0, 30的为 Cn2C_n^2Cn2​&#xff0c;其余的相加等于60的&#xff0c;种类相乘 class Solution { public:/*** param …

java之NIO(Channel,Buffer,Selector)

java之NIO 1 什么是NIO Java NIO (New IO&#xff0c;Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API。NIO支持面向缓冲区的、基于通道的IO操作。NIO的三大核心部分&#xff1a;通道(Channel)&#xff0c;缓冲区(Buffer), 选择器(Selector)&#xff0c;数据总是从…

Python中对象名称前单下划线和双下划线有啥区别

单下划线 在一个类中的方法或属性用单下划线开头就是告诉别的程序这个属性或方法是私有的。然而对于这个名字来说并没有什么特别的。 引自PEP-8&#xff1a; 单下划线&#xff1a;"内部使用"的弱指示器。比如&#xff0c;from M import * 将不会引进用但下划线开头的…

JQUERY解析XML IE8的兼容问题

var str"xml字符串"; alert($(str).find("Row").attr("Id")); 在IE8下&#xff0c;这段脚本无法运行&#xff0c;&#xff0c;而在IE9以上的版是正常的 IE8浏览器只能强制把字符串转成XML ajaxfxml new ActiveXObject("Microsoft.XMLDOM&q…

LeetCode 1652. 拆炸弹(前缀和)

文章目录1. 题目2. 解题1. 题目 你有一个炸弹需要拆除&#xff0c;时间紧迫&#xff01;你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码&#xff0c;你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 &#xff0c;将…

Hadoop DistCp工具简介及其参数

1 概述 DistCp&#xff08;分布式拷贝&#xff09;是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发&#xff0c;错误处理和恢复&#xff0c;以及报告生成。 它把文件和目录的列表作为map任务的输入&#xff0c;每个任务会完成源列表中部分文件的拷贝…

MYSQL从入门到精通

SQL是数据库的查询语言&#xff0c;语法结构简单&#xff0c;相信本文会让你从入门到熟练。 掌握SQL后&#xff0c;不论你是产品经理、运营人员或者数据分析师&#xff0c;都会让你分析的能力边界无限拓展。别犹豫了&#xff0c;赶快上车吧&#xff01; SQL最小化的查询结构如下…

LeetCode 1653. 使字符串平衡的最少删除次数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s &#xff0c;它仅包含字符 a 和 b​​​​ 。 你可以删除 s 中任意数目的字符&#xff0c;使得 s 平衡 。 我们称 s 平衡的 当不存在下标对 (i,j) 满足 i < j 且 s[i] b 同时 s[j] a 。 请你返回使 s 平衡 的 最少 删除…

DistCp迁移Hive数据过程中源集群增加删除文件等场景测试

1 概述 由于在数据迁移过程中&#xff0c;上层任务仍在运行&#xff0c;会出现源集群新增文件及删除文件的情况&#xff0c;因此进行测试 2 需要同步的数据文件说明 源集群&#xff1a;192.168.40.100:8020&#xff0c;目标集群&#xff1a;192.168.40.200:8020   数据目录及…

CentOS6.0 yum php mcrypt 扩展安装问题

基本原理是&#xff1a;首先使mcrypt软件能够运行&#xff0c;然后安装php扩展模块&#xff0c;并在php.ini配置。 这里注意的是mcrypt软件依赖libmcrypt和mhash两个库&#xff0c;所以安装配置顺序从右至左 I 下载安装mcrypt 1.先去http://www.sourceforge.net 下载Libmcrypt,…

我不想用for循环

为什么要挑战自己在代码里不写for loop&#xff1f;因为这样可以迫使你去使用比较高级、地道的语法或库。文中以python为例子&#xff0c;讲了不少大家其实在别人的代码里都见过、但自己很少用的语法。 这是一个挑战。我要你避免在任何情况下写for循环。同样的&#xff0c;我也…

LeetCode 1654. 到家的最少跳跃次数(BFS)

文章目录1. 题目2. 解题1. 题目 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位置&#xff08;即往右跳&#xff09;。它可以 往后 跳恰好 b 个位置&#xff08;即往左跳&…

一台服务器上部署多个Terracotta的方法

在window server 2003 下&#xff0c;利用apache2.2.11tomcat6terracotta 群集不能复制session&#xff08;http://forums.terracotta.org/forums/posts/list/2342.page&#xff09; 其中提到更新服务器配置的方法&#xff1a; bin/tim-get.sh upgrade tc-config.xml 实际upgra…