技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
byted-bytehouse-data-asset-analyzer【数据与研究】ByteHouse 数据资产和血缘分析 Skill。直接通过 clickhouse-connect 查询 system.tables / system.columns,抓取指定数据库的表结构、字段、引擎等元数据,生成数据资产目录、自动打标签,并识别 Distributed/Local 之间的血缘关系与列相似性。当用户提到 "ByteHouse 数据资产"、"数据资产盘点"、"表结构分析"、"血缘分析"、"字段分析"、"表引擎分布"、"元数据目录" 等诉求时使用本 Skill。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
直接通过 clickhouse-connect 连接 ByteHouse(HTTPS 8123),查询 system.tables / system.columns 扫描目标数据库的所有表与字段,生成三份产物:
当以下情况时使用此 Skill:
clickhouse-connect(安装方式:pip install clickhouse-connect)jq(export_config.sh 依赖,解析 JSON 配置。安装方式:brew install jq 或 sudo apt install jq)~/.bytehouse_config.json)~/.bytehouse_config.json 加载配置到环境变量(依赖 jq)。配置保存在 ~/.bytehouse_config.json。如果文件存在且非空,直接使用;若不存在,向用户索要连接信息(可以把 ByteHouse 连接信息获取指引 发给用户),拿到后写入 JSON 文件,避免重复询问。
{
"BYTEHOUSE_HOST": "<ByteHouse-host>",
"BYTEHOUSE_PORT": "8123",
"BYTEHOUSE_USER": "bytehouse",
"BYTEHOUSE_PASSWORD": "<ByteHouse-password>"
}
配置项说明:
| 配置项 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|
BYTEHOUSE_HOST | 是 | — | ByteHouse 网关域名 |
BYTEHOUSE_PORT | 否 | 8123 | HTTP(S) 端口 |
BYTEHOUSE_USER | 否 | bytehouse | 用户名 |
BYTEHOUSE_PASSWORD | 是 | — | 密码 / API Key |
加载配置:
source scripts/export_config.sh
source scripts/export_config.sh,确认 BYTEHOUSE_HOST 等环境变量已就绪。default、tpcds)。python3 scripts/data_asset_analyzer.py <database>,脚本会通过 clickhouse-connect 查询 system.tables / system.columns 拉取元数据。scripts/output/ 目录里的 3 份 JSON 结果,给出总表数、总列数、引擎分布、Top 血缘关系等要点。# 1. 加载配置(复用 ~/.bytehouse_config.json)
source scripts/export_config.sh
# 2. 执行分析(指定库名)
python3 scripts/data_asset_analyzer.py default
python3 scripts/data_asset_analyzer.py tpcds
分析内容包括:
输出文件(保存在与脚本同级的 scripts/output/ 目录):
schema_{database}_{timestamp}.json — 完整的数据库 schema。catalog_{database}_{timestamp}.json — 数据资产目录。lineage_{database}_{timestamp}.json — 血缘分析报告。scripts/data_asset_analyzer.py 暴露的是一个同步函数 analyze_database(database)(不是 async,也不是类)。它返回内存中的分析结果字典,本身不落盘;如需生成 JSON 文件,请直接运行脚本 main()(即命令行方式)。
要在其他 Python 代码里调用:
import os
import sys
# 把 scripts/ 目录加入 sys.path,以便直接 import 模块
SKILL_SCRIPTS_DIR = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"scripts",
)
sys.path.insert(0, SKILL_SCRIPTS_DIR)
from data_asset_analyzer import analyze_database
# 前提:已经通过 `source scripts/export_config.sh` 或手工 export 设置了
# BYTEHOUSE_HOST / BYTEHOUSE_PORT / BYTEHOUSE_USER / BYTEHOUSE_PASSWORD 等环境变量
result = analyze_database("default")
# result 是一个字典,包含:
# - schema: 完整的数据库 schema
# - catalog: 数据资产目录
# - lineage: 血缘分析
schema_*.json)包含数据库完整结构:
{
"database": "default",
"analyzed_at": "2026-03-12T19:50:00",
"tables": [
{
"name": "conversation_feedback",
"comment": "",
"engine": "Distributed",
"create_table_query": "CREATE TABLE ...",
"columns": [
{
"name": "session_id",
"type": "String",
"comment": ""
}
]
}
]
}
catalog_*.json)包含数据资产统计信息(注意:统计字段与 tables_catalog 位于顶层,没有额外的 summary 嵌套):
{
"database": "default",
"generated_at": "2026-03-12T19:50:00",
"total_tables": 8,
"total_columns": 45,
"engine_distribution": {
"Distributed": 4,
"MergeTree": 3,
"Log": 1
},
"tables_catalog": [
{
"name": "conversation_feedback",
"engine": "Distributed",
"column_count": 10,
"tags": ["分布式表", "用户/客户"],
"columns": [
{"name": "session_id", "type": "String"}
],
"has_more_columns": false
}
]
}
columns仅收录前 10 个字段用于预览,has_more_columns标记是否还有更多字段。
lineage_*.json)包含表关系和列相似性:
{
"database": "default",
"analyzed_at": "2026-03-12T19:50:00",
"table_relationships": [
{
"table": "conversation_feedback",
"related_tables": [
{
"name": "conversation_feedback_local",
"relationship": "Local -> Distributed"
}
]
}
],
"column_similarities": [
{
"column_name": "session_id",
"occurrences": [
{"table": "conversation_feedback", "type": "String"},
{"table": "conversation_feedback_local", "type": "String"}
]
}
]
}
分析器会根据表引擎、表名关键词、列数自动生成标签(引擎类标签三者互斥,命中其一即止;其余规则可叠加;若均未命中则标记为 未分类):
| 标签 | 触发条件 |
|---|---|
分布式表 | 引擎为 Distributed |
MergeTree系列 | 引擎包含 MergeTree(且非 Distributed) |
日志引擎 | 引擎包含 Log(且非上述两类) |
日志/事件 | 表名包含 log / event / trace |
交易/订单 | 表名包含 order / trans / pay |
用户/客户 | 表名包含 user / customer / account |
商品/物料 | 表名包含 product / item / goods |
时序聚合 | 表名包含 daily / hourly / monthly |
维度表 | 表名包含 dim / dimension |
事实表 | 表名包含 fact |
宽表 | 列数 > 50 |
窄表 | 列数 < 5 |
未分类 | 未命中以上任意规则 |
| 现象 | 处理方式 |
|---|---|
clickhouse-connect not installed | 安装依赖:pip install clickhouse-connect。 |
BYTEHOUSE_HOST is required / 未设置 | 引导用户提供连接信息,写入 ~/.bytehouse_config.json 后重新 source scripts/export_config.sh。 |
| 连接失败 / 证书报错 | 脚本固定使用 HTTPS 且跳过证书校验(secure=True、verify=False);请确认 BYTEHOUSE_HOST/端口可从公网访问。 |
| 分析结果为空 | 让用户确认库名是否正确、账号是否有查询 system 表的权限。 |