Microsoft docs tell you what.
fabdocs.dev tells you how.
Build, deploy, govern, and scale lakehouses, notebooks, and CI/CD pipelines in production — without torching your capacity budget.
- 30+
- production guides
- 6
- engineering domains
- CU
- impact stated on every page
# Idempotent by default — re-running is always safe
from delta.tables import DeltaTable
await (
DeltaTable.forName(spark, "silver.orders")
.alias("t")
.merge(incoming.alias("s"), "t.order_id = s.order_id")
.whenMatchedUpdateAll(condition="s.updated_at > t.updated_at")
.whenNotMatchedInsertAll()
.execute()
)
# CU impact: nightly OPTIMIZE pays for itself in a week
spark.sql("OPTIMIZE silver.orders")
Taming lakehouses, Spark jobs, and Delta table sprawl.
Designing OneLake topology, security, and CI/CD that scales.
Making Capacity Unit burn predictable and defensible.
What’s inside
Six areas, each with production-tested patterns and a stated CU impact — not a feature tour.
Delta optimization, V-Order tuning, VACUUM & retention, and multi-cloud shortcuts that stay consistent.
OpenProduction PySpark patterns, the Native Execution Engine, resource profiles, and surviving Runtime upgrades.
OpenWorkspace-as-code: Git integration, deployment pipelines, variable libraries, GitHub Actions for Fabric.
OpenOneLake security roles, workspace identity, and audit logging that passes a compliance review.
OpenAn interactive CU cost & capacity calculator, plus a VS Code sync guide to escape the web UI.
OpenStep-by-step conversions from Databricks, Snowflake, and SSIS — inventory, move a slice, validate, cut over.
OpenPatterns, not screenshots
Every notebook is a function: inputs from parameters, deterministic output, safe to re-run. Every page states what a technique costs in Capacity Units before it tells you how to do it.
- Idempotent MERGE and replaceWhere — never blind appends
- Native Execution Engine tuning to cut CU per run
- Deployment pipelines + variable libraries, no manual publish
# Match the profile to the workload shape —
# one setting flips ~20 Spark configs correctly
spark.conf.set(
"spark.fabric.resourceProfile",
"readHeavyForSpark",
)
if job.is_streaming_sink:
profile = "writeHeavy"
elif job.feeds_direct_lake:
profile = "readHeavyForPBI"
The Fabric change briefing
A tight technical digest of what changed in Microsoft Fabric — new runtimes, API updates, breaking changes — and what to do about it.
Fabric runtime changes, API updates, and deprecations. No spam, unsubscribe anytime.
Start with the slice that hurts most
Runaway CU bills, a lakehouse full of small files, or a deployment process that lives in someone’s head.