可刷新物化视图 (refreshable materialized view) 是 ClickHouse 一种新的物化视图解决方案,并在24.10版本中标记为生产可用。主要用于解决增量物化视图不适用的场景。 一、增量物化视图增量物化视图是 ClickHouse 中常见的物化视图。下面我们来介绍它的更新时机以及不适用的场景,以引出可刷新物化视图推出的背景。 1.更新时机从本质上说,增量物化视图是主表insert事件的触发器。当主表有数据插入时,会将本次插入的数据应用物化视图的建表 SQL,并写入物化视图或其 to 表(后面全部用 to 表解释)。上述是单表增量物化视图更新时机极其数据扭转。 对于多表 join 的增量物化视图,其更新时机略有区别。也正是因为其独特的机制,导致增量物化视图无法应用于所有多表场景。下面构建一个多表 join 的增量物化视图场景: -- 数据源表 1create table tbl1( id Int8 )engine = MergeTree order by id; -- 数据源 2create table tbl2( id Int8 ...
辛普森悖论(simpson’s paradox),是概率和统计中的一种现象,其中趋势出现在几组数据中,但当这些组被合并后趋势消失或反转。这个结果在社会科学和医学科学统计中经常遇到,当频率数据被不恰当地给出因果解释时尤其成问题。当干扰变量和因果关系在统计建模中得到适当处理时,这个悖论就可以得到解决。 辛普森悖论已被用来说明统计误用可能产生的误导性结果。 关于辛普森悖论的论述推荐知乎上两篇高赞回复 关于辛普森悖论的深度解析 真实的谎言——辛普森悖论面面观 而本文的主题是当博主在工作中遇到辛普森悖论时如何去量化根因(打脸业务我的数据没有出问题) 一、背景在ToC产品领域,用户粘性体现了用户反复与产品交互的倾向,粘性越高的产品对用户而言越重要,更能吸引用户定期使用并提升忠诚度。粘性的计算通常与日活跃用户数(DAU)和月活跃用户数(MAU)密切相关。博主所在的国内知名软件数据团队,曾遇到这样的业务反馈:首页的粘性指标呈现持续增长态势,然而深入查看各子页面的粘性却无一例外地出现下降。这不禁引发疑问,数据是否出现了问题? 在自行检查计算逻辑无误后,又从底层数据表对指标进行了复核,进一步确认数据 ...
一、背景博客的访问统计是基于51la实现,其只会统计“真人”的访问记录会过滤掉绝大部分的全站流量,因此如果想要分析全站的流量是否存在异常则需要更底层的实现。博客的基础架构是 nginx + hexo 的静态博客页面,因此全站流量分析的思路是: 采集 nginx 的访问日志 同步到分析性数据库 搭建实时报表 结合博主的技术栈,设计出如下架构 二、框架解析本节解释为什么要选择 vector + clickhouse + metabase 2.1 vectorvector 是一个轻量级、超快用于构建可观测数据管道的工具,这里用作日志采集的 ETL工具。相较于 flume 或 filebeat + logstash 有以下优点 使用 rust 编写,无 gc 运行效率极高且部署简单无需额外的环境(flume 或 ELK 都需要 jre) vector 支持 44 种 source、15 种 transform 和 59 种 sink 同时要考虑实际情况,博主公网服务器的配置仅为 2c4g,vector 是一个性价比极高的选择 2.2 clickhouse市面上流量的 AP 数据库大概 ...
随着时间的推移,clickhouse 中的数据逐步增长。为了查询、存储效率的提升我们可能需要计划性删除、移动或聚合历史数据。针对此类数据生命周期管理,clickhouse 提供了简单且强大的工具——TTL,该工具作用于 DDL 子句中。这篇文章将探索 TTL 以及如何使用它来解决多种数据管理任务。 TTL 只能应用在 MergeTree 系列引擎中 一、删除数据在一些特殊的场景中,有时存储过期的数据是没有意义的,因此需要定期执行删除操作。而 clickhouse 只需要在 DDL 中配置 TTL 就可以在后台自动完成。同时对于删除操作又可以细分为删除整行或只删除指标列 1.1 删除整行1. 普通删除假设有一张event表,同时我们期望自动删除所有超过一个月的记录 create table events( event String, time DateTime, value UInt64) engine = MergeTree order by (event, time) ttl time + interval 1 month; ...
为了实现最佳性能,数据库需要优化其内部数据存储和处理管道的每一步。但是数据库执行的最好的工作是根本没有完成的工作!缓存是一种特别流行的技术,它通过存储早期计算的结果或远程数据来避免不必要的工作,而访问这些数据的成本往往很高。在今天的博文中,介绍一下 ClickHouse 缓存系列的最新成员——查询缓存,在 v23.1 版本中作为实验性特性。 一、缓存一致性问题在实操 clickhouse 的查询缓存前需要先了解一下缓存事务问题,查询缓存通常可以分为事务一致和事务不一致。 在事务一致缓存中,如果 SELECT 查询的结果发生更改或可能发生更改,则数据库会使缓存的查询结果无效(丢弃)。在 ClickHouse 中,更改数据的操作包括在表中插入/更新/删除或折叠合并。事务一致性缓存特别适合 OLTP 数据库,例如MySQL(在v8.0之后删除了查询缓存)和 Oracle。 在事务不一致缓存中,所有缓存条目都被分配了一个有效期,之后它们就会过期,并且基础数据在此期间仅发生很小的变化,那么查询结果中的轻微不准确是可以接受的,这种方法总体上更适合 OLAP 数据库。在一些应用场 ...
Kafka 是大数据领域非常流行的一款分布式消息中间件,是实时计算中必不可少的一环,同时一款 OLAP 系统能否对接 Kafka 也算是考量是否具备流批一体的衡量指标之一。ClickHouse 的 Kafka 表引擎能够直接与 Kafka 系统对接,进而订阅 Kafka 中的 Topic 并实时接受消息数据。 众所周知,在消息系统中存在三层语义,它们分别是: 最多一次(at most once):可能存在丢失数据的情况 最少一次(at least once):可能存在重复数据的情况 精准一次(exactly once):数据不多不少,最为理想的情况 虽然 Kafka 本身能够支持上述三层语义,但一条完整的数据链路支持的语义遵循木桶原理。ClickHouse 24.8(2024 年 9 月 3 日)前还不支持 exactly once 语义,但因为 ClickHouse 有强大的 MergeTree 系列引擎且在明确的业务场景加持下(定义业务主键)具备幂等性,当幂等性 + at least once 语义也是可以实现 exactly once。而在 ClickHouse 24.8 L ...
行列转换是数据处理与分析中的关键操作,它能够将数据的结构从行转为列,或从列转为行。这种转换不仅简化了复杂的数据展示,还提升了数据分析的效率。在业务场景中,行列转换常用于报表生成、数据透视和多维度数据分析,通过更直观的方式呈现数据,帮助管理者快速获取关键信息。此外,它还能有效减少数据冗余,优化查询性能,满足灵活多变的业务需求。无论是在财务报表、销售分析,还是市场趋势分析中,行列转换都是不可或缺的工具。 本文会基于 SparkSQL 3.5.x 给出常用的行列转换方式,但本文的重点是介绍pivot和unpivot子句在行列转换场景的应用,其中细节、优雅程度交由开发者自己选择 一、数据准备以下是城市各年GDP 数据的表结构和测试数据,用于后续演示行列转换 create table city_gdp( city string comment '城市名', year int comment '年份', gdp double comment '单位:亿') comment '城市 gdp' s ...
一、背景在数据仓库的日常工作中,我们经常需要面对海量数据的存储和高效查询问题。尤其是,当业务对性能的要求越来越高、数据量持续增长时,传统的处理方式往往显得笨拙而低效。而这时候,Bitmap(位图)作为一种“看似简单却威力强大”的数据结构,逐渐展现出它的价值。简单来说,Bitmap 就像是一种用“0”和“1”记录信息的小工具。它通过位的形式将数据高效地压缩存储,同时支持快速的集合运算,比如并集、交集、补集等。这些特性使得 Bitmap 在高基数去重、行为统计、快速筛选等场景中表现得尤为出色。比如,给定一个数千万级别的用户群,使用 Bitmap 技术可以在几毫秒内完成某些复杂的查询操作,这在传统方法中可能需要数十秒甚至更长时间。 Bitmap 在数据仓库中的应用非常广泛。无论是帮助优化指标计算,还是提升查询性能,它都能够为开发者解决很多头疼的问题。例如,在广告投放场景下,我们需要实时统计某一人群的曝光次数;在用户运营中,我们可能需要高效筛选出符合特定标签的用户群。这些看似复杂的任务,通过 Bitmap,往往能以优雅的方式轻松解决。 这篇文章希望以实际案例为切入点,结合 Bitmap 的原理 ...
作为一个在工程领域摸爬滚打十年的工程师,我今晚可能在酒精的作用下,毫无顾忌地分享一些心得体会。以下是我酒后吐真言。 我在职业发展上取得的最大进步,是通过跳槽实现的。 技术栈并不是真的那么重要,因为在我所在的领域,大约有15种基本的软件工程模式是适用的。我从事的是数据领域的工作,它与网页开发或嵌入式开发不同。但所有领域都有大约10到20个核心原则,而技术栈只是试图让这些原则更容易实现,所以不必为此烦恼。 人们推崇寻找新工作是有其道理的。如果我对当前的工作感到不满意,那很可能是时候向前看了。 在我曾经工作过的公司里,我结交了一些好朋友,他们将会是我一生的挚友。我并不要求我工作过的每一个地方都必须建立这样的友谊。在那些没有与同事建立友谊的地方,我也能非常快乐地工作;同样地,即使在那些我交到了好朋友的地方,有时我也可能感到不快乐。 我学会了对上司坦诚,既保持真诚,又不至于过于直白,这样在工作中我能够保持自我。最糟糕的情况是什么?被解雇?那也无妨,我相信不久便能找到新的工作机会。 如果我一个季度内因为值班被在凌晨两点钟叫醒超过一次,那么肯定是出了严重的问题,我要么会解决它,要么就会辞职。 再倒 ...
OLAP 数据库设计的宗旨在于分析适合一次插入多次查询的业务场景,市面上成熟的 AP 数据库在更新和删除操作上支持的均不是很好,当然 clickhouse 也不例外。但是不友好不代表不支持,本文主要介绍在 clickhouse 中如何实现数据的删除,以及最新版本中 clickhouse 所做的一些技术突破。 一、mutation刚接触 clickhouse 的小伙伴或许对 mutation 就很熟悉了,mutation 查询可以看成 alter 语句的变种。虽然 mutation 能够最终实现修改和删除的需求,但不能完全用通常意义的 delete 和 update 来理解,我们需要清醒的认识到它的不同: mutation 是一个很重的操作,适合批量数据操作 不支持事务、一旦操作立刻生效无法回滚 mutation 为异步操作 1.1 实操创建一张表用于测试 mutation 操作 create table mutations_operate( UserId UInt64, Score UInt64, CreateTime DateTime) eng ...