当前位置: 首页 > news >正文

【IT研发实用Skill】clickhouse-io 技能

ClickHouse数据库模式、查询优化、分析和数据工程最佳实践,适用于高性能分析工作负载。

技能概述

clickhouse-io 技能提供了ClickHouse列式数据库的专门开发模式和最佳实践。ClickHouse是一个面向列的数据库管理系统(DBMS),专为在线分析处理(OLAP)而优化,特别适合处理大规模数据集的快速分析查询。

下载地址:https://github.com/affaan-m/everything-claude-code/tree/main/skills

主要功能

  • 表设计模式: MergeTree、ReplacingMergeTree、AggregatingMergeTree等引擎使用
  • 查询优化: 高效过滤、聚合函数、窗口函数优化
  • 数据插入: 批量插入、流式插入最佳实践
  • 分区策略: 数据分区和索引设计
  • 实时分析: 高性能实时数据处理
  • 数据压缩: 列式存储和压缩优化

触发条件

在以下情况下应该调用此技能:

  • 设计ClickHouse数据库表结构
  • 优化分析查询性能
  • 实现大规模数据聚合和统计
  • 构建实时分析系统
  • 处理时序数据和日志分析
  • 优化数据插入和导入流程

使用场景

场景1: 构建分析仪表板

当需要为业务指标构建实时分析仪表板时,使用此技能提供的聚合模式和查询优化技术。

场景2: 日志数据分析

当需要处理和分析大量日志数据时,使用MergeTree引擎和分区策略实现高效查询。

场景3: 实时指标计算

当需要实时计算业务指标时,使用AggregatingMergeTree实现预聚合和快速查询。

处理过程

1. 表设计阶段

根据数据特性和查询需求选择合适的表引擎,设计分区键和排序键。

