ClickHouse基本操作(二)
一、先来说一下,ClickHouse为啥快
- MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快;
- ClickHouse不支持事务,不存在隔离级别。这里要额外说一下,有人觉得,你一个数据库都不支持事务,不支持ACID还玩个毛。ClickHouse的定位是分析性数据库,而不是严格的关系型数据库。又有人要问了,数据都不一致,统计个毛。举个例子,汽车的油表是100%准确么?为了获得一个100%准确的值,难道每次测量你都要停车检查么?统计数据的意义在于用大量的数据看规律,看趋势,而不是100%准确。
- IO方面,MySQL是行存储,ClickHouse是列存储,后者在count()这类操作天然有优势,同时,在IO方面,MySQL需要大量随机IO,ClickHouse基本是顺序IO。
- 有人可能觉得上面的数据导入的时候,数据肯定缓存在内存里了,这个的确,但是ClickHouse基本上是顺序IO,用过就知道了,对IO基本没有太高要求,当然,磁盘越快,上层处理越快,但是99%的情况是,CPU先跑满了(数据库里太少见了,大多数都是IO不够用)。
二、创建库
CREATE/ATTACH DATABASE zabbix ENGINE = Ordinary;
ATTACH 也可以建库,但是metadata目录下不会生成.sql文件,一般用于metadata元数据sql文件被删除后,恢复库表结构使用
三、创建本地表
CREATE TABLE test02( id UInt16,col1 String,col2 String,create_date date ) ENGINE = MergeTree(create_date, (id), 8192);
ENGINE:是表的引擎类型,
MergeTree:最常用的,MergeTree要求有一个日期字段,还有主键。
Log引擎没有这个限制,也是比较常用。
ReplicatedMergeTree:MergeTree的分支,表复制引擎。
Distributed:分布式引擎。
create_date:是表的日期字段,一个表必须要有一个日期字段。
id:是表的主键,主键可以有多个字段,每个字段用逗号分隔。
8192:是索引粒度,用默认值8192即可。
四、创建分布式表
CREATE TABLE distributed_table AS table ENGINE = Distributed(cluster, db, table, rand());
cluster:配置文件中的群集名称。
db:库名。
table:本地表名。
rand():分片方式:随机。
intHash64():分片方式:指定字段做hash。
Distribute引擎会选择每个分发到的Shard中的”健康的”副本执行SQL

