profiling-tables について
アナリストやデータチーム向けに、SQLでテーブルの構造、統計、品質を調べるデータプロファイリングスキルです。結果を理解しやすい概要にまとめます。
主な機能
- 01列メタデータとテーブル規模
- 02型に応じた列統計
- 03カテゴリ列のカーディナリティ分析
- 04サンプル行とデータ品質の確認
- 05構造化プロファイルとクエリ案
活用シーン
- 01新しいチームメンバー向けのテーブル説明
- 02NULL、重複、値の範囲の確認
- 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 や一意の値である可能性が高い)
- カーディナリティが低い列(カテゴリやステータスフィールドである可能性が高い)
- 偏った分布(1 つの値が大半を占める)
ステップ 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 対応