The Landing Lakehouse: The Fabric Pattern Between Arrival and Use

A source begins mirroring into Microsoft Fabric on Friday. By Monday, the tables are visible in OneLake. Production engineers can build from them. Developers can query them. Testers can point validation jobs at them. Analysts can begin exploring.

The delivery looks successful because the data arrived quickly. The architecture may already be in trouble.

The first reachable version of data is rarely the version every user and environment should consume. Production needs fidelity and controlled change. Development needs realistic relationships without unnecessary exposure. Test needs stable inputs that do not shift underneath automated validation. The source team needs to retain authority over what lands and what may be published. Governance needs a defensible answer to a deceptively simple question: which version of this data is visible to whom?

A Landing Lakehouse provides that answer.

The pattern uses a dedicated Lakehouse as the controlled boundary between direct arrival and governed use. Mirrored data, external shortcuts, and source-owned Fabric data can land once. The Landing Lakehouse then exposes distinct schemas for production, anonymized development, representative subsets, Known Copies, and curated validation. Each output is a separate surface with its own purpose, access model, refresh behavior, and owner.

The point is not to add another layer for its own sake. The point is to keep the convenience of Fabric from collapsing several different contracts into one raw surface.

Continue reading “The Landing Lakehouse: The Fabric Pattern Between Arrival and Use”

Definitions Move. Data Stays: The Updated EduDataSci CI/CD Framework for Microsoft Fabric

A Fabric deployment can succeed while the target lakehouse is empty, the wrong Variable Library value set is active, a shortcut still points to Development, and the lakehouse depends on the identity of someone who has left the company.

The API did not lie. The architecture asked it the wrong question.

When I wrote about the ideal Fabric CI/CD approach, the division of labor was clear. Git controls change. Workspaces isolate execution. Deployment Pipelines promote approved content. External CI/CD adds tests and approvals. When native promotion cannot finish the job, fabric-cicd moves item definitions and an idempotent configuration notebook brings the lakehouse into the required state.

That architecture needs an update, not a replacement. Microsoft now frames Git integration, Deployment Pipelines, REST APIs, Variable Libraries, Fabric CLI, Terraform, and fabric-cicd as one Fabric CI/CD platform. Fabric can transport and bind more of the portable definition while exposing better APIs for target-local state.

In this framework, the code plane moves portable definitions and the data plane converges mutable target state. A release is complete only when both have happened—and the release can prove it.

The Original Framework Still Holds

Feature workspaces isolate development; pull requests provide review and change control. The persistent integration workspace is the Development member of the product’s Dev/Test/Prod workspace triple. That triple represents an independently releasable data product or security boundary—not one workspace per table. Deployment Pipelines remain the default when Fabric’s native controls suffice; GitHub Actions or Azure Pipelines can orchestrate enterprise gates.

The code-first path has changed most. In February, I called fabric-cicd an escape hatch. Microsoft now documents an end-to-end automation pattern in which Terraform provisions workspaces, Git wiring, roles, and connections while the Microsoft-maintained, open-source fabric-cicd library deploys the items. Separate bulk-export and bulk-importendpoints can reduce item-by-item calls, but both are beta, evaluation-only, and not recommended for production. Faster transport does not turn data into source code.

The Fabric-native route uses Git for development and Deployment Pipelines for promotion. The code-first route calls item-definition APIs or uses fabric-cicd; fab deploy is its CLI front end. Both arrive at the same target boundary. Code-first deployment is reconciliation, not a benign copy: orphan deletion, especially hard deletion, belongs in the release plan, approval, and evidence contract. Each target item should have one transport owner. Deployment Pipeline pairing is lineage-based, so precreating a same-named item can produce a duplicate.

A Deployable Item Is Not a Deployable System

The word deployment hides five different responsibilities.

