Install
$ agentstack add skill-d-padmanabhan-agent-engineering-handbook-databricks ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Databricks - Playbook
Companion rule: [481-databricks.mdc](../../rules/481-databricks.mdc). This skill turns those patterns into end-to-end workflows.
> [!NOTE] > Current Databricks names: Lakeflow Spark Declarative Pipelines is the current name for Delta Live Tables (DLT). Declarative Automation Bundles is the current name for Databricks Asset Bundles (DABs). Existing DLT/DAB code and docs still work, but new guidance should use the current names and mention the former names for searchability.
When to invoke
Use when the user is:
- Bootstrapping a new Databricks workspace or account
- Migrating to Unity Catalog (from Hive metastore or no-governance state)
- Designing or reviewing a Lakeflow Spark Declarative Pipeline (formerly DLT)
- Deploying jobs, notebooks, and pipelines with Declarative Automation Bundles
- Setting cluster policies or rolling out Serverless / SQL Warehouses
- Tuning cost (cluster sizing, Photon, spot, job compute vs all-purpose)
- Governing data (Unity Catalog, tags, access control, lineage)
- Recovering from a bad change (Delta time travel /
RESTORE) - Hardening access (SCIM, SSO, service principals, OAuth tokens)
Golden Rules
- Unity Catalog is the default. Hive metastore is for legacy migration only.
- Service principals and OAuth, not personal access tokens, for automation.
- Standard access mode by default. Dedicated access mode only when the workload requires it; no-isolation shared is not acceptable for governed production.
- Job compute for jobs. All-purpose clusters are for exploration.
- Delta is the default table format; Delta Lake for Spark, Delta tables under Unity Catalog.
- Lineage and tags are not optional - govern at ingest, not post hoc.
- Every notebook / repo change runs in CI before it runs against prod data.
- Declarative Automation Bundles deploy projects; Terraform provisions account/workspace infrastructure.
- System tables are operational infrastructure for cost, audit, lineage, and query history.
Non-Negotiables
- Production data uses Unity Catalog: three-part names, group/service-principal ownership, governed external locations or volumes.
- Catalog topology maps to business domain, environment, region/data residency, and workspace binding requirements before production objects are created.
- No persistent DBFS mounts (
dbfs:/mnt/...) for governed production data. - No personal access tokens in production automation.
- No
account usersgrants, individual owners, or broadALL PRIVILEGESgrants without documented exception. BROWSE,APPLY TAG, andMANAGEare metadata-only capabilities; do not confuse them with data access.- Standard access mode is the default. Dedicated access mode must state the technical reason.
- Deployable jobs and Lakeflow pipelines use Declarative Automation Bundles with
databricks bundle validatein CI. - Serverless SQL / jobs / Lakeflow are preferred where available and appropriate; classic clusters require a reason and a policy.
- PII/PCI/sensitive tables require tags, masks, row filters, and audit visibility before gold/serving publication.
Workflow 1 - Workspace Bootstrap
Stand up a new workspace with governance, security, and cost controls from day one.
Steps
- Account-level setup:
- Account console used for identity, Unity Catalog metastore, and workspace provisioning
- SSO via Okta / Entra ID / Google with SCIM provisioning
- Admin role in a small, audited group
- Unity Catalog metastore per region, tied to cloud storage location (one per region, one per env optionally)
- Workspace deployment via Terraform (
databricksprovider):
- Network: private subnets, VPC endpoints / Private Link
- Customer-managed keys for notebooks and workspace storage
- Workspace bound to specific metastore
- Groups and access (via SCIM from IdP):
admins-- workspace adminsdata-engineers-,data-analysts-,data-scientists-,platform-- Keep global admin list tiny
- Cluster policies (see Workflow 4) for all user-facing compute
- Catalog structure:
- Catalogs per environment (
dev,stage,prod) or per domain (sales,marketing) - Schemas within:
raw,staging,curated,sandbox - Default grants minimal; team-specific access roles
- External locations + storage credentials (Unity Catalog) for cloud object storage; no direct S3/ADLS/GCS creds in notebooks
- Budget and alerts:
- System tables for billing (
system.billing.usage) - Dashboards for cost by workspace / cluster / user / job
- Alerts on spend anomalies
Deliverable: Terraform modules (account, workspace, UC, groups, policies), bootstrap runbook, cost dashboard.
See [references/workspace-bootstrap.md](references/workspace-bootstrap.md).
Workflow 2 - Unity Catalog Migration
Migrate from Hive metastore (or no governance) to Unity Catalog.
Steps
- Inventory:
- All databases / tables in Hive
- Locations (mount points,
dbfs:/mnt/..., direct S3 paths) - Access patterns (who reads / writes)
- Data pipelines depending on Hive paths
- Metastore setup (if not already done).
- External locations in Unity Catalog for the cloud storage backing the Hive tables.
- Catalog and schema creation that mirrors the source structure (or a better one).
- Migration options:
- Upgrade in place:
SYNCcommand for schemas, orCREATE TABLE ... LIKE ... LOCATION ...to point UC tables at existing storage - Copy:
CREATE TABLE ... AS SELECT ...into new UC tables (physical re-write; expensive but clean) - Dual-write during transition: write to both Hive and UC, read from UC, retire Hive
- Lineage and ownership:
- Set UC owner to a group, not a person
- Add tags for sensitivity, owner, data steward
- Access control:
- Grants at catalog / schema / table level
- No
ANONYMOUS FUNCTION/ALL PRIVILEGESsprawl - Column-level masking / row filters where needed
- Cut over pipelines and BI:
- Update SQL Warehouses to use UC as default catalog
- Update notebooks / jobs to reference
catalog.schema.tablethree-part names - Disable Hive metastore access path after validation
- Decommission Hive once all reads have moved.
Deliverable: Migration plan per database, cutover runbook, rollback plan, governance model (owners, stewards, tags, classifications).
Workflow 3 - Catalog Topology and Delegated Ownership
Translate organization structure into catalogs, schemas, workspaces, storage, and ownership.
Design dimensions
- Metastore / region strategy: one metastore per cloud-region; use Delta Sharing for cross-region/cross-cloud sharing.
- Catalog boundary: business unit, domain, environment, region, or shared data product.
- Workspace binding: which workspaces can see/use each catalog.
- Storage boundary: metastore, catalog, or schema managed location; external location for externally managed data.
- Ownership and delegation: group/service-principal owners,
MANAGEdelegation, data stewards.
Topology patterns
| Pattern | Example | Use when | |---|---|---| | Direct separation | finance_prod, finance_stage, finance_dev | Environment isolation and workspace binding matter most | | Indirect separation | finance catalog with prod_*, stage_*, dev_* schemas | Fewer catalogs and team autonomy matter more | | Region + domain | emea_finance_prod, apac_sales_prod | Data residency or regional governance is a hard boundary | | Shared reference | shared_reference_prod | Cross-domain data products or common dimensions |
Ownership model
OWNER: full control, unique per object, can transfer ownership. Use groups/service principals in production.MANAGE: can grant/revoke permissions without implicit data access or ownership transfer.- Delegation pattern:
- Metastore admin grants
CREATE CATALOGto catalog owner groups. - Catalog owner groups create catalogs and schemas.
- Catalog/schema owners grant
MANAGEto domain lead groups. - Data stewards get
APPLY TAG; broad users may getBROWSEfor discovery.
Deliverable: topology decision record showing domain/env/region catalog names, workspace bindings, managed locations, owner groups, MANAGE delegates, and discovery/tagging groups.
Workflow 4 - Storage Governance and External Access
Design where data physically lives and how Unity Catalog mediates access.
Managed storage hierarchy
Unity Catalog resolves managed storage from most specific to least specific:
- Schema managed location
- Catalog managed location
- Metastore default storage
Use schema-level managed locations for regulated data requiring physical isolation. Use catalog-level locations for domain/environment boundaries. Keep metastore default storage as a fallback.
Tables vs volumes
| Need | Use | |---|---| | Tabular data queried by SQL/Spark | Delta table (catalog.schema.table) | | Non-tabular files, PDFs, images, configs, ML artifacts | Unity Catalog volume (/Volumes/catalog/schema/volume/...) | | Existing cloud files where lifecycle remains outside Databricks | External table or external volume | | Legacy/external database without immediate copy | Foreign catalog / Lakehouse Federation |
External access chain
For external data, require the full chain:
- Storage credential - cloud identity Unity Catalog can use.
- External location - non-overlapping cloud path bound to the credential.
- External table/volume - governed object using the external location.
Reject overlapping external locations, raw cloud credentials in notebooks, and direct cloud paths where UC volumes/external locations should be used.
Deliverable: storage map showing managed locations, storage credentials, external locations, volumes, foreign catalogs, owners, and allowed write paths.
Workflow 5 - Privileges, Discovery, FGAC, and ABAC
Implement least privilege and scalable fine-grained access.
Privilege chain
To query a table, users need:
USE CATALOGUSE SCHEMASELECTon the table/view
Higher-level grants inherit downward. Grant at the highest safe scope; avoid per-table grants unless the table is exceptional.
Metadata-only privileges
BROWSE: discover objects and metadata without reading data.APPLY TAG: classify assets without data access.MANAGE: delegate permission administration without ownership or implicit data access.
FGAC choices
| Pattern | Use when | |---|---| | Row filter | Rows visible depend on user/group/context | | Column mask | Sensitive columns need redaction/transformation | | ABAC governed-tag policy | Same row/mask logic applies across many tables/columns | | Dynamic view | Legacy/special-case logic not expressible as table-attached policy |
Prefer ABAC for enterprise scale: governed tags + inheritable policies beat per-table copy/paste filters and masks.
Validation
Always validate outcomes:
SHOW GRANTS ON CATALOG finance_prod;
SHOW GRANTS `analysts` ON SCHEMA finance_prod.sales;
SHOW POLICIES ON CATALOG finance_prod;
SHOW POLICIES ON SCHEMA finance_prod.sales;
DESCRIBE TABLE EXTENDED finance_prod.sales.transactions;
Audit signals:
- grant/revoke actions
- ownership transfers
- policy and tag changes
- token creation
- admin role changes
- denied/failed access attempts
Deliverable: grants/policies matrix plus validation query outputs and system-table audit queries.
Workflow 6 - Lakeflow Spark Declarative Pipelines (formerly DLT)
Lakeflow Spark Declarative Pipelines for declarative, managed, observable pipelines. Existing DLT syntax still works; new Python should prefer from pyspark import pipelines as dp.
When Lakeflow
- Streaming / micro-batch SCD pipelines
- Data quality enforcement (expectations) required
- Lineage and observability wanted out of the box
- Team prefers declarative SQL / Python over hand-orchestrated jobs
When NOT Lakeflow
- One-off batch jobs
- Extensive custom Spark (Lakeflow constrains some APIs)
- Cost sensitivity with low duty cycle (pipeline compute has overhead)
Current Python naming
from pyspark import pipelines as dp
@dp.table
def raw_events():
return spark.readStream.table("prod.raw.events")
@dp.materialized_view
def daily_event_counts():
return spark.read.table("prod.silver.events").groupBy("event_date").count()
DLT compatibility mapping:
import dlt->from pyspark import pipelines as dp@dlt.tablefor streaming ->@dp.table@dlt.tablefor batch ->@dp.materialized_view@dlt.view->@dp.temporary_viewdlt.apply_changes(...)->dp.create_auto_cdc_flow(...)
Design
- Ingest to raw (bronze) from cloud storage via Auto Loader or Kafka
- Stage (silver) with schema enforcement, de-dup, CDC via
APPLY CHANGES INTO - Curated (gold) for business aggregates / dimensional model
- Expectations on each layer:
@expect_or_dropfor quality-gate columns@expect_or_failfor must-pass invariants- Track failure counts in DLT event log
- Serverless Lakeflow where available for lower cost and managed sizing
- Continuous vs triggered: continuous for streaming SLAs; triggered for batch windows
- Target target_lag with Dynamic Tables equivalents or DLT settings
- Naming and lineage: three-part UC names end-to-end; tags on every table
Guardrails
- Pipeline in Git; deployed via Declarative Automation Bundles or Terraform
- CI: unit tests for transformations, integration test against a dev catalog
- Alerting: event log -> metrics -> alerts on expectation failures and pipeline failures
- Cost budget per pipeline
Workflow 7 - Cluster Policies
Enforce cost, security, and compatibility at cluster-creation time.
Policies to define
| Policy | Audience | Shape | |---|---|---| | interactive-small | Data analysts | Single-node or 1-4 workers; auto-terminate 30-60 min; Standard access mode | | interactive-medium | Data engineers / scientists | 1-8 workers; auto-terminate 60 min; Standard access mode | | job-compute | Jobs / Lakeflow | Fixed instance types; no interactive attach; auto-scale caps | | ml-gpu | Data scientists | GPU-enabled types; restricted to ML group; auto-terminate 30 min | | shared-serverless-sql | SQL users | Serverless SQL Warehouse sizes S/M/L, governed by policy |
Policy content
- Enforced tags:
cost_center,owner,env,pipeline(billable by tag) - Runtime pinning to LTS + latest patch
- Init scripts disallowed or restricted to vetted list
- Access mode = Standard for most UC workloads; Dedicated only by documented exception
- DBFS / mount usage disallowed in UC-only workspaces
- Instance profiles / IAM roles via managed service credentials
Terraform
resource "databricks_cluster_policy" "interactive_small" {
name = "interactive-small"
definition = jsonencode({
"spark_version" = { "type": "fixed", "value": "14.3.x-scala2.12" },
"autotermination_minutes" = { "type": "range", "minValue": 15, "maxValue": 60 },
# Provider-level field/value may vary by Databricks provider version.
# Human-facing policy: Standard access mode for most UC workloads.
"data_security_mode" = { "type": "fixed", "value": "USER_ISOLATION" },
"custom_tags.cost_center" = { "type": "unlimited" },
# ...
})
}
Then grant CAN_USE to the right group.
Workflow 8 - Cost and Performance Tuning
Levers (ordered by impact)
- Right compute type:
- Serverless SQL for BI
- Job compute (not all-purpose) for jobs
- Serverless Lakeflow where eligible
- Photon on for Spark SQL / DataFrame workloads - almost always faster and cheaper
- Auto-scaling - set min low; max capped by
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: d-padmanabhan
- Source: d-padmanabhan/agent-engineering-handbook
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.