Skip to main content

SDP-META Databricks App — User Guide

The SDP-META Databricks App is a browser-based GUI for onboarding, deploying, and operating Lakeflow Spark Declarative Pipelines without using the CLI or hand-editing YAML. This page is the per-panel reference. For deploy / local-dev / auth, see the databricks_app/README on GitHub.

Three supported deploy paths
  • macOS / Linux / WSL: bash scripts/deploy_app.sh --profile <cli-profile> --app <app-name> --path /Workspace/Users/<you>/<app-folder> stages the full repo and deploys in one command. See databricks_app/README.
  • Windows (native PowerShell): .\scripts\deploy_app.ps1 -DatabricksProfile <cli-profile> -App <app-name> -Path /Workspace/Users/<you>/<app-folder> — same flow using robocopy, no Git Bash / WSL required. Details in WINDOWS_DEPLOY.md.
  • No CLI at all (Apps UI + Git folder): create a Databricks Git folder pointing at this repo and aim the App at <git-folder>/databricks_app/. Walkthrough in UI_GIT_DEPLOY.md.

Contents

  1. The flow
  2. First-time setup
  3. Top bar
  4. Step 1 — Onboarding
  5. Step 2 — DataflowSpecs
  6. Step 3 — Deployment
  7. Monitor
  8. Metadata
  9. Demos
  10. App SP permissions
  11. Troubleshooting

The flow

Pipeline    Onboarding  →  DataflowSpecs  →  Deployment
Step 1 Step 2 Step 3

Explore Demos

Operate Monitor Metadata

Happy path is left-to-right. Each step auto-fills the next, so catalog / schema / table names are typed exactly once. Manual edits are never overwritten — only empty fields are filled.


First-time setup

#ActionWhere
1Configure a SQL warehouse (use existing, or create a 2X-Small serverless one)Top-bar Warehouse chip
2Verify the App SP has USE_CATALOG + CREATE_SCHEMA on your catalogDemos → Test App access
3Pick your onboarding modeOnboarding → mode radio

To persist the warehouse across redeploys, copy its ID from the success message into databricks_app/app.yaml:

env:
- name: DATABRICKS_SQL_WAREHOUSE_ID
value: "<warehouse-id>"

Top bar

ElementAction
DocsOpens docs site (new tab)
GitHubOpens repo (new tab)
Warehouse chipConfigure / inspect SQL warehouse. Green = running, amber = stopped, grey = unset

Clicking the Warehouse chip opens the picker, which lists every warehouse the App SP can see and lets you set the active one for the session (or persist it via DATABRICKS_SQL_WAREHOUSE_ID in app.yaml):

Warehouse picker


Step 1 — Onboarding

Output: bronze + silver *_dataflowspec rows in UC + a UC volume holding copied JSON/DDL supporting files.

Onboarding panel

Mode picker

ModePath source
Bundled demoDropdown of curated specs under demo/
UC Volume/Volumes/<cat>/<sch>/<vol>/<file>
ManualFree-form path (repo-relative, workspace, or absolute)

Bundled demo dropdown

Curated to only contain specs that onboard out-of-the-box with the default form values. Every entry below works on the first click; the picker hides any spec that would need external infrastructure (Event Hubs, Kafka, custom UC source tables) or multi-step orchestration.

DemoWhat it showsNotes
Cars (default)CSV → bronze cars + silver cars_usaSimplest; start here
Multi-Source CDC3 regional Auto Loader sources (US / EU / APAC) → 3 bronze CDC tablesBest metadata-driven showcase
Silver Fanout1 CSV → bronze cars → 4 silver tables (cars_usa, _germany, _uk, _japan)Single onboarding pass ¹
Cloud FilesStreaming JSON → bronze + silver with row-filter UDF and DQEAuto-merges the A2 customers_delta producer
DAIS DemoCustomers + transactions, CDC + DQE + silver transformationsAuto-sets Environment = prod ²