ResponsibilityAuthoritative sourcePrimary mechanismWhat must be resolved or observed in the target
PlatformTerraform and protected platform configurationTerraform and Fabric REST APIsCapacity assignment, workspaces, domains, Git connections, network controls, connections, workspace identity, and RBAC
Portable definitionsApproved Git commit or release tagGit integration, Deployment Pipelines, fabric-cicd, or item-definition APIsThe target instance and its physical IDs
Environment configurationVariable Library plus protected CI/CD settingsExternal release workflow and Fabric APIsActive value set, credentials, unsupported bindings, associated identities, and permissions
Runtime data stateDesired-state manifest and approved migrationsIdempotent configuration notebook; DacFx or SqlPackage where supportedDelta schemas, tables, Spark views, materialized definitions, and controlled reference data
EvidenceRelease manifest and policy contractCI/CD logs, Fabric monitoring and audit, and Microsoft PurviewOperation IDs, callers, results, classifications, ownership, and lineage observations

Microsoft’s item-definition model gives the portable layer a stronger foundation. A logical ID identifies the same logical item across workspaces even when physical IDs differ. Individual APIs create, retrieve, and update supported items. Definitions are desired-state inputs, not complete descriptions of a running system.

The distinction is especially visible in a Lakehouse. Fabric now tracks Lakehouse metadata, internal and external shortcut definitions, and—in preview—OneLake data-access-role metadata through Git and Deployment Pipelines. It explicitly does not track Delta tables, Spark views, or files. Git and deployment operations preserve that data rather than overwriting it. The Lakehouse lifecycle documentation finally makes the boundary unambiguous.

Shortcut synchronization is authoritative: deployment creates, updates, and deletes shortcuts to match the definition. Internal targets can remap but are not created; external targets remain unchanged unless variables remap them. The notebook should validate this result, not recreate it. Notebook-to-Lakehouse auto-binding can replace a physical ID with a logical ID, although it is off by default and applies only to same-workspace relationships. The current dependency-binding matrix still shows important gaps: semantic-model SQL endpoints, some pipeline activities, cross-workspace references, Warehouse endpoints, and Variable Library item references can retain stage-specific identifiers.

The rule is no longer “put everything difficult in the notebook.” Maintain a versioned matrix by item type covering Git, Deployment Pipelines, definition APIs, fabric-cicd, dependency binding, service-principal support, and GA or preview status. Use the most declarative supported mechanism, then reconcile the remainder.

The Updated Architecture

The architecture below keeps the persistent Dev/Test/Prod product triple, but it separates delivery from convergence. The external release workflow—usually Azure Pipelines or GitHub Actions—holds the release identity, calls Fabric APIs, selects the target contract, and decides whether the release may continue. It orchestrates both planes; it is not another name for the notebook.

Definitions move through the code plane. The release workflow converges target-local state, then joins intent, execution, and governance evidence through one release ID.

The release identity is allowed to change the target. It is not automatically the identity the resulting workload should use to read or process data.

Most teams should start with the native hybrid: Git-connected development, a persistent integration workspace, Deployment Pipelines, a small external release workflow, and one deliberately boring idempotent configuration notebook. Terraform becomes valuable for a repeatable workspace factory or regional recovery. Use fabric-cicd when one approved release must deploy predictably across multiple workspaces, environments, or customers.

The Update Notebook Creates and Updates the Internal Structure

Promoting a Lakehouse moves the Lakehouse item, but it does not necessarily leave every schema, table, view, or materialized lake view inside that Lakehouse in the state required by the promoted release. The Update Notebook runs after promotion to close that gap. Its job is to create and update the internal elements of the promoted Lakehouse or Warehouse so that the target environment matches the structure defined for that version of the product.

The Update Notebook is not a general-purpose deployment controller. It should not create workspaces, assign capacity, select the active Variable Library value set, associate identities, remap shortcuts, or apply sensitivity labels. The release workflow completes those control-plane and environment-binding steps first, resolves the target item, and then invokes the notebook against that target.

