mcpField
P
profiling-tables

profiling-tables

github.com/astronomer数据与数据库4571.0k 次安装3 周前更新
代码仓库

关于 profiling-tables

面向分析师和数据团队的数据剖析技能,通过 SQL 检查表结构、统计信息和质量,并整理成便于理解的概览。

主要功能

  1. 01列元数据与表规模
  2. 02按数据类型统计列指标
  3. 03分类列基数分析
  4. 04样例行与数据质量检查
  5. 05结构化概览及查询建议

适用场景

  1. 01为新团队成员说明陌生数据表
  2. 02检查空值、重复项和取值范围
  3. 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