¹ Fanout consumer rows omit source_details — the bronze pass skips them so the silver pass picks them up. ² The template uses _prod field suffixes.

Form fields

FieldReq?Notes
Unity Catalog enabledAlways on (the App is UC-only); toggle is legacy
Unity Catalog nameIdentifier-validated
Onboarding file pathAuto-populated by the mode picker
SDP-META schemaHolds DataflowSpec tables (created if missing)
Bronze / Silver schemaCreated if missing
Layer1 = bronze only · 2 = bronze + silver
EnvironmentMust match the <field>_<env> suffix in the template, or every row is silently skipped
Bronze / Silver tableDefaults to bronze_dataflowspec / silver_dataflowspec
Local directoryWhere supporting JSON / DDL live (default <repo>/demo/)
OverwriteReplaces existing DataflowSpec rows
ServerlessSubmit job to serverless cluster

Dry-run. No side effects. Surfaces:

  • Rendered template (post {uc_volume_path} / {uc_catalog_name} / {bronze_schema} / {silver_schema} substitution)
  • Env-suffix mismatch warnings (catches the #1 silent-failure mode)
  • Per-file existence check for every DQE/DDL/transformation path

Submit

POST /onboarding → mints a job token → spawns sdp-meta onboard_ui → frontend streams logs. On success, a View DataflowSpecs → CTA navigates to Step 2 with values pre-filled and the query already run.


Step 2 — DataflowSpecs

Output: lets you read back the rows onboarding wrote and pick a data_flow_group to deploy.

DataflowSpecs panel — bronze + silver grids with group pills

ElementBehavior
4 input fields (catalog / schema / bronze table / silver table)Auto-filled when arriving from Onboarding
Load DataflowSpecsGET /api/dataflowspecs — runs SELECT * in parallel against both tables
Group pillsClick to filter both tables to one data_flow_group
Bronze / Silver gridFull DataflowSpec rows (scroll horizontally)
Deploy this group → CTAAppears once a group is selected. Navigates to Deployment with everything pre-filled including the group(s)

Common errors: TABLE_OR_VIEW_NOT_FOUND (run onboarding first), no warehouse configured (top-bar chip).


Step 3 — Deployment

Output: a Lakeflow Spark Declarative Pipeline tagged sdp_meta=<version>.

Deployment panel

Fields

FieldNotes
Pipeline nameRequired
Unity Catalog nameRequired (UC mode)
DataFlow Spec schemaSchema containing bronze/silver *_dataflowspec
Bronze / Silver DataflowSpec tableDefaults match Step 1
Layerbronze_silver (default — ingest + transform in one pipeline) / bronze / silver. Drives which group(s) are required
Bronze groupRequired when layer ∈ {bronze, bronze_silver}
Silver groupRequired when layer ∈ {silver, bronze_silver}
Target schemaAuto-syncs from layer when blank
ServerlessSubmit as serverless pipeline

Submit

Same machinery as Onboarding: token + log streaming. On success, the modal includes the workspace URL of the new pipeline.


Monitor

Output: all SDP-META pipelines in the workspace, with start/stop + events + click-through to the Databricks UI.

Pipeline Monitor — list of SDP-META pipelines with start/stop/events actions

Filter

A pipeline is shown if either:

  1. Tag sdp_meta=<any-non-empty-value> (includes legacy sdp_meta=true)
  2. configuration contains any of bronze.dataflowspecTable, silver.dataflowspecTable, bronze.group, silver.group

Columns

ColumnContent
NameExternal link (↗) to <host>/pipelines/<id> + version chip (e.g. v0.1.0)
StateIDLE / RUNNING / FAILED / STOPPED badge
CreatorOwning principal
ActionsStart / Stop / Events (in-app drawer with last 50 events)

Falls back to the in-app events drawer on the name click if the workspace host can't be resolved.


Metadata

Two tools share this panel.

UC browse

Cascading dropdowns: Catalog → Schema → Table. Picking a table runs SELECT * ... LIMIT N (max 1000) with an optional WHERE clause via the Statement Execution API.

Metadata — UC browse with cascading catalog/schema/table dropdowns

Spec editor

ActionEndpointNotes
List workspace pathGET /api/metadata/workspace-ls
Load fileGET /api/metadata/workspace-fileJSON / YAML auto-detected
Save filePOST /api/metadata/workspace-fileParse-validates before writing
ValidatePOST /api/metadata/parse-spec3-layer (see below)

Metadata — Spec editor with parse / validate output

Three-layer validation

LayerCatchesRuns when
1 — SyntaxJSON / YAML parseAlways
2 — SemanticsUC identifiers, source format, CDC scd_type, DQE actions, silver transformation shapesdp-meta wheel installed (always in App container)
3 — File refsDQE / DDL / transformation pathsSurfaced as warnings only — Spark required to verify

Supported spec_type: onboarding, dqe, silver_transform.


Demos

Click Test App access first — every demo subprocess re-runs the preflight and a missing grant returns the GRANT SQL you need.

Demos panel — Test App access plus the demo launch tiles

DemoWhat it runs
Cloud FilesAuto Loader + a row_filter UDF
Apply Changes SnapshotCDC SCD Type 1 from snapshots
Silver FanoutOne bronze → many silver
DAIS DemoDAIS end-to-end walkthrough
Interactive DemoSubmits SDP_META_INTERACTIVE_DEMO notebook as a 1-step job; pip installs databricks-labs-sdp-meta from PyPI on every launch
Removed

DLT Sink (Kafka/Event-Hubs wiring not available to the App SP) and DABs (Terraform not in the container). Both still work from a local CLI.


App SP permissions

Full grant list, SP naming convention, and ready-to-paste SQL template live in databricks_app/README → App service principal permissions.

In-app check: Demos → Test App access calls GET /check-uc-grants?uc_name=<cat> and returns the exact GRANT SQL when a grant is missing (the SP can't grant privileges to itself).


Troubleshooting

SymptomCauseFix
Onboarding succeeds but DataflowSpec tables are emptyenvironment field doesn't match the template's <field>_<env> suffixClick Previewenv_warning names the right suffix
TABLE_OR_VIEW_NOT_FOUND on DataflowSpecs loadOnboarding not yet run for this catalog/schemaRun onboarding
"No SQL warehouse configured"Step 1 of first-time setup not doneTop-bar Warehouse chip
Monitor shows zero pipelines after deployPipeline created outside the App lacks the sdp_meta tagUse sdp-meta deploy_ui — it tags automatically
Monitor name click opens events drawer instead of new tabBackend couldn't resolve ws.config.hostLocal only — set DATABRICKS_HOST or ~/.databrickscfg.host
"Demo notebook source not found" (Interactive Demo)App deployed with raw databricks sync instead of scripts/deploy_app.sh / deploy_app.ps1Redeploy with the script
App crashes on first Windows deploy: bad interpreter: /bin/bash\r or \r: command not foundWindows git's default core.autocrlf=true checked out start.sh with CRLF and the Linux App container can't execute itUse scripts/deploy_app.ps1 (auto-strips CRLF) or run git add --renormalize . && git commit after pulling the repo's .gitattributes. Details: WINDOWS_DEPLOY.md → Troubleshooting
Demo modal shows "Grant required" panelApp SP missing UC grantsCopy/paste GRANT SQL, run as catalog owner, retry
"Required fields missing" 400Form bypassed client-side checkFill the named fields
"Could not render template after substitution" on PreviewSubstitution value broke YAML indentation / had unescaped quotesSanitize the catalog / schema / volume name
Job log stream stopsSubprocess diedGET /api/job/<token>/logs returns {done:true} on exit; check App stdout for traceback

See also