关于 profiling-tables
面向分析师和数据团队的数据剖析技能,通过 SQL 检查表结构、统计信息和质量,并整理成便于理解的概览。
主要功能
- 01列元数据与表规模
- 02按数据类型统计列指标
- 03分类列基数分析
- 04样例行与数据质量检查
- 05结构化概览及查询建议
适用场景
- 01为新团队成员说明陌生数据表
- 02检查空值、重复项和取值范围
- 03查看类别频次与分布
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ astronomer/ agents --skill profiling-tables安装后在 Claude Code 中输入/profiling-tables确认已加载。
详细介绍
数据概况
生成详尽的数据表概况,帮助新团队成员了解数据。
步骤 1:基本元数据
查询列元数据:
SELECT COLUMN_NAME, DATA_TYPE, COMMENT
FROM <database>.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '<schema>' AND TABLE_NAME = '<table>'
ORDER BY ORDINAL_POSITION
如果表名不是完全限定名称,请先搜索 INFORMATION_SCHEMA.TABLES 来查找该表。
步骤 2:规模和结构
通过 run_sql 执行:
SELECT
COUNT(*) as total_rows,
COUNT(*) / 1000000.0 as millions_of_rows
FROM <table>
步骤 3:列级统计信息
根据数据类型,为每列收集适当的统计信息:
数值列
SELECT
MIN(column_name) as min_val,
MAX(column_name) as max_val,
AVG(column_name) as avg_val,
STDDEV(column_name) as std_dev,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY column_name) as median,
SUM(CASE WHEN column_name IS NULL THEN 1 ELSE 0 END) as null_count,
COUNT(DISTINCT column_name) as distinct_count
FROM <table>
字符串列
SELECT
MIN(LEN(column_name)) as min_length,
MAX(LEN(column_name)) as max_length,
AVG(LEN(column_name)) as avg_length,
SUM(CASE WHEN column_name IS NULL OR column_name = '' THEN 1 ELSE 0 END) as empty_count,
COUNT(DISTINCT column_name) as distinct_count
FROM <table>
日期/时间戳列
SELECT
MIN(column_name) as earliest,
MAX(column_name) as latest,
DATEDIFF('day', MIN(column_name), MAX(column_name)) as date_range_days,
SUM(CASE WHEN column_name IS NULL THEN 1 ELSE 0 END) as null_count
FROM <table>
步骤 4:基数分析
针对看起来像分类/维度键的列:
SELECT
column_name,
COUNT(*) as frequency,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 2) as percentage
FROM <table>
GROUP BY column_name
ORDER BY frequency DESC
LIMIT 20
这有助于识别:
- 高基数列(可能是 ID 或唯一值)
- 低基数列(可能是类别或状态字段)
- 分布偏斜的列(某个值占主导)
步骤 5:示例数据
获取具有代表性的行:
SELECT *
FROM <table>
LIMIT 10
如果表很大且你希望样本更加多样,可以从不同的时间段或类别中抽样。
步骤 6:数据质量评估
从以下维度总结数据质量:
完整性
- 哪些列包含 NULL?占比是多少?
- NULL 是预期情况还是存在问题?
唯一性
- 表面上的主键是否存在重复值?
- 是否存在意料之外的重复行?
新鲜度
- 数据上次更新时间是什么时候?(时间戳列的 MAX 值)
- 更新频率是否符合预期?
有效性
- 是否存在超出预期范围的值?
- 是否存在格式无效的值(日期、电子邮件等)?
- 是否存在孤立的外键?
一致性
- 相关列之间是否合理?
- 是否存在逻辑矛盾?
步骤 7:输出摘要
提供结构化的数据概况:
概览
用 2-3 句话描述此表包含的内容、使用者,以及数据的新鲜度。
架构
| 列 | 类型 | NULL 占比% | 不同值数量 | 描述 |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
关键统计信息
- 行数:X
- 日期范围:Y 至 Z
- 上次更新:时间戳
数据质量评分
- 完整性:X/10
- 唯一性:X/10
- 新鲜度:X/10
- 总体:X/10
潜在问题
列出发现的任何数据质量问题。
推荐查询
提供 3-5 个可用于回答有关此数据的常见问题的实用查询。
评论
支持 Markdown