
ClickHouse 数据采样查询提速 10 倍【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse你正在处理一份 TB 级的网站访问日志表全量聚合查询要跑好几分钟而 ClickHouse 数据采样SAMPLE子句让你只扫描部分数据就能拿到近似结果。前提只有一个建表时指定采样键。下面从建表到出结果把完整链路走一遍。它到底解决了什么问题查询耗时从分钟级降到秒级甚至更低SAMPLE 0.1只扫描 10% 的数据延迟直接降到原来的十分之一左右结果是确定性的相同采样参数每次得到相同结果分析可重复、可对比跨表一致多张表用同一采样键时相同系数永远选中同一子集可以直接做JOIN或IN子查询限制条件采样仅支持 MergeTree 系列引擎且必须在建表时通过SAMPLE BY指定采样表达式老表无法事后补开可用 ALTER TABLE ... SAMPLE BY 在已有排序键基础上新增。怎么用从建表到出结果的完整路径采样键设计采样键决定了抽哪些数据选分布均匀的列如用户 ID建表时写进SAMPLE BYCREATE TABLE hits ( UserID UInt64, EventDate Date, PageViews UInt64 ) ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) SAMPLE BY intHash32(UserID) -- 采样键均匀列的哈希保证抽样随机且可复现 ORDER BY UserID三种采样语法官方文档定义了三种写法按需选择语法含义典型场景SAMPLE 0.1处理 10% 的数据固定比例手动乘校正系数SAMPLE 10000000至少处理 1000 万行关心最小行数而非比例SAMPLE 0.1 OFFSET 0.5从 50% 位置起取 10%数据分片、A/B 分段分析注意最小读取单位是索引粒度index_granularity所以SAMPLE n的行数应远大于单个粒度的行数。采样结果校正比例已知时手动乘系数即可比例未知时SAMPLE n用 ClickHouse 自动生成的_sample_factor虚拟列动态校正SELECT sum(PageViews * _sample_factor) -- _sample_factor 自动算出实际采样比例 FROM hits SAMPLE 10000000 -- 至少处理 1000 万行平均值类函数如avg(Duration)直接计算即可无需校正。一个真实案例 Walkthrough场景分析电商站点访问日志取热门页面 Top 100要求秒级响应。建表、写入后执行采样查询-- 建表与写入省略 CREATE TABLE hits (UserID UInt64, EventDate Date, Title String) ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) SAMPLE BY intHash32(UserID) ORDER BY UserID; -- 采样查询只扫描 10% 数据 SELECT Title, count() * 10 AS PageViews -- 10 1 / 0.1把 10% 的结果还原为近似全量 FROM hits SAMPLE 0.1 GROUP BY Title ORDER BY PageViews DESC LIMIT 100结果里的PageViews是校正后的近似值count()只统计了 10% 的数据乘 10 才是目标量级。如果比例不固定把count() * 10换成count() * _sample_factor / _sample_rate一类的写法或直接改用SAMPLE n形式交给虚拟列处理。需要更细粒度采样时还有专为此设计的 groupArraySample 等聚合函数。什么时候该用什么时候别用适用避免实时看板刷新财务报表精确计数探索性数据分析小表查询资源受限的大数据场景法律合规精确计算如果你的查询目标是方向感而非精确值采样就是最优解。下一步建议先在测试库对一张历史表试跑一次用SAMPLE 1全量结果与SAMPLE 0.1对比偏差偏差在业务可接受范围内再逐步放开到线上查询。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考