Inside the data item, the notebook follows straightforward idempotent logic:

Current state in the targetUpdate Notebook action
The schema or object does not existCreate it from the versioned definition.
The object exists and already matches the required definitionLeave it unchanged.
The object exists but can be brought to the required state safelyUpdate, alter, or replace it using the operation appropriate to that object type.
The required change is destructive or requires data migrationStop and require an explicitly approved migration rather than silently forcing the change.

That is the practical meaning of idempotency in this framework: create if it does not exist; update if it exists; do nothing if it is already correct. CREATE TABLE IF NOT EXISTS by itself is not enough. It can create a missing table, but it cannot correct an existing table with the wrong columns, data types, properties, or constraints. The Update Notebook must inspect what is already present and use ALTER, CREATE OR REPLACE, a controlled migration, or another object-specific update operation to bring it to the required state.

For a Lakehouse, the Update Notebook can maintain schemas, Delta tables, table properties, Spark views, materialized lake views, and other internal objects that are not carried completely by promotion. For a Warehouse, it can maintain schemas, tables, views, procedures, and constraints through T-SQL when notebook-driven DDL is the selected structural owner. Where the DacFx-backed database-project path owns the Warehouse schema, the Update Notebook must not compete with it; it should validate that structure or manage only the objects explicitly assigned to the notebook.

Materialized Lake Views illustrate the pattern clearly. The MLV definition is versioned as code, but the MLV itself and its dependency graph exist inside the Lakehouse. After promotion, the Update Notebook creates the MLV when it is absent, updates or replaces it when its definition has changed, and leaves it alone when it already matches the promoted version. It then verifies the expected definition, dependencies, constraints, and refresh configuration. The materialized data did not move through Git; the notebook re-establishes the required internal object in the target environment.

The notebook must be safe to run more than once. A retry after a partial failure starts by reading the current catalog, not by assuming that nothing was created. Objects already in the correct state become no-ops; missing objects are created; safely outdated objects are updated. This allows each run to converge on the same required internal state without duplicating objects or replaying changes blindly.

For supported Spark and Jupyter jobs, the notebook-specific Job Scheduler API supports on-demand execution by a user, service principal, or managed identity; typed parameters; explicit Lakehouse and Environment selection; polling; cancellation; and a string exit value. That makes the Update Notebook a release gate rather than an informal post-deployment script. The release workflow can parse a JSON-serialized result such as:

{
"releaseId": "2026.08.14.3",
"manifestHash": "2d61...b7a9",
"objectsCreated": 1,
"objectsUpdated": 1,
"migrationsApplied": 0,
"unchanged": 17,
"blocked": 0,
"failed": 0,
"structurePostconditionsPassed": true
}

Fabric documents this exit-value pattern for conditional orchestration. The notebook serializes the result and passes the string to notebookutils.notebook.exit(...); the release workflow reads it from exitValue and deserializes it. The notebook should also append its object-level actions and validation results to a release-evidence table keyed by the same release ID. A second run against the same promoted version should report no unplanned structural changes.

One boundary still matters: notebookutils.variableLibrary does not support service principals, although Variable Library REST APIs do. An unattended workflow should activate and verify the target value set, resolve the required nonsecret values, and pass typed parameters to the Update Notebook. Secrets remain in Key Vault, managed Fabric connections, or the CI/CD secret store; workload identity federation can eliminate a stored workflow secret. Variable Libraries should carry nonsecret configuration and references, never secrets.

Identity Is Reconciled, Not Transported

Fabric now has several identities that sound similar and should not be allowed to collapse into one super-principal.

IdentityScopeJob in the release
Release identityCI/CD processProvisions or deploys definitions and calls control-plane APIs
Notebook run identityIndividual job executionPerforms the approved data-plane reconciliation and validation
Workspace identityWorkspaceAuthenticates supported connections and trusted workspace access
Associated or default identitySupported itemReplaces the item’s dependency on a human owner for supported behaviors

