Quickstart: Databricks → Microsoft Fabric¶
Scenario: You have Databricks + a Microsoft Fabric tenant. You want multi-platform pipelines with Fabric as the consumer layer (Lakehouses, Warehouses, semantic models, reports).
Estimated time: 30–45 minutes for first deploy (Fabric auth flows take more setup than Power BI alone).
Prerequisites¶
| Requirement | Why |
|---|---|
| Python 3.10+ | Engine + CLI |
| Git | Clone + version control |
| Databricks workspace | Source compute / pipelines |
| Databricks personal access token (PAT) | Auth for the Databricks connector |
| Microsoft Fabric trial or capacity | Target tenant for Lakehouses + Warehouses + reports |
| Azure account in the Fabric tenant | Auth for Fabric REST API |
| Azure CLI installed | For az login against the Fabric tenant |
| At least Member role on the target Fabric workspace | Fabric returns 404 (not 403) when permissions are insufficient — silent failure mode |
Step 1 — Clone and bootstrap¶
Same as the Databricks → Power BI quickstart: clone, venv, install dependencies. Skip preflight here — it runs in step 6 after the project is scaffolded.
Step 2 — Authenticate to Databricks¶
Same as step 2 in the Databricks → Power BI quickstart. Set DATABRICKS_TOKEN as a user env var.
Step 3 — Authenticate to Fabric (Azure AD)¶
Fabric REST API uses Azure AD. Sign in via the Azure CLI:
Verify:
The output should list the Fabric tenant and a subscription. If you have Fabric access without an Azure subscription, use --allow-no-subscriptions:
Advanced: ade-ops supports per-environment identity isolation via the optional
auth.azure_config_dirfield inproject.yaml, in case you need to operate against multiple tenants from the same machine. This is not part of the standard flow — open an issue taggedsetup-questionif your environment requires it.
Step 4 — Scaffold the reference distribution¶
Choose databricks-to-fabric. The skill scaffolds:
distributions/reference/projects/<your-project-name>/config/project.yamlwith Databricks + Fabric platform blocksoverlays/{dev,cert,prod}.yamlwith per-env catalog, schema, workspace UUIDsconfig/credentials.example.yaml
Manual setup: copy from core/templates/scenario-databricks-to-fabric/.
Step 5 — Configure workspace + identity¶
Edit distributions/reference/projects/<project>/config/project.yaml:
project:
name: <your-project-name>
platforms:
databricks:
host: https://<your-workspace>.cloud.databricks.com
fabric:
tenant_id: <fabric-tenant-uuid>
environments:
dev:
overlay: overlays/dev.yaml
platforms:
databricks:
workspace_path: /Workspace/Users/<your-user>/<project>
catalog: <bronze_dev>
schema: <analytics>
fabric:
workspace_id: <fabric-workspace-uuid>
auth:
method: azure_cli
tenant_id: <fabric-tenant-uuid>
The connector uses the system default Azure CLI profile (the one you signed into in step 3). Per-environment identity isolation via auth.azure_config_dir is available as an advanced option — see step 3 note above.
Copy credentials:
cp distributions/reference/projects/<project>/config/credentials.example.yaml \
distributions/reference/projects/<project>/config/credentials.yaml
⚠️ If this machine also does client work, override the demo's Databricks
host/tokenwith literal demo values. Leaving them as${DATABRICKS_HOST}/${DATABRICKS_TOKEN}when you already have those env vars set for a client workspace makes this demo silently target your client's workspace. Seecore/conventions/credentials.md→ "Scenario C".
Verify with preflight¶
Before pulling, validate the setup end-to-end:
You should see green ticks for Python, dependencies, project config, credentials, Databricks reachability, and Fabric reachability. With --env, preflight also prints the token identity it authenticates as and flags a mismatch against the intended target — confirm it is the demo workspace before any push. If anything is red, the message explains what to set.
Step 6 — First pull¶
Databricks scope:
python -m core.cli pull \
--project distributions/reference/projects/<project> \
--env dev \
--scope notebooks
Fabric scope (Lakehouse + Warehouse + reports):
python -m core.cli pull \
--project distributions/reference/projects/<project> \
--env dev \
--scope fabric_items
PBIR reports + semantic models materialize as Power BI Desktop project folders (.Report/ + .SemanticModel/) under state/dev/power_bi/.
Step 7 — Author + push¶
Databricks side: author under src/notebooks/, dry-run, push.
Fabric side: author or pulled PBIR / TMDL trees under src/power_bi/ and src/fabric/. The push step repacks the folder as InlineBase64 parts and calls Fabric's updateDefinition LRO (long-running operation). Expect 5–30s per item for the update to complete.
python -m core.cli push \
--project distributions/reference/projects/<project> \
--env dev \
--scope fabric_items \
--dry-run
python -m core.cli push \
--project distributions/reference/projects/<project> \
--env dev \
--scope fabric_items
Step 8 — Promote dev → cert → prod¶
The Fabric workspace IDs are env-specific. Overlays handle the rebind:
# overlays/cert.yaml
fabric:
workspace_id: <cert-workspace-uuid>
model_id: <cert-semantic-model-uuid>
power_bi:
report_suffix: "_CERT"
model_suffix: "_CERT"
The PBIR byConnection binding is auto-rewritten at push time using overlay.power_bi.model_id.
Common gotchas¶
404 Entity not foundon first Fabric pull: the silent failure mode. Fabric returns 404 when your identity has list-read but not definition-read. Verify (a) you have Member role on the workspace, (b)az account showlists the Fabric tenant, (c)AZURE_CONFIG_DIRis set correctly. Seecore/docs/fabric_404_vs_403.mdfor the full matrix.- PBIR-Legacy reports: workspaces bootstrapped pre-PBIR via Power BI Desktop "Publish" return reports in legacy format. The connector currently does not auto-convert. Workflow: open in Power BI Desktop, save-as
.pbip, commit tosrc/power_bi/. The/legacy-importCLI is on the F2 backlog. az.cmdnot found on Windows: the connector resolves the Azure CLI viashutil.which("az"). If your PATH doesn't include the Azure CLI install dir, add it explicitly.- Fabric
getDefinition?format=PBIRreturns 404 but the report exists in the UI: identity issue, not format issue. Switch to the correct Azure CLI profile. - Notebook converter rewrites
default.X→<catalog>.<schema>.X: the Databricks→Fabric converter rewritesIN default,dbutils.fs,notebook.exit,notebook.runautomatically. Tagged output:compat/light/heavy/impossible. The last two need your judgment.
What's next¶
- Configure additional scopes (DLT pipelines, jobs, dashboards).
- Set up a
certenvironment with separate Fabric workspace. - Explore the Fabric Lakehouse + Warehouse connectors under
core/connectors/. - Read
core/playbooks/pbir-gotchas.mdbefore authoring PBIR by hand.