Unity Catalog
Guidance for Unity Catalog governance — access control, the privilege model,
external locations, securable DDL, and fine-grained access — plus system tables and
volume file operations.
Before running databricks CLI commands, confirm the CLI and the subcommand exist.
Run databricks --version — this skill assumes the unified CLI (≥ v1.0.0). Several
subcommands shown here (experimental aitools, system-schemas, external-lineage,
grants) vary by version or workspace availability; if one is missing or rejects a flag,
fall back to the SQL form or the Python SDK rather than guessing. Each reference notes its
own version floor where relevant.
When to Use This Skill
Use this skill when:
Governance & access control (start here):
- Granting or revoking access —
GRANT/REVOKE, the UC privilege model, ownership (ALTER … OWNER TO), SHOW GRANTS, "who can read/write this table?"
- Row- and column-level security — row filters, column masks, dynamic views with
current_user() / is_account_group_member()
- External locations & storage credentials —
CREATE STORAGE CREDENTIAL, CREATE EXTERNAL LOCATION, backing external tables/volumes
- Securable DDL & metadata — creating/altering catalogs, schemas, managed vs external tables, views; comments, tags, table properties, ownership
Observability & files:
- Working with volumes (upload, download, list files in
/Volumes/)
- Querying lineage (table dependencies, column-level lineage)
- Analyzing audit logs (who accessed what, permission changes)
- Monitoring billing and usage (DBU consumption, cost analysis)
- Tracking compute resources (cluster usage, warehouse metrics)
- Reviewing job execution (run history, success rates, failures)
- Analyzing query performance (slow queries, warehouse utilization)
- Profiling data quality (data profiling, drift detection, metric tables)
Reference Files
| Topic |
File |
Description |
| Access Control |
references/1-access-control.md |
Privilege model, securable hierarchy, GRANT/REVOKE, ownership, inheritance, SHOW GRANTS |
| External Locations |
references/2-external-locations.md |
Storage credentials (AWS/Azure/GCP), external locations, validation |
| Securables DDL |
references/3-securables-ddl.md |
CREATE/ALTER/DROP catalogs/schemas/tables/views, comments, tags, ownership |
| Fine-Grained Access |
references/4-fine-grained-access.md |
Row filters, column masks, dynamic views |
| System Tables |
references/5-system-tables.md |
Lineage, audit, billing, compute, jobs, query history |
| Volumes |
references/6-volumes.md |
Volume file operations, permissions, best practices |
| Data Profiling |
references/7-data-profiling.md |
Data profiling, drift detection, profile metrics |
Quick Start
Create Unity Catalog Objects (CLI)
Use --json for create commands. Positional argument order differs per command and
has changed across CLI versions, so --json is the order-independent, version-stable form
shown throughout this skill.
# Create a catalog
databricks catalogs create --json '{"name": "my_catalog"}'
# Create a schema
databricks schemas create --json '{"name": "my_schema", "catalog_name": "my_catalog"}'
# Create a managed volume
databricks volumes create --json '{
"catalog_name": "my_catalog",
"schema_name": "my_schema",
"name": "my_volume",
"volume_type": "MANAGED"
}'
# List catalogs, schemas, volumes (read commands take simple positional args)
databricks catalogs list
databricks schemas list my_catalog
databricks volumes list my_catalog.my_schema
Positional create args still work if you prefer them, but the order is not uniform
across commands — this is the per-command order (and the reason --json is recommended):
| Command |
Positional create order |
databricks catalogs create |
NAME |
databricks schemas create |
NAME CATALOG_NAME |
databricks volumes create |
CATALOG_NAME SCHEMA_NAME NAME VOLUME_TYPE |
CLI surface varies by version. If a databricks subcommand or positional signature is
missing in your install, prefer --json, the SQL form, or the Python SDK rather than
guessing flags.
Volume File Operations (CLI)
databricks fs requires the dbfs: scheme prefix even for UC Volume paths — without it the CLI treats the path as local filesystem and errors with no such directory.
# List files in a volume
databricks fs ls dbfs:/Volumes/catalog/schema/volume/path/
# Upload a directory's contents to a volume (-r copies contents, not the directory itself)
databricks fs cp -r --overwrite /tmp/data dbfs:/Volumes/catalog/schema/volume/dest
# Download a file from a volume
databricks fs cp dbfs:/Volumes/catalog/schema/volume/file.csv /tmp/file.csv
# Create a directory in a volume
databricks fs mkdirs dbfs:/Volumes/catalog/schema/volume/new_folder
Grant & Revoke Access
GRANT/REVOKE is the core governance operation. See references/1-access-control.md for the full privilege model.
-- Grant read access on a schema to a group
GRANT USE CATALOG ON CATALOG analytics TO `data_readers`;
GRANT USE SCHEMA ON SCHEMA analytics.gold TO `data_readers`;
GRANT SELECT ON SCHEMA analytics.gold TO `data_readers`;
-- Who can access this table?
SHOW GRANTS ON TABLE analytics.gold.customers;
-- Revoke
REVOKE SELECT ON SCHEMA analytics.gold FROM `data_readers`;
Enable System Tables Access
-- Grant access to system tables
GRANT USE CATALOG ON CATALOG system TO `data_engineers`;
GRANT USE SCHEMA ON SCHEMA system.access TO `data_engineers`;
GRANT SELECT ON SCHEMA system.access TO `data_engineers`;
Common Queries
-- Table lineage: What tables feed into this table?
SELECT source_table_full_name, source_column_name
FROM system.access.table_lineage
WHERE target_table_full_name = 'catalog.schema.table'
AND event_date >= current_date() - 7;
-- Audit: Recent permission changes
SELECT event_time, user_identity.email, action_name, request_params
FROM system.access.audit
WHERE action_name LIKE '%GRANT%' OR action_name LIKE '%REVOKE%'
ORDER BY event_time DESC
LIMIT 100;
-- Billing: DBU usage by workspace
SELECT workspace_id, sku_name, SUM(usage_quantity) AS total_dbus
FROM system.billing.usage
WHERE usage_date >= current_date() - 30
GROUP BY workspace_id, sku_name;
Running SQL from the CLI
databricks experimental aitools tools query is an experimental command. The
experimental namespace is not guaranteed to be stable across CLI versions and may be
absent in your install. Prefer running system-table SQL from a SQL warehouse (SQL
editor, scheduled query) or the Python SDK (w.statement_execution.execute_statement),
or a notebook. Use the experimental CLI only for quick ad-hoc checks.
Getting the IDs these examples use. WAREHOUSE_ID — run databricks warehouses list
(or copy it from a SQL warehouse's Connection details in the UI). METASTORE_ID (used in
references/5-system-tables.md) — w.metastores.current().metastore_id
via the SDK, or the Catalog UI → metastore details.
Experimental CLI form (convenience only):
databricks experimental aitools tools query --warehouse WAREHOUSE_ID "
SELECT source_table_full_name, target_table_full_name
FROM system.access.table_lineage
WHERE event_date >= current_date() - 7
"
Stable SDK fallback (works on any CLI version):
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
resp = w.statement_execution.execute_statement(
warehouse_id="WAREHOUSE_ID",
statement="""
SELECT source_table_full_name, target_table_full_name
FROM system.access.table_lineage
WHERE event_date >= current_date() - 7
LIMIT 100
""",
)
for row in resp.result.data_array or []:
print(row)
CLI surface varies by version. If a databricks subcommand (e.g. an experimental
tool, system-schemas, or external-lineage) is missing, fall back to the SQL warehouse
or the Python SDK shown above rather than guessing flags.
Best Practices
- Grant minimal access - Apply least privilege; grant at the narrowest securable that works
- Filter by date - System tables can be large; always use date filters
- Use appropriate retention - Check your workspace's retention settings
- Schedule reports - Create scheduled queries for regular monitoring
- Prefer SQL/SDK over experimental CLI - For anything beyond quick checks
Related Skills
This skill owns Unity Catalog governance: access control, the privilege model,
external locations / storage credentials, securable DDL, fine-grained access, system
tables, and volumes. For adjacent concerns, use the sibling skill instead:
Roadmap (not yet covered — deferred to a later version)
These governance areas are intentionally out of scope for v0.3.0 and planned for later:
- Delta Sharing / Marketplace / Clean Rooms
- Lakehouse Federation (connections + foreign catalogs)
- ABAC / governed tags as policy
Resources
1---
2name: databricks-unity-catalog
3description: "Unity Catalog governance, access control, and observability. Use to grant or revoke access (GRANT/REVOKE), reason about the privilege model and ownership, set up row-level security and column masks, create external locations and storage credentials, define catalogs/schemas/tables/volumes, answer \"who can read this table\", and query system tables (audit, lineage, billing) or work with volume files in /Volumes/."
4compatibility: Requires databricks CLI (>= v1.0.0)
5metadata:
6 version: "0.3.0"
7parent: databricks-core
8---
9
10# Unity Catalog
11
12Guidance for Unity Catalog **governance** — access control, the privilege model,
13external locations, securable DDL, and fine-grained access — plus system tables and
14volume file operations.
15
16> **Before running `databricks` CLI commands, confirm the CLI and the subcommand exist.**
17> Run `databricks --version` — this skill assumes the unified CLI (**≥ v1.0.0**). Several
18> subcommands shown here (`experimental aitools`, `system-schemas`, `external-lineage`,
19> `grants`) vary by version or workspace availability; if one is missing or rejects a flag,
20> fall back to the SQL form or the Python SDK rather than guessing. Each reference notes its
21> own version floor where relevant.
22
23## When to Use This Skill
24
25Use this skill when:
26
27**Governance & access control (start here):**
28- **Granting or revoking access** — `GRANT`/`REVOKE`, the UC privilege model, ownership (`ALTER … OWNER TO`), `SHOW GRANTS`, "who can read/write this table?"
29- **Row- and column-level security** — row filters, column masks, dynamic views with `current_user()` / `is_account_group_member()`
30- **External locations & storage credentials** — `CREATE STORAGE CREDENTIAL`, `CREATE EXTERNAL LOCATION`, backing external tables/volumes
31- **Securable DDL & metadata** — creating/altering catalogs, schemas, managed vs external tables, views; comments, tags, table properties, ownership
32
33**Observability & files:**
34- Working with **volumes** (upload, download, list files in `/Volumes/`)
35- Querying **lineage** (table dependencies, column-level lineage)
36- Analyzing **audit logs** (who accessed what, permission changes)
37- Monitoring **billing and usage** (DBU consumption, cost analysis)
38- Tracking **compute resources** (cluster usage, warehouse metrics)
39- Reviewing **job execution** (run history, success rates, failures)
40- Analyzing **query performance** (slow queries, warehouse utilization)
41- Profiling **data quality** (data profiling, drift detection, metric tables)
42
43## Reference Files
44
45| Topic | File | Description |
46|-------|------|-------------|
47| **Access Control** | [references/1-access-control.md](references/1-access-control.md) | Privilege model, securable hierarchy, GRANT/REVOKE, ownership, inheritance, `SHOW GRANTS` |
48| **External Locations** | [references/2-external-locations.md](references/2-external-locations.md) | Storage credentials (AWS/Azure/GCP), external locations, validation |
49| **Securables DDL** | [references/3-securables-ddl.md](references/3-securables-ddl.md) | CREATE/ALTER/DROP catalogs/schemas/tables/views, comments, tags, ownership |
50| **Fine-Grained Access** | [references/4-fine-grained-access.md](references/4-fine-grained-access.md) | Row filters, column masks, dynamic views |
51| System Tables | [references/5-system-tables.md](references/5-system-tables.md) | Lineage, audit, billing, compute, jobs, query history |
52| Volumes | [references/6-volumes.md](references/6-volumes.md) | Volume file operations, permissions, best practices |
53| Data Profiling | [references/7-data-profiling.md](references/7-data-profiling.md) | Data profiling, drift detection, profile metrics |
54
55## Quick Start
56
57### Create Unity Catalog Objects (CLI)
58
59**Use `--json` for `create` commands.** Positional argument order differs per command and
60has changed across CLI versions, so `--json` is the order-independent, version-stable form
61shown throughout this skill.
62
63```bash
64# Create a catalog
65databricks catalogs create --json '{"name": "my_catalog"}'
66
67# Create a schema
68databricks schemas create --json '{"name": "my_schema", "catalog_name": "my_catalog"}'
69
70# Create a managed volume
71databricks volumes create --json '{
72 "catalog_name": "my_catalog",
73 "schema_name": "my_schema",
74 "name": "my_volume",
75 "volume_type": "MANAGED"
76}'
77
78# List catalogs, schemas, volumes (read commands take simple positional args)
79databricks catalogs list
80databricks schemas list my_catalog
81databricks volumes list my_catalog.my_schema
82```
83
84Positional `create` args still work if you prefer them, but the order is **not** uniform
85across commands — this is the per-command order (and the reason `--json` is recommended):
86
87| Command | Positional `create` order |
88|---------|---------------------------|
89| `databricks catalogs create` | `NAME` |
90| `databricks schemas create` | `NAME CATALOG_NAME` |
91| `databricks volumes create` | `CATALOG_NAME SCHEMA_NAME NAME VOLUME_TYPE` |
92
93> **CLI surface varies by version.** If a `databricks` subcommand or positional signature is
94> missing in your install, prefer `--json`, the SQL form, or the Python SDK rather than
95> guessing flags.
96
97### Volume File Operations (CLI)
98
99`databricks fs` requires the `dbfs:` scheme prefix even for UC Volume paths — without it the CLI treats the path as local filesystem and errors with `no such directory`.
100
101```bash
102# List files in a volume
103databricks fs ls dbfs:/Volumes/catalog/schema/volume/path/
104
105# Upload a directory's contents to a volume (-r copies contents, not the directory itself)
106databricks fs cp -r --overwrite /tmp/data dbfs:/Volumes/catalog/schema/volume/dest
107
108# Download a file from a volume
109databricks fs cp dbfs:/Volumes/catalog/schema/volume/file.csv /tmp/file.csv
110
111# Create a directory in a volume
112databricks fs mkdirs dbfs:/Volumes/catalog/schema/volume/new_folder
113```
114
115### Grant & Revoke Access
116
117`GRANT`/`REVOKE` is the core governance operation. See [references/1-access-control.md](references/1-access-control.md) for the full privilege model.
118
119```sql
120-- Grant read access on a schema to a group
121GRANT USE CATALOG ON CATALOG analytics TO `data_readers`;
122GRANT USE SCHEMA ON SCHEMA analytics.gold TO `data_readers`;
123GRANT SELECT ON SCHEMA analytics.gold TO `data_readers`;
124
125-- Who can access this table?
126SHOW GRANTS ON TABLE analytics.gold.customers;
127
128-- Revoke
129REVOKE SELECT ON SCHEMA analytics.gold FROM `data_readers`;
130```
131
132### Enable System Tables Access
133
134```sql
135-- Grant access to system tables
136GRANT USE CATALOG ON CATALOG system TO `data_engineers`;
137GRANT USE SCHEMA ON SCHEMA system.access TO `data_engineers`;
138GRANT SELECT ON SCHEMA system.access TO `data_engineers`;
139```
140
141### Common Queries
142
143```sql
144-- Table lineage: What tables feed into this table?
145SELECT source_table_full_name, source_column_name
146FROM system.access.table_lineage
147WHERE target_table_full_name = 'catalog.schema.table'
148 AND event_date >= current_date() - 7;
149
150-- Audit: Recent permission changes
151SELECT event_time, user_identity.email, action_name, request_params
152FROM system.access.audit
153WHERE action_name LIKE '%GRANT%' OR action_name LIKE '%REVOKE%'
154ORDER BY event_time DESC
155LIMIT 100;
156
157-- Billing: DBU usage by workspace
158SELECT workspace_id, sku_name, SUM(usage_quantity) AS total_dbus
159FROM system.billing.usage
160WHERE usage_date >= current_date() - 30
161GROUP BY workspace_id, sku_name;
162```
163
164## Running SQL from the CLI
165
166> **`databricks experimental aitools tools query` is an experimental command.** The
167> `experimental` namespace is not guaranteed to be stable across CLI versions and may be
168> absent in your install. Prefer running system-table SQL from a **SQL warehouse** (SQL
169> editor, scheduled query) or the **Python SDK** (`w.statement_execution.execute_statement`),
170> or a **notebook**. Use the experimental CLI only for quick ad-hoc checks.
171
172> **Getting the IDs these examples use.** `WAREHOUSE_ID` — run `databricks warehouses list`
173> (or copy it from a SQL warehouse's *Connection details* in the UI). `METASTORE_ID` (used in
174> [references/5-system-tables.md](references/5-system-tables.md)) — `w.metastores.current().metastore_id`
175> via the SDK, or the Catalog UI → metastore details.
176
177Experimental CLI form (convenience only):
178
179```bash
180databricks experimental aitools tools query --warehouse WAREHOUSE_ID "
181 SELECT source_table_full_name, target_table_full_name
182 FROM system.access.table_lineage
183 WHERE event_date >= current_date() - 7
184"
185```
186
187Stable SDK fallback (works on any CLI version):
188
189```python
190from databricks.sdk import WorkspaceClient
191
192w = WorkspaceClient()
193resp = w.statement_execution.execute_statement(
194 warehouse_id="WAREHOUSE_ID",
195 statement="""
196 SELECT source_table_full_name, target_table_full_name
197 FROM system.access.table_lineage
198 WHERE event_date >= current_date() - 7
199 LIMIT 100
200 """,
201)
202for row in resp.result.data_array or []:
203 print(row)
204```
205
206> **CLI surface varies by version.** If a `databricks` subcommand (e.g. an `experimental`
207> tool, `system-schemas`, or `external-lineage`) is missing, fall back to the SQL warehouse
208> or the Python SDK shown above rather than guessing flags.
209
210## Best Practices
211
2121. **Grant minimal access** - Apply least privilege; grant at the narrowest securable that works
2132. **Filter by date** - System tables can be large; always use date filters
2143. **Use appropriate retention** - Check your workspace's retention settings
2154. **Schedule reports** - Create scheduled queries for regular monitoring
2165. **Prefer SQL/SDK over experimental CLI** - For anything beyond quick checks
217
218## Related Skills
219
220This skill owns Unity Catalog **governance**: access control, the privilege model,
221external locations / storage credentials, securable DDL, fine-grained access, system
222tables, and volumes. For adjacent concerns, use the sibling skill instead:
223
224- **databricks-core** (declared parent) — auth, profile selection, generic CLI, and catalog/table *exploration*
225- **[databricks-metric-views](../databricks-metric-views/SKILL.md)** — metric view definitions / DDL (`WITH METRICS LANGUAGE YAML`)
226- **[databricks-iceberg](../databricks-iceberg/SKILL.md)** — Managed Iceberg, External Iceberg Reads (fka Uniform), and **Iceberg REST Catalog (IRC) credential *vending*** for external engines — distinct from UC storage credentials (see [references/2-external-locations.md](references/2-external-locations.md))
227- **[databricks-ml-training](../databricks-ml-training/SKILL.md)** — UC model registration and `@prod`/`@challenger` aliases
228- **[databricks-vector-search](../databricks-vector-search/SKILL.md)** — Vector Search indexes
229- **[databricks-pipelines](../databricks-pipelines/SKILL.md)**, **[databricks-jobs](../databricks-jobs/SKILL.md)**, **[databricks-lakeflow-connect](../databricks-lakeflow-connect/SKILL.md)** — *producing* tables via pipelines/jobs/managed ingestion
230- **[databricks-lakebase](../databricks-lakebase/SKILL.md)** — Lakebase / synced tables (OLTP)
231- **[databricks-ai-functions](../databricks-ai-functions/SKILL.md)** — AI functions such as `ai_mask` / `ai_classify` (AI *transforms*, **not** access control — see [references/4-fine-grained-access.md](references/4-fine-grained-access.md))
232- **[databricks-aibi-dashboards](../databricks-aibi-dashboards/SKILL.md)** — AI/BI dashboards on UC data
233- **[databricks-synthetic-data-gen](../databricks-synthetic-data-gen/SKILL.md)** — generating data stored in UC volumes
234
235### Roadmap (not yet covered — deferred to a later version)
236
237These governance areas are intentionally **out of scope for v0.3.0** and planned for later:
238
239- Delta Sharing / Marketplace / Clean Rooms
240- Lakehouse Federation (connections + foreign catalogs)
241- ABAC / governed tags as policy
242
243## Resources
244
245- [Unity Catalog Privileges & Securable Objects](https://docs.databricks.com/data-governance/unity-catalog/manage-privileges/privileges.html)
246- [Unity Catalog System Tables](https://docs.databricks.com/administration-guide/system-tables/)
247- [Audit Log Reference](https://docs.databricks.com/administration-guide/account-settings/audit-logs.html)
248- [Manage External Locations and Storage Credentials](https://docs.databricks.com/connect/unity-catalog/index.html)