These are roles, not necessarily four principals. An API-started notebook runs under the caller. A pipeline notebook runs as the pipeline’s last modified user; a scheduled notebook runs as its creator or last updater. Workspace and associated identities do not become the notebook execution identity. Workspace identity is a Fabric-managed service principal for supported connections and trusted access; it receives no workspace role by default and does not run notebooks. It is stage-local, yet an artifact using it currently updates from Git only into a workspace connected to that same identity.

Associated identities are the easiest new control to overstate. The current Associate Identity API is beta; Microsoft describes it as evaluation and development only and does not recommend it for production. It covers Lakehouses and Eventstreams, except Eventstreams using Azure or Fabric Events as a source. The only documented assignment type is Caller, so the intended principal must make the request as itself. The API can finish immediately or asynchronously; in either case, the workflow must inspect every child-item result.

For now, associated identity belongs behind an explicit preview control, not in the mandatory production path. Treat association as identity selection, not external authorization: provision storage and connection access separately, test the owner-dependent behavior, and only then retire the former grants.

Identity is not the only target attribute the release must verify. Sensitivity labels remain outside item definitions. An unattended workflow can read the current label, but the admin bulk-set API requires a Fabric Administrator user and does not support service principals or managed identities. The workflow should verify the label and route remediation unless a separately authorized delegated-admin step is available.

The Release Loop Is Convergent, Not Linear

The practical release sequence is a loop because external systems time out, Fabric operations are asynchronous, and a retry can begin after some mutations have already succeeded.

A retry starts by observing the target. It does not assume the preceding attempt did nothing.

The release workflow must distinguish two asynchronous contracts. Item-management operations return a Location for a long-running operation. An on-demand notebook also returns a Location, but it identifies a job instance. Both can return 202; they are not polled through the same endpoint. Honor Retry-After, use bounded retries, and preserve the returned operation or job ID before recovery. The run request exposes no caller idempotency key, so do not resubmit after a polling timeout. Reuse the job ID or re-inspect the target, and hold a per-target release lock to prevent competing reconcilers.

At minimum, the release manifest must bind the approved commit and desired-state hash to the target environment, identities, change plan, validation result, and Fabric deployment and job identifiers.

Those records answer a different question from Microsoft Purview. Purview can scan a Fabric tenant for metadata and lineage, and it can describe ownership, classification, and governed relationships. It does not prove which release principal made a particular change or whether every postcondition passed. CI/CD history and Fabric audit or monitoring provide execution evidence. Purview describes the governed asset. Joining them is more useful than pretending either is complete on its own.

What This Looks Like in Card Processing

Consider a credit-card settlement data product with a Lakehouse, transaction-standardization notebook, settlement pipeline, merchant semantic model, and a Variable Library. The same logical definitions move from Development to Test to Production. Each stage has its own workspace, capacity assignment, connections, notebook execution identity, supported item-identity associations, and data.

Production cardholder data does not ride the deployment pipeline into Test. The active value set selects nonsecret stage references. The notebook execution identity receives only the permissions required to reconcile data; workspace and associated identities receive only their own required grants. The idempotent configuration notebook evolves the Delta schemas absent from the Lakehouse definition, applies controlled reference-data changes, validates settlement grain and key constraints, and returns its JSON-serialized result. Only then does the release enable the consumer surface.

An auditor can now trace the release without reconstructing it from portal screenshots and personal recollection. The organization can show the approved commit, the principal that performed the release, the principal that executed the notebook, the nonsecret target references selected, and—where enabled—the associated identity used for owner-dependent Lakehouse behaviors. It can also show the data structures changed, controls evaluated, and lineage and classification observed after deployment. No cardholder data had to be copied between stages to produce that evidence.

That is the practical difference between shipping files and releasing a regulated data product.

A Release Ends at Convergence

