# Governance Coverage Reporter

> Report Unity Catalog governance coverage — table comments, ownership, tags, and column documentation — from system.information_schema. Ask me which tables lack owners, descriptions, or classification tags across a catalog.

- Skill: `databricks-solutions/governance-coverage-reporter` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add databricks-solutions/governance-coverage-reporter`
- Raw SKILL.md: https://api.skillmd.com/api/skills/databricks-solutions/governance-coverage-reporter/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: databricks-solutions (https://skillmd.com/u/databricks-solutions)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/databricks-solutions/governance-coverage-reporter

---


> **Illustrative example** — demonstrates a well-formed `SKILL.md` for this reference
> implementation. Adapt the content to your own org; do not deploy verbatim.

# governance-coverage-reporter

## Overview

Measures Unity Catalog **governance hygiene** from the live `system.information_schema`
metadata views: it reports which tables lack an owner, a description/comment, or classification
tags, and summarizes documentation coverage across a catalog. This is metadata-only — it reads
the catalog's *structure and annotations*, never the data inside any table — which keeps it a
clean Tier-2 (internal) skill.

## When to use this skill

Reach for this skill when a data-governance or privacy user asks about catalog hygiene:

- "Which tables in the `main` catalog have no description?"
- "How many tables are missing an owner?"
- "Show me governance coverage — what share of tables have comments and tags?"
- "Which schemas have the worst documentation coverage?"

## Instructions

When the user asks a governance-coverage question:

1. **Identify the catalog/schema scope** (default: the `main` catalog).
2. **Query `system.information_schema.tables`** for table inventory, owners, and comments.
3. **Join `system.information_schema.table_tags`** to assess classification-tag coverage.
4. **Present results** as a coverage summary + a ranked list of the least-documented schemas
   (see the Recommendations framework).

## Examples

### Tables missing a description or owner (in `main`)

```sql
SELECT
  table_schema,
  table_name,
  table_owner,
  comment
FROM system.information_schema.tables
WHERE table_catalog = 'main'
  AND (comment IS NULL OR comment = '' OR table_owner IS NULL)
ORDER BY table_schema, table_name
```

### Documentation coverage by schema

```sql
SELECT
  table_schema,
  COUNT(*)                                                        AS total_tables,
  SUM(CASE WHEN comment IS NOT NULL AND comment <> '' THEN 1 ELSE 0 END) AS documented,
  ROUND(
    SUM(CASE WHEN comment IS NOT NULL AND comment <> '' THEN 1 ELSE 0 END) / COUNT(*),
    3
  )                                                               AS doc_coverage
FROM system.information_schema.tables
WHERE table_catalog = 'main'
GROUP BY table_schema
ORDER BY doc_coverage ASC
```

### Classification-tag coverage

```sql
SELECT
  t.table_schema,
  COUNT(DISTINCT t.table_name)                     AS total_tables,
  COUNT(DISTINCT tg.table_name)                    AS tagged_tables
FROM system.information_schema.tables t
LEFT JOIN system.information_schema.table_tags tg
  ON t.table_catalog = tg.catalog_name
 AND t.table_schema  = tg.schema_name
 AND t.table_name    = tg.table_name
WHERE t.table_catalog = 'main'
GROUP BY t.table_schema
ORDER BY tagged_tables ASC
```

## Recommendations framework

After presenting results, always include:

1. **Biggest gap** — the schema with the lowest documentation or tag coverage, named.
2. **Coverage headline** — the overall share of tables with owners / comments / tags.
3. **Quick win** — one prioritized action (e.g. "assign owners to the N ownerless tables in schema X first").

## Edge cases

- **Empty catalog** — if the requested catalog has no tables, say so rather than returning
  a zero-row summary with no context.
- **Permission scope** — `information_schema` only surfaces objects the caller can see; note
  that coverage is relative to visible objects, not necessarily the whole metastore.
- **Metadata only** — this skill never reads table *contents*. If asked about the data inside
  a table, redirect: that is a data-query task, not a governance-coverage task.

## Data scope

- `system.information_schema.tables` — table inventory, owner, and comment metadata
- `system.information_schema.table_tags` — classification/governance tag assignments
- No PII or table contents are accessed — this skill reads catalog metadata only.

