浅谈clickhouse在大数据分析领域的应用

一. 概述

随着我们业务需求的发展,数据量级的增加,传统的数据库的查询速度已满足不了我们的业务需求,对于一张千万级数据量的表,使用mysql 或者mssql 查询出一列数据,就要5秒左右,不!这不是我们想要的!!!我们必须找到应对方法,来解决查询速度这一问题。经过多天的考虑与讨论,我们最终选择,使用click house 来解决这一问题。

二. 什么是Clickhouse

官方给出的解释是:ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

我的理解是:传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足够高的情形下能正常提供服务。但残酷的是,这种理想情形最终会随着业务的增长走到尽头,查询会变得越来越慢。你可能通过增加更多的内存,订购更快的磁盘等等来解决问题(纵向扩展),但这只是拖延解决本质问题。如果你的需求是解决怎样快速查询出结果,那么请尝试ClickHouse,它可以解决你的问题。

三. Clickhouse 简单使用

Clickhouse 的数据类型

1.整型:UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64
范围U开头-2N/2~2N-1;非U开头0~2^N-1
2.枚举类型:Enum8,Enum16
Enum(‘hello’=1,‘test’=-1),Enum是有符号的整型映射的,因此负数也是可以的
3.字符串型:FixedString(N),String
N是最大字节数,不是字符长度,如果是UTF8字符串,那么就会占3个字节,GBK会占2字节;String可以用来替换VARCHAR,BLOB,CLOB等数据类型
4.时间类型:Date
5.数组类型:Array(T)
T是一个基本类型,包括arry在内,官方不建议使用多维数组
6.元组:Tuple
7.结构:Nested(name1 Type1,name2 Type2,…)
类似一种map的结

创建本地表

	 CREATE TABLE test02( id UInt16,col1 String,col2 String,create_date date )  ENGINE = MergeTree PARTITION BY effectdate ORDER BY (masterhotelid) SETTINGS index_granularity = 8192

ENGINE:是表的引擎类型,
MergeTree:最常用的引擎,
PARTITION BY :根据什么字段进行分区,
PARTITION BY :根据什么字段进行排序,
8192:是索引粒度,用默认值8192即可。

在某个字段后添加新字段

   alter table  supplierdb.supplier_ads_alarm_rule_hotel_show
   add column suppliername  String after supplierid

添加多个字段

alter table oversea.ovshotelbasicinfo_all 
add column location Int32,
add column finalcontinentnameen String,
add column finalcontinentnamecn String,
add column static_info_score Float32,
add column bigcityid Int32,
add column bigcityname String 

rename表名

RENAME TABLE db.test  To db.test2

SQL语法

1:SELECT

 select id,name from db.table

(注意: 查询语句不要使用SELECT * ,在JOIN的时候,* 的默认行为新版本里现在和标准SQL一致,会返回所有表里面的所有列,* 会严重影响性能)

2:JOIN子句:
支持的JOIN类型如下:

INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
CROSS JOIN

ANY 与 ALL 的区别:

在使用 ALL修饰符对JOIN进行修饰时,如果右表存在多个与左表关联的数据,那么系统则将右表中所有可以与左表关联的数据全部返回在结果中。这与SQL标准的JOIN行为相同。在使用ANY修饰符对JOIN进行修饰时,如果右表中存在多个与左表关联的数据,那么系统进返回第一个与左表匹配的结果。如果左表与右表一一对应,不存在多余的行时,ANY与ALL结果相同。

注意:ClickHouse在做JOIN操作的时候,是先执行的右表,然后把右表的结果放入内存,再根据右表的结果执行左表的筛选, 所以,小表放在JOIN的右边,会大大提高SQL的执行速度。

四. 总结

作为一个开源的数据库,Clickhouse确实速度相当快,处理百万级千万级甚至亿级的数据运行时间都是以毫秒计时。开源免费的优势也使得它非常适合不算过于复杂的项目。当然Clickhouse也有不少缺点,毕竟它还是一个新兴的数据库,整个社区还在蓬勃发展中。感兴趣的同学不妨尝试一下。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值