Fabric’s stronger deployment surface does not eliminate idempotent notebooks. It gives them a narrower and more important job.

Git should describe reviewed change. Deployment Pipelines or code-first tooling should move every definition they can. Variable Libraries should describe environment meaning without holding secrets. The external release workflow should reconcile identity and target configuration. The idempotent configuration notebook should converge mutable Lakehouse state, reject unsafe drift, and prove its postconditions. Fabric monitoring and CI/CD logs should record what happened; Purview should place the released asset in its governed context.

Definitions move. Data stays. The release is finished when the target has converged—and when the evidence is good enough that someone other than the person who ran it can prove why it should be trusted.

One Agent, Several Kinds of Truth

An enterprise agent rarely fails because it cannot produce a fluent paragraph. It fails because it cannot distinguish the current balance from the definition of balance, the approved policy from the email that discussed an exception, or the authority to explain a decision from the authority to change a system of record.

That distinction matters in financial services. A relationship manager asking why a commercial borrower has become riskier is really asking several questions at once. What changed in the borrower’s accounts? How does the exposure roll through facilities, collateral, guarantees, and legal entities? What does credit policy require? What did the deal team agree to last week? If action is warranted, who may open a review, request documents, or change a limit?

No single knowledge source can answer all of that honestly. The useful architecture is a Copilot Studio agent that coordinates several bounded kinds of intelligence: Fabric IQ for business state, Foundry IQ for institutional knowledge, Work IQ for the user’s working context, an ontology for shared meaning, and MCP tools for controlled action. API Center anchors design-time inventory and discovery, while Microsoft Purview anchors data governance and supported AI-interaction compliance. Runtime enforcement remains with Entra, Power Platform data policies, native IQ permissions, API Management, and the source systems.

Continue reading “One Agent, Several Kinds of Truth”

Choose the Publication Contract, Not the Fabric Icon

A bank’s credit-risk reporting team needs one change before the monthly committee pack. The underlying exposure data is current. The semantic model can reach it. The requested change—reclassifying a set of delinquency bands—is not particularly difficult.

Yet the team that owns the report cannot publish the change. The curated table is maintained by a Spark process owned elsewhere, so the request becomes a ticket, a handoff, and a negotiation over another team’s release calendar. Nothing in Microsoft Fabric is broken. The architecture treated the point where data was published as a storage destination when it was really a contract with an owner.

The reverse failure is just as common. A data-engineering team already publishes well-governed Delta tables for analytics, data science, and downstream domains, but an architectural standard requires every Gold table to be copied into a Warehouse before Power BI can use it. The second published copy adds another load, another security boundary, another incident path, and another opportunity for the two versions to disagree. It exists because a diagram said Gold should look like a database.

Fabric Warehouse and Lakehouse overlap too much for the old rule—structured data goes to a warehouse; everything else goes to a lakehouse—to make this decision well. Both use Delta in OneLake. Both can serve SQL queries. Both can support Power BI and governed analytical products. The consequential difference is the publication contract each item is being asked to own and the team expected to keep it.

Choose a Lakehouse publication contract when the authoritative product is maintained as Delta through engineering workflows and SQL consumers primarily need to read it. Choose a Warehouse publication contract when the owning team must create, populate, correct, secure, and release a relational product through T-SQL, especially when multi-table transactions or an independent SQL-owned release cadence matter. Use both when two real contracts exist—not because one Fabric icon feels unfinished without the other.

Continue reading “Choose the Publication Contract, Not the Fabric Icon”

The Workspace Is Not the Product: Fabric Objects as Code and the Rise of Lakehouse as Code

A Microsoft Fabric deployment can finish successfully and still leave you with an empty Lakehouse.

The notebook arrives. The pipeline arrives. The Lakehouse item appears in the target workspace. References are rebound to the correct environment. Every deployment task is green. Then the team opens the Lakehouse and discovers that the schemas, Delta tables, Spark views, and materialized lake views expected by the solution are not there.

