重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
npx skills add https://github.com/civitai/civitai --skill clickhouse-query使用此技能来运行即席 ClickHouse 查询,用于分析、指标分析和调试。
使用包含的查询脚本:
node .claude/skills/clickhouse-query/query.mjs "SELECT count() FROM views"
| 标志 | 描述 |
|---|---|
--explain | 显示查询执行计划 |
--writable | 允许写入操作(需要用户权限) |
--timeout <s>, -t | 查询超时时间(单位:秒,默认:30) |
| , |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
--file-f| 从文件读取查询 |
--json | 以 JSON 格式输出结果 |
--quiet, -q | 最小化输出,仅显示结果 |
# 统计表中的行数
node .claude/skills/clickhouse-query/query.mjs "SELECT count() FROM views"
# 带过滤条件的查询
node .claude/skills/clickhouse-query/query.mjs "SELECT * FROM modelEvents WHERE modelId = 123 LIMIT 10"
# 检查查询执行计划
node .claude/skills/clickhouse-query/query.mjs --explain "SELECT * FROM views WHERE userId = 1"
# 为长时间运行的查询覆盖默认的 30 秒超时设置
node .claude/skills/clickhouse-query/query.mjs --timeout 60 "SELECT ... (complex aggregation)"
# 从文件读取查询
node .claude/skills/clickhouse-query/query.mjs -f my-query.sql
# 用于处理的 JSON 输出
node .claude/skills/clickhouse-query/query.mjs --json "SELECT type, count() FROM modelEvents GROUP BY type"
--writable 标志,否则会阻止 INSERT/ALTER/DROP 操作--timeout 覆盖)--writable 之前,您必须征得用户许可仅在以下情况下使用 --writable 标志:
重要提示 : 在使用 --writable 运行查询之前,务必征得用户许可。
| 表 | 描述 |
|---|---|
views | 页面/实体查看事件 |
modelEvents | 模型创建/发布/更新事件 |
modelVersionEvents | 模型版本事件(包括下载) |
userActivities | 用户注册、登录、订阅事件 |
images | 图片上传/删除事件 |
reactions | 点赞/点踩事件 |
reports | 内容举报事件 |
entityMetricEvents | 聚合指标事件 |
重要提示 : 生产环境使用 ClickHouse 副本集群。当查询系统表(日志、指标等)时,必须使用 clusterAllReplicas() 来获取所有节点的数据。
-- 错误:仅查询您连接到的节点
SELECT * FROM system.query_log WHERE event_time > now() - INTERVAL 1 HOUR
-- 正确:查询集群中的所有副本
SELECT * FROM clusterAllReplicas(default, system.query_log)
WHERE event_time > now() - INTERVAL 1 HOUR
-- 在所有节点上查找最近的查询
SELECT
hostname(),
event_time,
query_duration_ms,
formatReadableSize(memory_usage) AS memory,
query
FROM clusterAllReplicas(default, system.query_log)
WHERE type = 'QueryFinish'
AND event_time > now() - INTERVAL 5 MINUTE
ORDER BY event_time DESC
LIMIT 20
-- 按内存使用情况查找消耗资源的查询(最近 24 小时)
SELECT
count() as query_count,
user,
sum(memory_usage) AS total_memory,
normalized_query_hash
FROM clusterAllReplicas(default, system.query_log)
WHERE event_time > now() - INTERVAL 1 DAY
AND query_kind = 'Select'
AND type = 'QueryFinish'
GROUP BY normalized_query_hash, user
ORDER BY total_memory DESC
LIMIT 10
-- 按模式搜索查询日志
SELECT event_time, query_id, query, type
FROM clusterAllReplicas(default, merge('system', '^query_log*'))
WHERE query ILIKE '%some_table%'
AND event_time > now() - INTERVAL 5 MINUTE
-- 在所有节点上调试特定查询
SELECT hostname(), message
FROM clusterAllReplicas(default, system.text_log)
WHERE query_id = 'your-query-id-here'
ORDER BY event_time_microseconds ASC
| 使用场景 | 函数 |
|---|---|
| 系统表 (query_log, text_log 等) | clusterAllReplicas(default, system.table_name) |
| 应用表 (views, modelEvents 等) | 直接查询(已分布式存储) |
| 搜索多个系统表 | clusterAllReplicas(default, merge('system', '^pattern*')) |
-- 使用 count() 而不是 COUNT(*)
SELECT count() FROM views
-- 使用 toDate() 进行日期过滤
SELECT * FROM views WHERE toDate(time) = today()
-- 最近 7 天
SELECT * FROM modelEvents WHERE time > now() - INTERVAL 7 DAY
-- 聚合
SELECT type, count() as cnt FROM modelEvents GROUP BY type ORDER BY cnt DESC
每周安装量
58
仓库
GitHub 星标数
7.0K
首次出现
2026 年 1 月 21 日
安全审计
安装于
gemini-cli52
opencode51
codex50
claude-code49
github-copilot46
cursor45
Use this skill to run ad-hoc ClickHouse queries for analytics, metrics analysis, and debugging.
Use the included query script:
node .claude/skills/clickhouse-query/query.mjs "SELECT count() FROM views"
| Flag | Description |
|---|---|
--explain | Show query execution plan |
--writable | Allow write operations (requires user permission) |
--timeout <s>, -t | Query timeout in seconds (default: 30) |
--file, -f | Read query from a file |
--json | Output results as JSON |
--quiet, -q | Minimal output, only results |
# Count rows in a table
node .claude/skills/clickhouse-query/query.mjs "SELECT count() FROM views"
# Query with filters
node .claude/skills/clickhouse-query/query.mjs "SELECT * FROM modelEvents WHERE modelId = 123 LIMIT 10"
# Check query execution plan
node .claude/skills/clickhouse-query/query.mjs --explain "SELECT * FROM views WHERE userId = 1"
# Override default 30s timeout for longer queries
node .claude/skills/clickhouse-query/query.mjs --timeout 60 "SELECT ... (complex aggregation)"
# Query from file
node .claude/skills/clickhouse-query/query.mjs -f my-query.sql
# JSON output for processing
node .claude/skills/clickhouse-query/query.mjs --json "SELECT type, count() FROM modelEvents GROUP BY type"
--writable flag is used--timeout)--writable, you MUST ask the user for permissionOnly use the --writable flag when:
IMPORTANT : Always ask the user for permission before running with --writable.
| Table | Description |
|---|---|
views | Page/entity view events |
modelEvents | Model create/publish/update events |
modelVersionEvents | Model version events including downloads |
userActivities | User registration, login, subscription events |
images | Image upload/delete events |
reactions | Like/dislike events |
IMPORTANT : Production uses a ClickHouse replica cluster. When querying system tables (logs, metrics, etc.), you must use clusterAllReplicas() to get data from all nodes.
-- WRONG: Only queries the node you're connected to
SELECT * FROM system.query_log WHERE event_time > now() - INTERVAL 1 HOUR
-- CORRECT: Queries all replicas in the cluster
SELECT * FROM clusterAllReplicas(default, system.query_log)
WHERE event_time > now() - INTERVAL 1 HOUR
-- Find recent queries across all nodes
SELECT
hostname(),
event_time,
query_duration_ms,
formatReadableSize(memory_usage) AS memory,
query
FROM clusterAllReplicas(default, system.query_log)
WHERE type = 'QueryFinish'
AND event_time > now() - INTERVAL 5 MINUTE
ORDER BY event_time DESC
LIMIT 20
-- Find expensive queries by memory usage (last 24 hours)
SELECT
count() as query_count,
user,
sum(memory_usage) AS total_memory,
normalized_query_hash
FROM clusterAllReplicas(default, system.query_log)
WHERE event_time > now() - INTERVAL 1 DAY
AND query_kind = 'Select'
AND type = 'QueryFinish'
GROUP BY normalized_query_hash, user
ORDER BY total_memory DESC
LIMIT 10
-- Search query logs by pattern
SELECT event_time, query_id, query, type
FROM clusterAllReplicas(default, merge('system', '^query_log*'))
WHERE query ILIKE '%some_table%'
AND event_time > now() - INTERVAL 5 MINUTE
-- Debug a specific query across all nodes
SELECT hostname(), message
FROM clusterAllReplicas(default, system.text_log)
WHERE query_id = 'your-query-id-here'
ORDER BY event_time_microseconds ASC
| Use Case | Function |
|---|---|
| System tables (query_log, text_log, etc.) | clusterAllReplicas(default, system.table_name) |
| Application tables (views, modelEvents, etc.) | Direct query (already distributed) |
| Search multiple system tables | clusterAllReplicas(default, merge('system', '^pattern*')) |
-- Use count() not COUNT(*)
SELECT count() FROM views
-- Date filtering with toDate()
SELECT * FROM views WHERE toDate(time) = today()
-- Last 7 days
SELECT * FROM modelEvents WHERE time > now() - INTERVAL 7 DAY
-- Aggregations
SELECT type, count() as cnt FROM modelEvents GROUP BY type ORDER BY cnt DESC
Weekly Installs
58
Repository
GitHub Stars
7.0K
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubWarnSocketPassSnykPass
Installed on
gemini-cli52
opencode51
codex50
claude-code49
github-copilot46
cursor45
Azure 升级评估与自动化工具 - 轻松迁移 Functions 计划、托管层级和 SKU
111,700 周安装
reports | Content report events |
entityMetricEvents | Aggregated metric events |