ClickHouse原理解析与应用实践 读书笔记

背景:
现代BI系统的典型应用场景是多维分析,某些时候可以直接使用OLAP指代这类场景。
OLAP,Online Analytical Processing,即联机分析/多维分析。通过不同的维度审视数据,对字段进行聚合查询。

  1. ROLAP,Relational OLAP,即关系型OLAP。建立在关系型数据库之上的,多维分析的操作可以直接转换成SQL查询。
  2. MOLAP,Multidimensional OLAP,即多维型OLAP。借助预先聚合结果,使用空间换取时间的形式最终提升查询性能。
  3. HOLAP,Hybrid OLAP,即混合架构的OLAP。前两者的集合。

ClickHouse(Click Stream,Data WareHouse)背后的研发团队是来自俄罗斯的Yandex公司(核心产品是走索引擎)。Yandex.Metrica是其在线流量分析产品。ClickHouse是基于这样的产品背景下诞生的,底层结构历经四个阶段。这四个阶段是数据分析产品形态以及OLAP架构演进的缩影。

发展历程OLAP架构Yandex.Metria产品形态
MySQL时期ROLAP固定报告
Metrage时期MOLAP固定报告
OLAPServer时期HOLAP(Metrage+OLAPServer)自助报告
CliskHouse时代ROLAP自助报告

适用场景:
非常适用于商业智能领域,也能被用于广告流量,Web,App流量,电信,金融,电子商务,信息安全,网络游戏,物联网等。
不适合场景:
不支持事务;不擅长根据主键按行粒度进行查询;不擅长按行删除数据。

核心特征:

  1. 完备的DBMS(Database Management System,数据库管理系统)功能。
  2. 列式存储
  3. 向量化引擎
  4. SQL查询,大小写敏感
  5. 分布式
  6. 在线查询

数据定义:
相比常规数据库还提供了复合数据类型,包括数组,元组,枚举,嵌套。

数据的删除与修改:
提供了DELETE和UPDATE的能力,这类操作被称作Mutation查询,可以看做是ALTER的变种。虽然Mutation最终能实现修改和删除,但不能完全以通常意义上的DELETE和UPDATE来理解。首先,Mutation是“很重”的操作,更适用于批量数据的修改和删除;其次,不支持事务,一旦语句被提交执行,会对数据产生影响,无法回滚;最后,Mutation的执行是一个后台异步过程,语句被提交后就会立即返回,但是不代表具体逻辑已经执行完毕。

数据字典:
一种简单,实用的存储媒介。字典中的数据会被主动或被动加载到内存,并支持动态更新。适合保存常量或经常使用的维度表数据,以避免不必要的JOIN查询。

数据查询:

  • WITH
    支持CTE(Common Table Expression,公共表达式),以增强查询语句的表达。
-- 使用WITH前
select pow(pow(2,2),3)
-- 使用后
with pow(2,2) as a select pow(a,3)
-- 使用方式
-- 1.定义变量
with 10 as start
select number from system.numbers
where number>start
limit 5
-- 2.调用函数
with sum(data_uncompressed_bytes) as bytes
select database,fromReadableSize(bytes) as format 
from system.columns
group by database
order by bytes desc
-- 3.定义子查询
with (
select sum(data_uncompressed_bytes) as bytes from system.columns
) as total_bytes
select database,(sum(data_uncompressed_bytes)/total_bytes)*100 as database_disk_usage
from system.columns
group by database
order by database_disk_usage desc
-- with中使用子查询该查询语句只能返回一行数据,如果数据集的数据大于一行则会抛出异常
-- 在子查询中重复使用WITH
  • FROM
  • SAMPLE
  • ARRAY JOIN
    允许在数据表的内部,与数组或嵌套类型进行JOIN操作。
  • JOIN
  • WHRE和PREWHERE
    使用PREWHERE时,首先只会读取PREWHERE指定的列字段数据,用于数据过滤的条件判断。待数据过滤之后再读取SELECT声明的列字段以补全其余属性。
  • HAVING
  • ORDER BY
    目前拥有NULL值最后和NULL值优先两种策略。NULLS LAST,NULLS FIRST。
  • LIMIT BY
    运行于ORDER BY之后LIMIT之前,按照指定分组,返回最多前n行数据。
  • LIMIT
  • SELECT
  • DISTINCT
  • UNION ALL
  • 查看SQL执行计划
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值