That outcome is not a contradiction. It exposes an architectural boundary that Fabric teams need to make explicit: deploying a Fabric item is not the same as constructing the state inside that item.

The distinction matters in any enterprise. It matters more in financial services, where a deployment may support card authorization controls, wealth positions, settlement operations, lending decisions, or insurance exposure reporting. A release that creates the application shell without the required internal structures has not delivered a usable data product, however successful the pipeline log may look.

This article updates the idea of Fabric objects as code for the platform Microsoft is shipping in 2026. Fabric now has a much more coherent delivery stack: Terraform for stable platform resources, Git-backed item definitions, Variable Libraries for configuration, fabric-cicd and Fabric CLI for scripted deployment, and materialized lake views for declarative Lakehouse transformations. The result is not one universal deployment tool. It is a layered architecture in which each form of state is managed by the mechanism suited to it.

Continue reading “The Workspace Is Not the Product: Fabric Objects as Code and the Rise of Lakehouse as Code”

Stop Publishing the Workshop: An Ingest–Transform–Surface Architecture for Microsoft Fabric

Most Microsoft Fabric architecture diagrams are too polite.

They show data arriving, becoming cleaner, and eventually appearing in a report. What they usually leave out is the argument that determines whether the platform remains understandable after the third development team, the tenth source system, and the fiftieth downstream consumer: where does source reality end, where does product construction happen, and where does the enterprise make a promise?

When those boundaries are unclear, every table is treated as equally public. Analysts connect to whichever object is easiest to find, engineers preserve internal tables because somebody may be using them, and source-facing objects begin to look like product interfaces. The platform may still run, but the architecture has stopped communicating intent.

This article proposes a deliberately simple alternative for a schema-enabled Fabric Lakehouse:

  • Every ingestion method lands data in, or exposes it through, ingest.*.
  • Materialized Lake Views (MLVs) and notebooks move data into transform.*.
  • MLVs publish stable, consumption-ready tables into surface.*.
  • Consumers connect to the product through governed interfaces built on surface.*, not through the internal construction layers.

Here, ingest.* is shorthand for every table in the ingest schema. The same applies to transform.* and surface.*; the asterisk is architectural notation, not part of the schema name.

The result is not another three-color diagram. It is a practical way to separate source capture, internal implementation, and the published contract of a data product.

Continue reading “Stop Publishing the Workshop: An Ingest–Transform–Surface Architecture for Microsoft Fabric”

Stop Thinking in Rows: Databases Make More Sense as Sets

A database table looks like a spreadsheet. That resemblance is useful—and damaging. It makes tables approachable, but encourages a procedural picture: start at the top, inspect a row, make a decision, and move on. That is usually the wrong mental model.

Rows still matter. They have keys, carry facts, and occasionally ruin your afternoon. But the more useful unit of thought is the set: the population of tuples that should exist at a particular stage of processing.

With that shift, SQL operators construct populations. This post develops that mental model, then recasts the EduDataSci freeze-and-squash pattern for a Fabric MLV change feed as small set operations.

The tuple is the unit of assertion; the set is the unit of thought

Suppose a lender receives a monthly snapshot of every commercial loan. “One row per loan per month” states the grain of loan_snapshot, but not its meaning. A better description is:

loan_snapshot is the set of loan-state observations supplied by the servicing system, keyed by loan and snapshot date.

Each tuple asserts a loan’s balance, servicing status, risk grade, and other attributes at a time. “Find the delinquent loans” now defines a subset rather than a row-by-row flagging process. “Find loans missing from the new complete snapshot” defines the difference between two key sets. The database decides how to produce those populations; our first job is to define them correctly.

Continue reading “Stop Thinking in Rows: Databases Make More Sense as Sets”

The Pipeline You Don’t Have to Build