CREATE TABLE markets_analytics (
date Date,
market_id String,
market_name String,
volume UInt64,
trades UInt32,
unique_traders UInt32,
avg_trade_size Float64,
created_at DateTime
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(date)
ORDER BY (date, market_id)
SETTINGS index_granularity = 8192;

2. 查询优化

使用索引列优先过滤、ClickHouse特定的聚合函数、窗口函数等技术优化查询性能。

3. 数据插入

使用批量插入代替单条插入,实现高效的数据写入。

4. 预聚合

对于频繁查询的聚合数据,使用AggregatingMergeTree实现物化视图。

输入要求

使用此技能时,用户需要提供:

  • 数据规模和增长预期
  • 查询模式和性能要求
  • 数据更新和删除需求
  • 分区和索引策略偏好
  • 实时性要求

输出说明

技能将提供:

  • 优化的表结构设计SQL
  • 高性能查询语句示例
  • 数据插入最佳实践代码
  • 分区和索引策略建议
  • 聚合函数使用指南
  • 性能优化建议

使用示例

示例1: 高效过滤查询

-- ✅ GOOD: 使用索引列优先
SELECT *
FROM markets_analytics
WHERE date >= '2025-01-01'
AND market_id = 'market-123'
AND volume > 1000
ORDER BY date DESC
LIMIT 100;

-- ❌ BAD: 非索引列优先过滤
SELECT *
FROM markets_analytics
WHERE volume > 1000
AND market_name LIKE '%election%'
AND date >= '2025-01-01';

示例2: 聚合查询

SELECT
toStartOfDay(created_at) AS day,
market_id,
sum(volume) AS total_volume,
count() AS total_trades,
uniq(trader_id) AS unique_traders,
avg(trade_size) AS avg_size
FROM trades
WHERE created_at >= today() - INTERVAL 7 DAY
GROUP BY day, market_id
ORDER BY day DESC, total_volume DESC;

示例3: 批量插入

async function bulkInsertTrades(trades: Trade[]) {
const values = trades.map(trade => `( '${trade.id}', '${trade.market_id}', '${trade.user_id}', ${trade.amount}, '${trade.timestamp.toISOString()}' )`).join(',')
await clickhouse.query(`
INSERT INTO trades (id, market_id, user_id, amount, timestamp)
VALUES ${values}
`).toPromise()
}

最佳实践

  1. 选择合适的引擎: 根据数据特性选择MergeTree、ReplacingMergeTree或AggregatingMergeTree
  2. 合理分区: 按时间或其他维度分区,提高查询效率
  3. 优化排序键: 将常用过滤列放在排序键前面
  4. 批量插入: 避免单条插入,使用批量插入提高性能
  5. 使用特定函数: 使用uniq代替count(DISTINCT),使用quantile代替percentile
  6. 预聚合: 对频繁查询的聚合使用物化视图

ClickHouse特性

  • 列式存储: 高效的数据压缩和查询性能
  • 数据压缩: 自动数据压缩减少存储空间
  • 并行查询: 多核并行查询执行
  • 分布式查询: 支持分布式表查询
  • 实时分析: 支持实时数据插入和查询
http://www.jsqmd.com/news/724375/

相关文章:

  • Labelme标注数据清洗实战:用Python批量重命名、替换和删除特定标签(附完整代码)
  • 【限时技术解禁】:VS Code Dev Containers 生产就绪Checklist(含OCI镜像签名、SBOM生成、FIPS合规配置)
  • PHP容器镜像国产化改造:从Docker到iSulad,3步完成ARM64适配+国密SM4加密集成
  • AMD Ryzen处理器深度调试:SMUDebugTool高效实战指南
  • 别再死记硬背MESI了!用AMBA ACE/CHI协议实战案例,搞懂多核Cache一致性的硬件代价
  • 【AI面试临阵磨枪-34】单 Agent 与多 Agent(Multi-Agent)架构区别、适用场景、挑战
  • 多行垂直居中(padding方法)
  • Ubuntu 22.04 + Python 3.10 环境,手把手教你搞定 nnUNetV2 和 MSD 数据集预处理
  • 倚天剑术46--批量转换其他图片格式为jpg
  • Wand-Enhancer:免费解锁WeMod高级功能的完整指南
  • 低空经济基础设施快速指南(英) 2025
  • 3个高效方法彻底解决Steam成就管理器显示异常问题
  • 豆包 LeetCode 1916.统计为蚂群构筑房间的不同顺序 TypeScript实现
  • 3步掌握开源视频下载工具:实现多平台视频批量下载与无水印保存
  • 告别僵硬效果!在UE5中优化动态水面与火焰材质的几个关键技巧(含节点优化方案)
  • 蓝桥杯省赛真题解析:用线段树+优先队列搞定‘小蓝的旅行计划’(附Java完整代码)
  • 《Windows Internals》读书笔记 10.4.4:WMI 提供程序(Providers)——WMI 与底层系统资源之间真正的桥梁
  • 【MySQL | 第八篇】索引的使用
  • 文本换行处理
  • Unity游戏自动翻译终极指南:XUnity.AutoTranslator让外语游戏秒变中文
  • 注入灵魂:从架构设计到数据能力的“降维打击”
  • 千问 LeetCode 1932.合并多棵二叉搜索树public TreeNode canMerge(List<TreeNode> trees)
  • Windows驱动管理终极指南:DriverStoreExplorer让你轻松掌控驱动程序
  • 海外短剧APP开发,从0到1:硬刚谷歌商店合规,打通海外多币种支付!
  • 单细胞分析避坑指南:用DoubletFinder精准揪出那些“伪装”的双细胞(附完整R代码)
  • 【C#】三菱PLC MC协议通信:1E帧与3E帧报文解析+C#上位机源码(附完整工程)
  • 4月30日
  • 如何在3分钟内获取VMware Workstation Pro 17免费许可证密钥:虚拟化入门完整指南
  • Transformer在文档级事件抽取中的应用与优化
  • Heretic-v1.2.0烧蚀GLM4.7,离线环境进行