五、DDL
如果想按集群操作,需要借助zookeeper,在config.xml中添加配置
<distributed_ddl>
<path>/clickhouse/task_queue/ddl</path>
</distributed_ddl>
一个节点创建表,会同步到各个节点
CREATE TABLE db.table [ON CLUSTER cluster] (...)
添加、删除、修改列
ALTER TABLE [db].table [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...
rename 支持*MergeTree和Distributed
rename table db.table1 to db.table2 [ON CLUSTER cluster]
truncate table db.table;不支持Distributed引擎
六、delete/update 不支持Distributed引擎
ALTER TABLE [db.]table DELETE WHERE filter_expr...
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE ...
七、分区表
按时间分区:
toYYYYMM(EventDate):按月分区
toMonday(EventDate):按周分区
toDate(EventDate):按天分区
按指定列分区:
PARTITION BY cloumn_name
对分区的操作:
alter table test1 DROP PARTITION [partition] #删除分区
alter table test1 DETACH PARTITION [partition]#下线分区
alter table test1 ATTACH PARTITION [partition]#恢复分区
alter table .test1 FREEZE PARTITION [partition]#备份分区
八、数据同步
1) 采用remote函数
insert into db.table select * from remote('目标IP',db.table,'user','passwd')
2) csv文件导入clickhouse
cat test.csv | clickhouse-client -u user --password password --query="INSERT INTO db.table FORMAT CSV"
3) 同步mysql库中表
CREATE TABLE tmp ENGINE = MergeTree ORDER BY id AS SELECT * FROM mysql('hostip:3306', 'db', 'table', 'user', 'passwd') ;
4) clickhouse-copier 工具
九、时间戳转换
select toUnixTimestamp('2018-11-25 00:00:02');
select toDateTime(1543075202);
十、其他事项
1) clickhouse的cluster环境中,每台server的地位是等价的,即不存在master-slave之说,是multi-master模式。
2) 各replicated表的宿主server上要在hosts里配置其他replicated表宿主server的ip和hostname的映射。
3) 上面描述的在不同的server上建立全新的replicated模式的表,如果在某台server上已经存在一张replicated表,并且表中已经有数据,这时在另外的server上执行完replicated建表语句后,已有数据会自动同步到其他server上面。
4) 如果zookeeper挂掉,replicated表会切换成read-only模式,不再进行数据同步,系统会周期性的尝试与zk重新建立连接。
5) 如果在向一张replicated表insert数据的时候zookeeper挂掉,这时候会抛一个异常,等到与zk重新建立连接以后,系统(其他replicated表所在server)会检查本地文件与预期文件(保存在zk上)的差别,如果是轻微的差别,直接同步覆盖,如果发现有数据块损坏或者识别不了,则将这些数据文件移动到“detached”子目录,然后重新根据zk所记录的文件信息进行副本的同步。
6) drop掉某一台server上的replicated表,不会对其他server上面的replicated表造成影响。
ClickHouse基本操作(二)的更多相关文章
- Arduboy基本操作(二)
Arduboy基本操作(二) 方向键控制物体移动 #include<Arduboy.h> Arduboy arduboy; int i,j; void setup() { arduboy. ...
- clickhouse基本操作一
常用SQL 创建表 1 2 3 4 5 6 7 CREATE TABLE b6logs( eventDate Date, impid UInt64, uid String, idfa String, ...
- ClickHouse基本操作(一)
常用SQL 创建表 1 2 3 4 5 6 7 CREATE TABLE b6logs( eventDate Date, impid UInt64, uid String, idfa String, ...
- unity基本操作二
一:error1,先断网再启动点击Manual Activation点击Save License生成相应的alf文件2,联网打开https://license.unity3d.com/manual上传 ...
- InfluxDB概念和基本操作 二
InfluxDB概念和基本操作 InfluxDB基本概念 数据格式 在 InfluxDB 中,我们可以粗略的将要存入的一条数据看作一个虚拟的 key 和其对应的 value(field value ...
- C#开源组件DocX处理Word文档基本操作(二)
上一篇 C#开源组件DocX处理Word文档基本操作(一) 介绍了DocX的段落.表格及图片的处理,本篇介绍页眉页脚的处理. 示例代码所用DocX版本为:1.3.0.0.关于版本的区别,请参见上篇,而 ...
- Django 框架基本操作(二)
一.设计表结构 1.班级表结构 表名:grade 字段:班级名称(gname).成立时间(gdate).女生总数(ggirlnum).男生总数(gboynum).是否删除(isDelete) 2.学生 ...
- (二)stm32f103~~GPIO基本操作二(按键)
GPIO基本配置之按键输入操作(通过按键控制小灯的翻转) KEY0 对用端口PE4,KEY1 对用端口PE3,这两个按键是一段接地,另一端接单片机.KEYWKUP 对用端口PA0,这个按键是一段接高电 ...
- Git 基本操作(二)
1. 分支操作 1.1 Fast-forward 当被合并分支(C4)位于合并分支(C2)的历史线上,此时的合并称为"fast-forward"; // hotfix 被合并到 m ...
随机推荐
- TVP专家眼中的云开发:定是未来,尚不完美
TVP专家眼中的云开发:定是未来,尚不完美 C++之父 Bjarne曾说,"世界上只有两种编程语言,一种被人骂,一种没人用".这句玩笑话道出了软件开发行业的真谛,不怕被人吐槽,就怕 ...
- MySQL不同存储引擎下optimize的用法
optimize命令是mysql的常用优化命令,但是在InnoDB与MyISAM这两个存储引擎中却有很大的分别.本文将对这两个常用的存储引擎进行区分跟实例解析 1.查看mysql当前的存储引擎 一般情 ...
- (数据科学学习手札82)基于geopandas的空间数据分析——geoplot篇(上)
本文示例代码和数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在前面的基于geopandas的空间数据分 ...
- 使用@vue/cli搭建vue项目开发环境
当前系统版本 mac OS 10.14.2 1.安装node.js开发环境 前端开发框架和环境都是需要 Node.js vue的运行是要依赖于node的npm的管理工具来实现 <mac OS ...
- linux之centos安装jdk以及nginx详细过程
一.安装jdk 1:首先下载jdk到本地,然后通过git 上传到linux服务器上 2:进入目录usr,并创建目录java,将jdk的压缩文件移动到该目录下 cd /usr mkdir java mv ...
- 自动安装带nginx_upstream_check_module模块的Nginx脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #!/bin/bash useradd -s /sbin/no ...
- vue中给window添加滚动监听无效的解决方案
原文链接: 点我 页面中有这么一个需求,当页面滚动到一定高度之后,页面中的某些元素进行吸顶,固定到顶部位置,或者是滚动到一定程度进行更新数据的操作.我相信不少网友查阅过类似的资料,网友给出的解决方案, ...
- Codeforce 1102 C. Doors Breaking and Repairing
Descirbe You are policeman and you are playing a game with Slavik. The game is turn-based and each t ...
- 图论--SCC缩点--Tarjan
// Tarjan算法求有向图强连通分量并缩点 /*强连通缩点与双连通缩点大同小异,也就是说将强连通分支缩成一个点之后,没有强连通,成为有向无环图,在对图进行题目的操作.*/ #include< ...
- 题目分享G 二代目
题意:有n组数,每组包含两个数,问在每组只能取一个的前提下能组成的最长的从1开始的连续自然数有几个? 分析:刚学了差分约束系统,很容易往转换成图的方向去想 将他读入的这n组数当成边读入 很容易会得到一 ...