背景:
现代BI系统的典型应用场景是多维分析,某些时候可以直接使用OLAP指代这类场景。
OLAP,Online Analytical Processing,即联机分析/多维分析。通过不同的维度审视数据,对字段进行聚合查询。
- ROLAP,Relational OLAP,即关系型OLAP。建立在关系型数据库之上的,多维分析的操作可以直接转换成SQL查询。
- MOLAP,Multidimensional OLAP,即多维型OLAP。借助预先聚合结果,使用空间换取时间的形式最终提升查询性能。
- 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流量,电信,金融,电子商务,信息安全,网络游戏,物联网等。
不适合场景:
不支持事务;不擅长根据主键按行粒度进行查询;不擅长按行删除数据。
核心特征:
- 完备的DBMS(Database Management System,数据库管理系统)功能。
- 列式存储
- 向量化引擎
- SQL查询,大小写敏感
- 分布式
- 在线查询
数据定义:
相比常规数据库还提供了复合数据类型,包括数组,元组,枚举,嵌套。
数据的删除与修改:
提供了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执行计划