There is a peculiar habit in data engineering: we measure sophistication by the machinery we build. A source drops CSV files into storage, so we create a pipeline. The pipeline needs a schedule, parameters, schema handling, retries, logging, alerts, deployment rules, credentials, and somebody willing to answer for it at 2:00 a.m. None of that is especially difficult. That is precisely the problem. Enterprises spend an astonishing amount of engineering time repeatedly solving work that is too ordinary to deserve bespoke engineering.

Microsoft Fabric Shortcut Transformations attack that problem at the right level. They convert supported files referenced through a OneLake shortcut into a managed Delta table, keep the table synchronized with the source, and expose the result to SQL, Spark, Power BI, and other Fabric consumers. CSV, Parquet, and JSON transformations are generally available. Excel support is in preview. A separate public-preview capability applies built-in language processing to text files for summarization, translation, sentiment analysis, personally identifiable information detection, and named-entity recognition.

That feature list is useful. The architectural consequence is more important.

Shortcut Transformations move routine ingestion from something every project must build into something the platform simply does.

That is the difference between accelerating a pipeline and deleting the need for one.

Continue reading “The Pipeline You Don’t Have to Build”

Fabric Runtime 2.0 Changes the Fabric Engineering Baseline

A Fabric notebook can contain six lines of PySpark and still depend on an enormous amount of technology that is not visible in those six lines. The result depends on the version of Spark that planned the work, the Python or Scala runtime that interpreted the code, the Delta implementation that read and wrote the tables, the Java virtual machine underneath Spark, the operating system beneath that, and the Fabric services that connected the workload to OneLake and compute.

That hidden stack is easy to ignore while it remains stable. Fabric Runtime 2.0 is the moment when ignoring it becomes dangerous.

Runtime 2.0 is now the latest generally available Fabric Spark runtime. It moves the platform to Apache Spark 4.1, Delta Lake 4.2, Python 3.13, Java 21, Scala 2.13, R 4.5.2, and Azure Linux 3.0. Microsoft currently requires customers to opt into it, but plans to make it the default selection for new workspaces and Environment items in late September 2026.

Those facts make Runtime 2.0 sound like a substantial but conventional platform upgrade. It is more important than that. Runtime 2.0 brings together a new Spark generation, a newer Delta protocol, native execution, lower-latency streaming, modern language runtimes, stronger environment management, and a clearer lifecycle for Fabric applications.

The significance is not that every Fabric workload suddenly needs the newest feature. The significance is that the runtime has become part of the application’s architecture, operating model, performance model, and deployment contract.

Continue reading “Fabric Runtime 2.0 Changes the Fabric Engineering Baseline”

Fabric Can Finally Monitor Itself: Building a Real-Time Capacity Control Loop

Most Fabric capacity incidents are diagnosed in reverse.

A report slows down. A refresh misses its window. A user sees a capacity-limit error. Then someone opens the Capacity Metrics app and works backward through the evidence to find out what happened.

That is useful monitoring, but it is still an autopsy.

Capacity Overview Events change the sequence. Microsoft made them generally available in this month, giving Fabric a near-real-time stream of each capacity’s smoothed utilization and throttling posture. A Summary event represents a 30-second window for an active capacity, except that all-zero windows are suppressed. State events arrive when status changes. Those signals can flow through Real-Time hub and Eventstream, land in Eventhouse, appear on a Real-Time Dashboard, trigger Fabric Activator, and ultimately drive a guarded scaling action through Azure Resource Manager.

This is also a useful way to reintroduce Real-Time Intelligence. RTI is sometimes described as Fabric’s specialist workload for telemetry, clickstreams, and IoT. Capacity Overview Events show the larger idea. Fabric can use its own event-driven architecture to observe and operate Fabric.

The goal is not “add an alert when utilization reaches 80 percent.” It is an architecture that turns capacity management into a controlled feedback loop.

Continue reading “Fabric Can Finally Monitor Itself: Building a Real-Time Capacity Control Loop”