Clickhouse入门学习

Clickhouse入门学习

一、理论知识

1.什么是Clickhouse

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS),不单单是数据库。

2.为什么用Clickhouse

因为他快,小量数据使用传统的MySQL进行CRUD特别是查询是没有问题的。但是现在互联网发展至今,数据量呈指数增加。数据条数动不动就超过亿条。及时关系型数据库加上索引以及数据库查询优化,查询速度还是慢。所以针对此类情况,Clickhouse就应运而生。

因为列式存储+特定的算法使clickhouse快。

3.Clickhouse的引擎

1.数据库引擎:MySQL

他是用来将MySQL数据库映射到Clickhouse中,个人测试,Clickhouse-MySQL引擎查询速度跟MySQL差不多,甚至不如MySQL。

2.表引擎:MergeTree Family

有以下七种:

Mergetree(父类,下面都是MergeTree的子类)

AggregatingMergeTree聚合

ReplacingMergeTree

GraphiteMergeTree石墨

CollapsingMergeTree崩溃

SummingMergeTree

VersionedCollapsingMergeTree

二、实践操作

1.安装

docker安装/linux安装(略)

2.linux如何登陆clickhouse

 #max_memory_usage  不考虑内存,如果内存不足,会崩溃
 clickhouse-client --host 192.168.0.70  --port 8123 --max_memory_usage=0

3.Clickhouse支持的第三方客户端

redash(web),DBeaver(客户端)等。

4.常用引擎

1.Mergetree

分块保存,然后在后台按规则合并,合并时没有数据丢失(不会删除重复行)

2.AggregatingMergeTree聚合

分块保存,然后在后台按规则合并,合并时会将数据进行去重(一般会有聚合函数,an聚合函数规则进行计算,多行合并为一行),常用来监视其他表的实例化视图,依附于其他表(比如MergeTree存储数据,AggregatingMergeTree用来聚合数据,方便查询)。

3.ReplacingMergeTree

在排序时(建表语句中order by 后面的字段决定)会删除重复的条目,重复数据删除仅在合并期间发生。合并发生在后台的未知时间。

5.数据类型

注意:首字母大写,尽量按规范写,否则不识别

  1. 整型:UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64

  2. 浮点:Float32,Float64单精度/双精度(F大写)

  3. 精确计算:Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S)

  4. 布尔:用UInt8 0/1

  5. 字符串:String(注意S大写) FixedString(N)

  6. UUID 16byte

  7. 时间:Date/DateTime/DateTime64

  8. 枚举:Enum

  9. 低基数:LowCardinality(data_type)

  10. 数组:array(T)

等,详细见官网(https://clickhouse.tech/docs/en/development/architecture/)

6.常见数据库操作

#查看表/数据库
show databases; 
show tables from ch_test;

#创建表/数据库
create datebase ch_test; 
CREATE TABLE ch_test.role2 
(id String, 
roleName String, 
t datetime) ENGINE = MergeTree()
ORDER BY t

#删除表/数据库
drop database ch_test; 
drop table ch_test.role;

#删除行数据(此处与mysql不同,ALTER TABLE并不是删除表,只是clickhouse特有的语法)
ALTER TABLE dwd.alarm_item_log delete  WHERE  alarm_name ='未知的错误类型'

#插入数据
insert into ch_test.role values(...),(...)

#创建视图(同mysql的view)
CREATE VIEW  [view_name] ( 字段1 字段1类型,字段2 字段2类型 ) AS SELECT  ...

#导入数据-Mysql 映射迁移
create database test_db ENGINE = MySQL('192.168.40.89:3306','remote_test','root','root')

#查询操作
select *  from  table  where  ...  group by ...  order by ...

#导入数据-外部文件(csv)导入
#1.建表
CREATE table xc_remote.sample( userid String, sampno UInt32, prjname String, type String, density Float64, rangup Float64, rangdown Float64, patientname String, patientsex String, patientage UInt16, patienttype String, testdate Datetime ) ENGINE=MergeTree() order by userid
#2.用DBeaver工具导入xc_remote.sample表中
#2.用select .. into  ..
SELECT column1, column2, column3, ...
INTO newtable 
FROM oldtable
WHERE condition;
#2.也可以用 linux TCP接口(官方航班数据)
xz -v -c -d < ontime.csv.xz | clickhouse-client --query="INSERT INTO ontime FORMAT CSV"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值