<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Analytics on Azure Blog articles</title>
    <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/bg-p/AnalyticsonAzure</link>
    <description>Analytics on Azure Blog articles</description>
    <pubDate>Sun, 07 Jun 2026 13:40:54 GMT</pubDate>
    <dc:creator>AnalyticsonAzure</dc:creator>
    <dc:date>2026-06-07T13:40:54Z</dc:date>
    <item>
      <title>Building AI apps and agents with Azure Databricks, Copilot Studio, and GitHub Copilot</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/building-ai-apps-and-agents-with-azure-databricks-copilot-studio/ba-p/4524065</link>
      <description>&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;A workspace-wide Genie MCP endpoint for Copilot Studio&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:320,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;Genie is Azure Databricks’ AI agent that lets any employee chat with their data and get trusted answers instantly. Genie Spaces are curated, business‑domain workspaces for teams to find strategic insights for their targeted use cases. Until now, connecting Azure Databricks Genie to Microsoft Copilot Studio meant adding each Genie Space as a separate tool. This works and adds value for customers wanting to integrate a specific Genie Space with Copilot Studio, but the per-space MCP server added overhead when trying to connect multiple Genie spaces to one Copilot Studio agent. The workspace-wide MCP endpoint changes that. One endpoint per workspace gives a Copilot Studio agent access to every connected Genie space and Unity Catalog dataset, and the curated context inside each Genie space stays in place.&lt;/P&gt;
&lt;P&gt;Key capabilities:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Natural-language access across the workspace. &lt;/STRONG&gt;Copilot Studio agents can route questions across every connected Genie Space and Unity Catalog dataset without losing the curation that keeps answers accurate.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Unity Catalog governance. &lt;/STRONG&gt;Access controls are enforced at query time, so existing data permissions extend to every agent built in Copilot Studio.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Beyond a single domain. &lt;/STRONG&gt;Move from a finance agent or a supply chain agent to a workspace-aware agent that follows users wherever the data lives.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Lakebase&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt; branching with GitHub Copilot agent mode&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:320,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Production AI agents fail on real-data edge cases that synthetic or mocked environments do not catch. But giving a developer direct production access to investigate is not a realistic option in most enterprises. Lakebase branching, now integrated with GitHub Copilot agent mode, gives you a way to debug against real data without ever connecting to the production database.&lt;/P&gt;
&lt;P&gt;Key capabilities:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Copy-on-write branching. &lt;/STRONG&gt;Create a full-fidelity branch of a Lakebase production database in seconds. No data is moved and no production records are altered.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Native GitHub Copilot agent debugging. &lt;/STRONG&gt;Point GitHub Copilot agent mode at the branch endpoint to reproduce, root-cause, and resolve data-dependent issues with AI assistance.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure-native end-to-end workflow. &lt;/STRONG&gt;The full loop runs across GitHub, Azure Databricks, and Lakebase. No third-party tools or custom infrastructure required.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Compliance built in. &lt;/STRONG&gt;Fixes ship through the standard Git-based deployment and compliance workflows already in place, so debug cycles compress from hours to minutes.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;STRONG&gt;What this unlocks for AI agent teams&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Together, the two capabilities cover both halves of the agent lifecycle on Azure:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Author Copilot Studio agents that reason over an entire Azure Databricks workspace through one MCP connection.&lt;/LI&gt;
&lt;LI&gt;Debug production AI agents against real Lakebase data using GitHub Copilot agent mode, reducing production data risk.&lt;/LI&gt;
&lt;LI&gt;Keep Unity Catalog governance and existing compliance controls in place from authoring through deployment.&lt;/LI&gt;
&lt;LI&gt;Standardize the data, agent, and developer toolchain on GitHub, Azure Databricks, and Microsoft 365.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;STRONG&gt;Get started&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Both features are available in public preview on June 2, 2026, directly in Azure Databricks workspaces.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/integrations/msft-power-platform-usage" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Azure Databricks and Power Platform integration to set up Genie workspace-wide MCP for Copilot Studio&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt; &lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/repos/get-access-tokens-from-git-provider#github" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Connect your GitHub to Azure Databricks to take advantage of Lakebase branching with GitHub Copilot agent mode&lt;/STRONG&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 16:15:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/building-ai-apps-and-agents-with-azure-databricks-copilot-studio/ba-p/4524065</guid>
      <dc:creator>Jason_Pereira</dc:creator>
      <dc:date>2026-06-02T16:15:00Z</dc:date>
    </item>
    <item>
      <title>Secure Medallion Architecture Pattern on Azure Databricks (Part II)</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/secure-medallion-architecture-pattern-on-azure-databricks-part/ba-p/4491044</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Disclaimer&lt;/STRONG&gt;: The views in this article are my own and do not represent Microsoft or Databricks.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;This article is part of a series focused on deploying a secure Medallion Architecture. The series follows a top-down approach ,  beginning with a high-level architectural perspective and gradually drilling down into implementation details using repeatable, code.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;In this part we will discuss the implementation of the pattern using GitHub Copilot&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;If you have missed, please read first the first part of this blog series. It can be found at: &lt;A href="https://techcommunity.microsoft.com/blog/analyticsonazure/secure-medallion-architecture-pattern-on-azure-databricks-part-i/4459268" target="_blank" rel="noopener"&gt;Secure Medallion Architecture Pattern on Azure Databricks (Part I).&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I waited a while before publishing this article. Partly due to other priorities, but also because I wanted to experiment with deploying infrastructure and data pipelines using agents. At that point, I was looking to leverage agents with a spec-driven approach, and through using GitHub Copilot, I learned what skills are and how I can use them to achieve my scope.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;In this blog I'll share what I learned using GitHub Copilot for spec-driven development.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;I'll use the content from my previous article,&amp;nbsp;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://techcommunity.microsoft.com/blog/analyticsonazure/secure-medallion-architecture-pattern-on-azure-databricks-part-i/4459268" target="_blank" rel="noopener"&gt;Secure Medallion Architecture Pattern on Azure Databricks (Part I)&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;&amp;nbsp;&lt;/SPAN&gt;, as a technical specification to extract implementation details and generate two outputs:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Terraform code for infrastructure, platform configuration, and deployment&lt;/LI&gt;
&lt;LI&gt;Databricks Declarative Automation Bundles for jobs, pipelines, and other deployment-ready workload resources&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;I've tried not to overfit the prompts within the skills I've developed, so they remain portable to other technical articles, not just the one mentioned in this blog.&lt;/P&gt;
&lt;H3&gt;Separate the platform from the workload&lt;/H3&gt;
&lt;P&gt;When I started the design, I decided to modularise the automation scripts by separating the platform from the actual data platform workloads. I assigned networking, storage, identities, secret scopes, and workspace configuration to Terraform, while Databricks notebook runs, job clusters, pipelines, and environment-specific deployments were developed within Databricks Declarative Automation Bundles (formerly known as Databricks Asset Bundles).&lt;/P&gt;
&lt;P&gt;That may sound obvious, but it's exactly where generated code often goes wrong. Without explicit instructions, AI tools tend to blur these boundaries and produce one oversized block of configuration. That's why my Copilot skill needs to enforce a clear contract by:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Infer the architecture from the article&lt;/LI&gt;
&lt;LI&gt;Identify what is explicit and what is assumed&lt;/LI&gt;
&lt;LI&gt;Emit Terraform only for infrastructure concerns&lt;/LI&gt;
&lt;LI&gt;Emit bundle files only for workload concerns&lt;/LI&gt;
&lt;LI&gt;Leave placeholders for anything the article does not specify&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;That last point is critical. A blog post or low-level technical specification is not a source of truth for account IDs, hostnames, catalog names, secret values, or subnet IDs. Good automation should never fabricate those values. Instead, I decided to produce a starter implementation with TODO markers wherever environment-specific values are required.&lt;/P&gt;
&lt;P&gt;Skills are a great way to get more consistent, repeatable output across runs, so I decided to use them for this project. I could have used one of the tools listed in the table below, but I chose to go my own way, into developing a&amp;nbsp;Spec-Driven Development (SDD) framework which I hope it will carryon improve with time.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr class="lia-background-color-custom-808080"&gt;&lt;th&gt;&lt;SPAN class="lia-text-color-22"&gt;Tool&lt;/SPAN&gt;&lt;/th&gt;&lt;th&gt;&lt;SPAN class="lia-text-color-22"&gt;Creator&lt;/SPAN&gt;&lt;/th&gt;&lt;th&gt;&lt;SPAN class="lia-text-color-22"&gt;Type&lt;/SPAN&gt;&lt;/th&gt;&lt;th&gt;&lt;SPAN class="lia-text-color-22"&gt;Link&lt;/SPAN&gt;&lt;/th&gt;&lt;th&gt;&lt;SPAN class="lia-text-color-22"&gt;Description&lt;/SPAN&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;GitHub Spec Kit&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;GitHub&lt;/td&gt;&lt;td&gt;Open source&lt;/td&gt;&lt;td&gt;&lt;A href="https://github.com/github/spec-kit" target="_blank" rel="noopener"&gt;github/spec-kit&lt;/A&gt;&lt;/td&gt;&lt;td&gt;Turns feature ideas into specs, plans, and task lists before any code is written. Works with multiple AI coding agents. Specification first, code as generated output.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;BMAD Method&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;BMad Code LLC&lt;/td&gt;&lt;td&gt;Open source&lt;/td&gt;&lt;td&gt;&lt;A href="https://github.com/bmad-code-org/BMAD-METHOD" target="_blank" rel="noopener"&gt;bmad-code-org/BMAD-METHOD&lt;/A&gt;&lt;/td&gt;&lt;td&gt;An AI-driven agile framework with specialised agents covering the full lifecycle from ideation to deployment. Scale-adaptive — adjusts planning depth from a bug fix to an enterprise system.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;OpenSpec&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Fission AI&lt;/td&gt;&lt;td&gt;Open source&lt;/td&gt;&lt;td&gt;&lt;A href="https://github.com/Fission-AI/OpenSpec" target="_blank" rel="noopener"&gt;Fission-AI/OpenSpec&lt;/A&gt;&lt;/td&gt;&lt;td&gt;Lightweight spec layer that sits above your existing AI tools. Each change gets a proposal, specs, design, and task list. No rigid phase gates, no IDE lock-in.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 14.4534%" /&gt;&lt;col style="width: 16.8623%" /&gt;&lt;col style="width: 13.5269%" /&gt;&lt;col style="width: 23.9106%" /&gt;&lt;col style="width: 31.216%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3 data-start="907" data-end="1221"&gt;What are skills, and why are they a good fit?&lt;/H3&gt;
&lt;P&gt;Skills are essentially reusable prompt modules that aim to force LLMs to produce repeatable answers. Within a skill, I define the behavior and then attach supporting resources or scripts so Copilot can perform the task consistently. That means a skill can do more than just "write some code."&lt;/P&gt;
&lt;P&gt;A skill can define a repeatable workflow like this:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Fetch the blog URL&lt;/LI&gt;
&lt;LI&gt;Extract headings, paragraphs, and code snippets&lt;/LI&gt;
&lt;LI&gt;Normalize the article into a lightweight implementation spec&lt;/LI&gt;
&lt;LI&gt;Decide what belongs in Terraform&lt;/LI&gt;
&lt;LI&gt;Decide what belongs in the Databricks bundle&lt;/LI&gt;
&lt;LI&gt;Generate files in a predictable project structure&lt;/LI&gt;
&lt;LI&gt;Produce a &lt;CODE&gt;TODO.md&lt;/CODE&gt; file for unresolved values&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This approach turns Copilot from a generic assistant into a specialized code-conversion tool.&lt;/P&gt;
&lt;P&gt;However, there are some constraints I had to be mindful of when developing skills:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;U&gt;&lt;EM&gt;Context window limits.&lt;/EM&gt;&lt;/U&gt; The model has limited space to read instructions, process input, and generate output. Long prompts can cause files to be cut off or steps to be skipped.&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;&lt;EM&gt;Non-determinism.&lt;/EM&gt;&lt;/U&gt; Output may vary between runs, even with strict instructions. I always lint, validate, and review the diff before committing.&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;&lt;EM&gt;Boundary leakage.&lt;/EM&gt;&lt;/U&gt; Models may invent plausible but incorrect values. The &lt;CODE&gt;TODO.md&lt;/CODE&gt; pattern must be enforced as a rule, not a suggestion.&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;&lt;EM&gt;Model and tool drift.&lt;/EM&gt;&lt;/U&gt; Copilot's model and tool surface change over time. I use example inputs and outputs as repeatable sanity checks.&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;&lt;EM&gt;Maintainability.&lt;/EM&gt;&lt;/U&gt; A skill is code-as-prompt and will age with the platforms it targets. I keep skills narrowly scoped so they stay easy to update.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;I'll explain the &lt;CODE&gt;TODO.md&lt;/CODE&gt; file in more detail later in this post.&lt;/P&gt;
&lt;H3 data-start="907" data-end="1221"&gt;The GitHub repo&lt;/H3&gt;
&lt;P&gt;The repository can be found at the link &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode" target="_blank" rel="noopener"&gt;MarcoScagliola/CopilotBlogToCode&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Below you will find a function I have added that, when invoked, deletes all the files produced by the skills, so you can test the repo from a clean state.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;python .github/skills/blog-to-databricks-iac/scripts/reset_generated.py --force;&lt;/LI-CODE&gt;
&lt;P&gt;If you want to tried it out, please clone and try it on your copy. In GitHub Copilot, I usually keep:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Model as Auto&lt;/LI&gt;
&lt;LI&gt;Foer the configure tools I keep just the built-in tools selected.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Below you can find the prompt that I use to run the skills and have the blog analysed.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Use the blog-to-databricks-iac skill on this article:&lt;BR /&gt;&lt;A href="vscode-file://vscode-app/c:/Users/mscagliola/AppData/Local/Programs/Microsoft%20VS%20Code/8b640eef5a/resources/app/out/vs/code/electron-browser/workbench/workbench.html" target="_blank" rel="noopener" data-href="https://techcommunity.microsoft.com/blog/analyticsonazure/secure-medallion-architecture-pattern-on-azure-databricks-part-i/4459268"&gt;https://techcommunity.microsoft.com/blog/analyticsonazure/secure-medallion-architecture-pattern-on-azure-databricks-part-i/4459268&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Inputs:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;workload: blg&lt;/LI&gt;
&lt;LI&gt;environment: dev&lt;/LI&gt;
&lt;LI&gt;azure_region: uksouth&lt;/LI&gt;
&lt;LI&gt;github_environment: &amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;To make this more repeatable and less manual, I've added a prompt file at &lt;A href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/main/.github/prompts/run-blogToDatabricksIac-selected-tools.prompt.md" target="_blank" rel="noopener"&gt;run-blogToDatabricksIac-selected-tools.prompt.md&lt;/A&gt;, which can be run directly from VS Code by opening the file and clicking the run button at the top. Feel free to experiment with it and let me know what you think.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Further instructions on how to use the repo are available &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/main/READ_FIRST.md" target="_blank" rel="noopener"&gt;READ_FIRST.md&lt;/A&gt;.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P data-section-id="z0c6m6" data-start="78" data-end="118"&gt;Following you will find the exact repository setup I used for this workflow, starting with my initial configuration and ending with the final directory structure and files.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H5 data-section-id="19zhbxj" data-start="182" data-end="219"&gt;&lt;STRONG&gt;1. Create a new GitHub repository and clone it locally&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P data-start="221" data-end="364"&gt;I started by creating a new repository on GitHub, then cloned it to my local machine so I could add the Copilot skill, Terraform scaffolding, and Databricks bundle files in a centralized location.&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;git clone https://github.com/YOUR-ORG/blog-to-databricks-iac.git cd blog-to-databricks-iac&lt;/LI-CODE&gt;
&lt;P&gt;This approach keeps the workflow organised from the start: the repository exists on GitHub first, and the local clone becomes the working directory for all subsequent setup steps.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;2. Create the GitHub skill folder structure (first iteration)&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;GitHub Copilot skills are file-based and centered on a &lt;CODE&gt;SKILL.md&lt;/CODE&gt; file inside a skill folder. GitHub's current pattern places these under &lt;CODE&gt;.github/skills/&lt;/CODE&gt;.&lt;/P&gt;
&lt;P&gt;I used the script below to create the folder hierarchy for my initial integration.&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;mkdir -p .github/skills/blog-to-databricks-iac/scripts mkdir -p .github/skills/blog-to-databricks-iac/templates mkdir -p infra/terraform mkdir -p databricks-bundle/resources mkdir -p databricks-bundle/src&lt;/LI-CODE&gt;
&lt;P&gt;This script generates the structure depicted below.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&amp;nbsp;&lt;/H5&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&amp;nbsp;&lt;/H5&gt;
&lt;H5&gt;&lt;STRONG&gt;3. Add the main skill definition&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Next, I created the &lt;CODE&gt;SKILL.md&lt;/CODE&gt; file at &lt;CODE&gt;.github/skills/blog-to-databricks-iac/&lt;/CODE&gt;. The orchestrator decides what happens and in what order, while each specialist decides what its own file should contain (as an example the Terraform specialist owns the Terraform, the bundle specialist owns the bundle, and so on).&lt;/P&gt;
&lt;P&gt;In practice, &lt;CODE&gt;SKILL.md&lt;/CODE&gt; turns Copilot from a general assistant into a domain-specific generator for this repo. GitHub documents this SKILL.md-based structure as the foundation of agent skills. My first iteration of &lt;CODE&gt;.github/skills/blog-to-databricks-iac/SKILL.md&amp;gt;&lt;/CODE&gt; was very simple and can be found&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/17ab44316a0a3a784dc4c1a397fec2ce5d076d9a/.github/skills/blog-to-databricks-iac/SKILL.md" target="_blank" rel="noopener"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;4. Add a script to fetch and normalize the blog article&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Next, I created a Python script that the main orchestrator &lt;CODE&gt;SKILL.md&lt;/CODE&gt; invokes to read the blog article. This script is stored at &lt;CODE&gt;.github/skills/blog-to-databricks-iac/scripts/&lt;/CODE&gt; and named &lt;CODE&gt;fetch_blog.py&lt;/CODE&gt;. Within &lt;CODE&gt;SKILL.md&lt;/CODE&gt;, the script is invoked as shown below.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;LI-CODE lang="typescript"&gt;### 1. Fetch article ```bash python .github/skills/blog-to-databricks-iac/scripts/fetch_blog.py "&amp;lt;url&amp;gt;" ``` If fetch fails, stop and return the fetch error output. Do not retry; surface the error to the user and wait for guidance.&amp;lt;/url&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The script validates the URL, fetches the HTML with a 30-second timeout, and uses a spoofed Mozilla User-Agent to avoid being blocked by CDNs (Content Delivery Networks). It reads through the HTML one tag at a time, flagging when it enters relevant sections like paragraphs, headings, or code blocks, and buffering text until the tag closes. Before storing anything, it cleans the text by decoding HTML objects, collapsing whitespace, and trimming edges.&lt;/P&gt;
&lt;P&gt;As it parses, the script also scans for cloud platform keywords: AWS, S3, Azure, ADLS, GCP, Google Cloud. The first match wins; if none are found, it returns unknown. This is a quick heuristic, not authoritative.&lt;/P&gt;
&lt;P&gt;Finally, it outputs clean JSON with the extracted data: title, headings, paragraphs, code blocks, and cloud hint, capped at reasonable sizes to keep the output manageable. If anything goes wrong, such as a network error, timeout, bad HTML, or empty content, the script exits cleanly with a structured error message, making it easy to integrate into larger workflows without surprises.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The Python scrip can be found &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/17ab44316a0a3a784dc4c1a397fec2ce5d076d9a/.github/skills/blog-to-databricks-iac/scripts/fetch_blog.py" target="_blank" rel="noopener"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;5. The output and output contract&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Now I needed to think about the output I wanted GitHub Copilot to deliver through the skills. To reiterate, I needed the following:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="width: 100%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 12.9013%" /&gt;&lt;col style="width: 87.0679%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr class="lia-background-color-custom-808080"&gt;&lt;td&gt;&lt;SPAN class="lia-text-color-22"&gt;&lt;STRONG&gt;File Name&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;&lt;SPAN class="lia-text-color-22"&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;EM&gt;README.md&lt;/EM&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;This is the operator-facing runbook that turns the generated artifacts into a working deployment. It contains no unresolved placeholders and no embedded credentials.&amp;nbsp;The header summarizes the architecture and links back to the source blog. A prerequisites section lists required Azure access, Entra permissions, GitHub Environment setup, and local CLI versions. It includes tables of always-required GitHub secrets and variables, plus conditional ones based on deployment mode. Step-by-step numbered sections walk through bootstrapping the deployment principal and populating the GitHub Environment. Workflow blocks describe each Terraform validation, infrastructure deployment, and DAB deployment step, including file paths, triggers, and outputs. A commands section lists the exact Terraform and Databricks bundle sequences to run. Finally, assumption notes point the operator to&amp;nbsp;&lt;CODE&gt;TODO.md&lt;/CODE&gt; and &lt;CODE&gt;SPEC.md&lt;/CODE&gt; for context.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;EM&gt;TODO.md&lt;/EM&gt;&lt;/td&gt;&lt;td&gt;The operator's checklist of remaining tasks. It uses a strict five-section format (Heading, What this is, Why deferred, Source, Resolution, Done looks like) with no commands or code, only concepts and decisions. Each section captures a different layer of post-deployment work, pre-deployment tasks like RBAC roles and GitHub secrets, deployment-time inputs like region and environment, post-infrastructure setup like Key Vault secrets and external locations, post-DAB work like Unity Catalog grants and job schedules, and architectural choices the orchestrator couldn't make (network posture, schemas, partitioning). Every entry comes from something the article left unstated, plus the universal post-deploy work for any Databricks deployment. The operator works through &lt;CODE&gt;TODO.md&lt;/CODE&gt; sequentially, resolving each item before the system is production-ready.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;EM&gt;SPEC.md&lt;/EM&gt;&lt;/td&gt;&lt;td&gt;
&lt;P&gt;The structured, source-faithful read of the blog article, organized by checklist. Every item is marked as a stated value, inferred from code or diagrams, or "not stated in article." It includes architecture details, Azure services configuration, Databricks setup, data model, security and identity requirements, and observations. &lt;CODE&gt;SPEC.md&lt;/CODE&gt; is the single source of truth that Terraform and DAB generators read from, &lt;CODE&gt;TODO.md&lt;/CODE&gt; is populated from every "not stated" entry, and &lt;CODE&gt;README.md&lt;/CODE&gt; references it for assumptions. This ensures the deployment is built on documented decisions, not hidden assumptions.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Together, these files create a clear boundary:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;CODE&gt;SPEC.md&lt;/CODE&gt; answers what the blog says,&lt;/LI&gt;
&lt;LI&gt;&lt;CODE&gt;TODO.md&lt;/CODE&gt; captures what's missing or must be decided,&lt;/LI&gt;
&lt;LI&gt;&lt;CODE&gt;README.md&lt;/CODE&gt; tells you exactly how to deploy.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This split is enforced by validation rules that fail if any content duplicates across the three files.&lt;/P&gt;
&lt;P&gt;To make these files as repeatable as possible, I needed two things:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Two templates, one for &lt;CODE&gt;README.md&lt;/CODE&gt; and one for &lt;CODE&gt;TODO.md&lt;/CODE&gt;, that the orchestrator fills in from &lt;CODE&gt;SPEC.md&lt;/CODE&gt; at generation time.&lt;/LI&gt;
&lt;LI&gt;A broader delivery &lt;CODE&gt;contract, output-contract.md&lt;/CODE&gt;, which lists the five files the orchestrator must produce. &lt;CODE&gt;README.md&lt;/CODE&gt; and &lt;CODE&gt;TODO.md&lt;/CODE&gt; are two of those five, and the templates are how they get produced.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The &lt;CODE&gt;output-contract.md&lt;/CODE&gt; file defines a strict, ordered format that the agent must follow when transforming a blog article about Databricks-on-Azure architecture into a runnable repository.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The first commit was deliberately minimal, as you can see from the file available&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/t5/link" target="_blank" rel="noopener"&gt;here&lt;/A&gt;. No leaf-skill routing, no repo-context.md, no GitHub Actions workflows, no validation rules, no entry-field templates for &lt;CODE&gt;TODO.md&lt;/CODE&gt;. That commit's single job was to lock down the shape of the output: what gets produced and in what order. Every commit since has refined how to produce that shape without changing what gets produced.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Putting the contract in the very first commit gave every later change a fixed reference point. Every leaf skill, generator script, and validation rule I've added since has fit into one of its five sections. The pipeline has changed; the deliverables haven't.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The structure of the GitHub repo at commit &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/tree/17ab44316a0a3a784dc4c1a397fec2ce5d076d9a" target="_blank" rel="noopener"&gt;17ab443 &lt;/A&gt;can be see in the pictorial below.&lt;/P&gt;
&lt;img /&gt;
&lt;H5&gt;&lt;STRONG&gt;6. The&amp;nbsp;&lt;CODE&gt;README.md&lt;/CODE&gt; and &lt;CODE&gt;TODO.md&lt;/CODE&gt; templates&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;After iteratively working on the orchestrator, a clear pattern emerged, the code-generation paths were kind of stable, but the documentation outputs weren't. Every run produced&amp;nbsp;&lt;CODE&gt;README.md&lt;/CODE&gt; and &lt;CODE&gt;TODO.md&lt;/CODE&gt; from scratch in free-form Markdown. Across runs, the same content kept drifting.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Section ordering changed between runs and the explanation of GitHub Environments was rewritten with subtle wording differences. RBAC roles appeared sometimes as lists, sometimes in prose, sometimes split across sections. Universal post-deploy actions (create the secret scope, populate the vault, set up Unity Catalog grants) were re-derived every time, occasionally with steps missing. The root cause was that the orchestrator was treating durable, universal content as if it were per-run content.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;So I've decided to add two templates:&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/8b8418463e0f40fc06465b0c6c6d77abfec9645c/.github/skills/blog-to-databricks-iac/templates/README.md.template" target="_blank" rel="noopener"&gt;README.md.template&lt;/A&gt; and &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/8b8418463e0f40fc06465b0c6c6d77abfec9645c/.github/skills/blog-to-databricks-iac/templates/TODO.md.template" target="_blank" rel="noopener"&gt;TODO.md.template&lt;/A&gt;. Templates separate universal content (RBAC, TODO sections, GitHub setup) in the template from per-workload content (catalog names, credentials) substituted from SPEC.md. This delivers consistency across runs. The &lt;CODE&gt;README&lt;/CODE&gt; and &lt;CODE&gt;TODO&lt;/CODE&gt; are structurally identical, so readers can navigate them intuitively. Universal content is correct by construction; I write it once, review carefully, and every run inherits that quality.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Validation also becomes more precise, and the agent's job shrinks from open-ended writing to mechanical substitution, which is easier to validate and maintain. Templates introduce clear vocabulary: &lt;CODE&gt;{placeholder}&lt;/CODE&gt; is filled by the orchestrator at generation time, by the deployer at run time. Finally, templates enforce traceability: every "not stated in article" entry in &lt;CODE&gt;SPEC.md&lt;/CODE&gt; automatically becomes a &lt;CODE&gt;TODO&lt;/CODE&gt; entry via the from &lt;CODE&gt;SPEC.md&lt;/CODE&gt; slot, making this an automatically-enforced rule.&lt;/P&gt;
&lt;P&gt;I'm invoking the templates in the orchestrator as shown below. The Git commit with this code can be found at this&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/commit/8b8418463e0f40fc06465b0c6c6d77abfec9645c" target="_blank" rel="noopener"&gt;link&lt;/A&gt;.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;LI-CODE lang="typescript"&gt;### 3.1 Generate README from template Load the template: `.github/skills/blog-to-databricks-iac/templates/README.md.template` ### 3.2 Generate TODO from template Load the template: `.github/skills/blog-to-databricks-iac/templates/TODO.md.template`&lt;/LI-CODE&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;7. The output of the &lt;CODE&gt;fetch_blog.py&lt;/CODE&gt; file and the interaction with the orchestrator&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;When the orchestrator invokes&amp;nbsp;&lt;CODE&gt;fetch_blog.py&lt;/CODE&gt;, the script produces a JSON output and passes it back to the orchestrator. The orchestrator then reads the JSON document into its working context and maps each field onto an analysis checklist. The title and meta description establish the article identity and scope. Headings with their levels reveal the structure, helping the agent locate sections about architecture, security, data flow, and naming. Paragraphs provide evidence for stated values like regions, resource types, and RBAC models. Code blocks become the source of inferred values. As an example, a Terraform snippet might reveal SKU choices or naming patterns not mentioned in the text.&lt;/P&gt;
&lt;P&gt;These inferred values get tagged "inferred from code snippet" when recorded. The cloud hint acts as a sanity check that the article actually describes an Azure architecture.&lt;/P&gt;
&lt;P&gt;For every checklist item, the agent records either an extracted value or the literal string "not stated in article". This becomes &lt;CODE&gt;SPEC.md&lt;/CODE&gt;, the single source of truth for everything downstream. &lt;CODE&gt;SPEC.md&lt;/CODE&gt; drives every subsequent step. Steps 3 through 7 (the Terraform module, workflows, and Databricks bundle generators) read architectural decisions from it. Step 8 then produces &lt;CODE&gt;TODO.md&lt;/CODE&gt; by converting every "not stated in article" entry into a &lt;CODE&gt;TODO&lt;/CODE&gt; item the operator must resolve before deployment.&lt;/P&gt;
&lt;P&gt;What I find worth pointing out is how little the output contract has actually moved since that very first commit. The implementation underneath has changed completely. Leaf skills emerged, generator scripts came in, validation rules got added, a soft-delete state machine showed up to handle Key Vault recovery. None of those existed at the start. But what the orchestrator delivers, the list of files it puts on disk, has stayed exactly the same.&lt;/P&gt;
&lt;P&gt;We have a much larger&amp;nbsp;&lt;CODE&gt;SKILL.md&lt;/CODE&gt; today that still mirrors the initial five-item output list. The contract itself has changed by exactly one line: the addition of "Design of the architecture" to section 5.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;CODE&gt;SPEC.md&lt;/CODE&gt;: the structured, source-faithful read of the article, organised by the analysis checklist ( &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/main/SPEC.md" target="_blank" rel="noopener"&gt;link &lt;/A&gt;)&lt;/LI&gt;
&lt;LI&gt;&lt;CODE&gt;TODO.md&lt;/CODE&gt;: the operator's checklist of everything the article didn't specify, plus the universal post-deploy actions ( &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/main/TODO.md" target="_blank" rel="noopener"&gt;link&lt;/A&gt; )&lt;/LI&gt;
&lt;LI&gt;Terraform code under &lt;CODE&gt;infra/terraform/&lt;/CODE&gt;: the platform layer with networking, storage, identities, Key Vault, workspace ( &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/tree/main/infra/terraform" target="_blank" rel="noopener"&gt;link&lt;/A&gt; )&lt;/LI&gt;
&lt;LI&gt;Databricks Asset Bundle under &lt;CODE&gt;databricks-bundle/&lt;/CODE&gt;: the workload layer with jobs, entry points, environment configuration ( &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/tree/main/databricks-bundle" target="_blank" rel="noopener"&gt;link&lt;/A&gt; )&lt;/LI&gt;
&lt;LI&gt;&lt;CODE&gt;README.md&lt;/CODE&gt;: the operator runbook, with the architecture design diagram embedded ( &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/blob/main/README.md" target="_blank" rel="noopener"&gt;link&lt;/A&gt; )&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If the JSON contains an error, the orchestrator stops immediately. Per the skill rule &lt;EM&gt;"If fetch fails, stop and return the fetch error output. Do not retry,"&lt;/EM&gt; the error surfaces to the user rather than propagating downstream.&lt;/P&gt;
&lt;P&gt;So the script's output is the raw evidence pack: title, structure, prose, code, cloud hint. The agent uses it to fill the architecture spec, which parameterises every generated artifact.&lt;/P&gt;
&lt;P&gt;At this point the &lt;CODE&gt;fetch_blog.py&lt;/CODE&gt; output is sent to Step 2 of the orchestrator, as shown in the code snippet below.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;LI-CODE lang="typescript"&gt;### 2. Analyse article Analyse the fetched article against the structured checklist in `.github/skills/blog-to-databricks-iac/references/blog-analysis-checklist.md`. The analysis covers the article text, diagrams, screenshots, and code snippets.&lt;/LI-CODE&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;And, much later in the orchestrator, Step 8 closes the loop by turning everything that's been recorded into the two operator-facing documents:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;LI-CODE lang="typescript"&gt;### 8. Generate README and TODO from templates Use the templates in `.github/skills/blog-to-databricks-iac/templates/`: - `README.md.template` -&amp;gt; `README.md` - `TODO.md.template` -&amp;gt; `TODO.md`&lt;/LI-CODE&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;8. How this actually came together&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;What I've described so far is how the orchestrator works currently. The reality of building it was much cumbersome , but also fun.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I got from the first version to the current one by iterating. Rerun the orchestrator, find the defect, identify the rule that would have caught it, add the rule to the skill that owns the artifact, rerun.&lt;/P&gt;
&lt;P&gt;The reason I'm calling this out now, before walking through the rest of the pipeline, is that everything from this point on is a story about a specific lesson learned that way. The leaf skills exist because a single &lt;CODE&gt;SKILL.md&lt;/CODE&gt; got too dense. The restricted-tenant guardrails exist because the deployment failed against a tenant that couldn't read Microsoft Graph. The validation harness exists because prose rules weren't catching the regressions that mattered. The soft-delete state machine exists because the same vault name kept colliding with a previous deploy. None of these rules were present from day-one.&lt;/P&gt;
&lt;P&gt;So in the next sections I'll walk through how the pipeline actually matured: how the single skill split into a graph, what the inner regenerate-fix loop felt like in practice, the day the project pivoted to support restricted tenants, the bugs that became rules, and the Key Vault soft-delete state machine that closed the project out.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;9. From a single skill to a skill graph&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;When I started, everything lived inside a single &lt;CODE&gt;SKILL.md&lt;/CODE&gt;. It was simpler that way, and to be honest, at that point I didn't yet know which rules would actually matter. But as I kept rerunning the orchestrator on the article, a pattern emerged. Each rerun produced something that broke in a slightly different way, and the fix always belonged to a very specific concern: Terraform authoring, bundle structure, workflow generation, or the orchestration logic itself. Stuffing the rules for all of them into one file was making the orchestrator unreadable and, worse, was silently dropping rules when the context window got tight.&lt;/P&gt;
&lt;P&gt;So I split it. The orchestrator stayed at the top, kept routing the work and validating the result, and each concern got promoted to its own leaf skill. The Databricks bundle skill itself ended up needing one more split a few days later, it had got too dense, so I broke it into two leaves:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;databricks-yml-authoring ( &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/tree/main/.github/skills/databricks-asset-bundle/databricks-yml-authoring" target="_blank" rel="noopener"&gt;link&lt;/A&gt; )&lt;/LI&gt;
&lt;LI&gt;Python-entrypoints ( &lt;A class="lia-external-url" href="https://github.com/MarcoScagliola/CopilotBlogToCode/tree/main/.github/skills/databricks-asset-bundle/python-entrypoints" target="_blank" rel="noopener"&gt;link&lt;/A&gt; )&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The diagram below shows the shape the repo has today.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The orchestrator now does almost no authoring. It owns the sequence of steps, the contract, and the validation gates, while everything else is delegated. This was the single biggest readability win. I wish I'd done it earlier.&lt;/P&gt;
&lt;P&gt;The &lt;CODE&gt;REPO_CONTEXT.md&lt;/CODE&gt; is one extra node in that diagram that I want to call out But I'll come back to later in section 12.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;10. The inner loop: rerun, fail, fix the skill&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;If I had to describe the middle of this project in one sentence, it would be: &lt;EM&gt;every commit was a regeneration&lt;/EM&gt;. I'd run the orchestrator end-to-end against the article, inspect the generated Terraform, the bundle, the workflows. I'd find a defect, identify the rule that would have prevented it, add that rule to the skill that owns the artifact, then rerun. As shown in the image below.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;This loop is what I think people miss when they treat AI-generated infrastructure code as a one-shot. The first run is never the deliverable. The deliverable is &lt;EM&gt;the skill that produces good runs&lt;/EM&gt;. The generated files are disposable and can always be reproduced. The skill is what carries the knowledge forward.&lt;/P&gt;
&lt;P&gt;I had to actively resist the temptation to fix bugs in the generated code directly. Patching &lt;CODE&gt;infra/terraform/main.tf&lt;/CODE&gt; by hand fixes today's run but not tomorrow's, because the rule that would prevent the bug doesn't exist anywhere. So I made it a discipline: never edit the output, always edit the skill, then regenerate.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;11. Restricted-tenant compatibility&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;The bug was simple to describe and brutal to fix: the deployment principal in the target tenant couldn't read Microsoft Graph. Any Terraform data source that resolved an Entra name to an object ID at plan time&amp;nbsp; (e.g., &lt;CODE&gt;azuread_user&lt;/CODE&gt;, &lt;CODE&gt;azuread_group&lt;/CODE&gt;, &lt;CODE&gt;azuread_service_principal&lt;/CODE&gt;) blew up at terraform plan.&lt;/P&gt;
&lt;P&gt;My first instinct was to think&amp;nbsp;&lt;EM&gt;"I just give the principal Graph permissions"&lt;/EM&gt;. But in a lot of real environments this is not possible. The principal that runs your IaC is governed by a security team, the team has a policy, and the policy says no Graph reads.&lt;/P&gt;
&lt;P&gt;The pivot was getting the skill to produce Terraform that never reads Graph. Object IDs are inputs, not lookups. They come in as trusted secrets, the workflow exports them as &lt;CODE&gt;TF_VAR_*&lt;/CODE&gt;, and Terraform consumes them as variables. No data "&lt;CODE&gt;azuread_*&lt;/CODE&gt;" block is allowed in the generated code, ever.&lt;/P&gt;
&lt;P&gt;I thought this was a simple fix. It wasn't. It cascaded into about six other things:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;U&gt;&lt;EM&gt;App Registration vs Service Principal object IDs&lt;/EM&gt;&lt;/U&gt;. The workflow was being given the wrong one. Role assignments need the Enterprise Application (Service Principal) object ID, not the App Registration object ID. The two are different objects in Entra with different IDs. I encoded the distinction in the skill as &lt;CODE&gt;*_SP_OBJECT_ID&lt;/CODE&gt; (the Service Principal) versus &lt;CODE&gt;*_CLIENT_ID&lt;/CODE&gt; (the App Registration's application ID). Naming carries the meaning now, so the wrong value is hard to pass.&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;&lt;EM&gt;Single-principal mapping.&lt;/EM&gt;&lt;/U&gt; In some tenants you only have one principal and it has to play both deployment and runtime roles. The skill grew a &lt;EM&gt;layer_sp_mode = existing&lt;/EM&gt; input so the generator stops trying to create a new Service Principal and reuses the deployment one instead.&lt;/LI&gt;
&lt;LI&gt;&lt;U&gt;&lt;EM&gt;Key Vault access policies, gone&lt;/EM&gt;&lt;/U&gt;. Access policies were Graph-touching, and not all tenants support them anyway. The skill switched fully to RBAC role assignments (Key Vault Secrets User, and so on). A few cascading bugs followed, but this was the right call.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;It took some time to harden the Terraform skill against everything the restricted tenant was throwing back. Each iterations had the same shape, each orchestrator runs, hits a fresh provider error, I add the rule, run again, hit the next one. The commit subjects from that run are basically a transcript of the conversation I was having with the platform.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;12. The bugs that became rules&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;There are three bugs that I believe are worth telling the story of, because they each illustrate a slightly different lesson.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;U&gt;The HCL trim() arity bug&lt;/U&gt;.&lt;/EM&gt; The generator emitted &lt;CODE&gt;trim(var.something)&lt;/CODE&gt; in a validation block. HCL's &lt;CODE&gt;trim()&lt;/CODE&gt; takes two arguments, not one. The function I actually wanted was &lt;CODE&gt;trimspace()&lt;/CODE&gt;. This is the kind of bug that any human would catch in a code review in two seconds, and which the model produced confidently because the &lt;EM&gt;shape&lt;/EM&gt; of the call looked right. I added the rule to the Terraform skill (&lt;EM&gt;"for whitespace trimming use trimspace, never trim"&lt;/EM&gt;) and the bug never came back.&lt;/P&gt;
&lt;P&gt;Lesson: even for trivial syntactic mistakes, the fix belongs in the skill.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;EM&gt;The variable shadowing bug&lt;/EM&gt;&lt;/U&gt;. The deploy workflow had a job-level env: block that set &lt;CODE&gt;TF_VAR_key_vault_recover_soft_deleted&lt;/CODE&gt; to a static value. A detection step earlier in the workflow was supposed to compute the right value at runtime and write it via &lt;CODE&gt;$GITHUB_ENV&lt;/CODE&gt;. The problem is that GitHub Actions resolves job-level environment variables before &lt;CODE&gt;$GITHUB_ENV&lt;/CODE&gt; writes take effect, so the static value always won and the dynamic one was silently ignored.&lt;/P&gt;
&lt;P&gt;The fix was to never set the recovery flag at job level. It must be written in the detection step, on every code path, including the trivial "no recovery needed" path.&lt;/P&gt;
&lt;P&gt;Lesson: state must be explicit, not inherited. If a flag has three possible meanings, three code paths must each write it.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;EM&gt;The hardcoded -platform suffix.&lt;/EM&gt;&lt;/U&gt; The workflow had a shell-side suffix that someone (let's be honest, the model) had invented to make the resource group name "look right". When recovery logic started running and the workflow looked for the canonical resource group, it looked for -platform instead of whatever the Terraform &lt;CODE&gt;locals.tf&lt;/CODE&gt; actually emitted. The result was that the recovery handler was happily reaching past the real resource group and into a different one. I made it a rule in the orchestrator: &lt;EM&gt;workflow-invented suffixes are not permitted.&lt;/EM&gt; Naming is owned by Terraform's &lt;CODE&gt;locals.tf&lt;/CODE&gt;.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;There are seventeen more defects in the catalogue, and the pattern is the same in every case. The bug surfaces, the rule gets written, the rule lives in the skill that owns the affected artifact.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;There is no &lt;CODE&gt;implementation-learnings.md&lt;/CODE&gt; in the repo. There used to be, but I've deleted it because a tracked log of past bugs, sitting next to a skill that's already supposed to encode the lessons from those bugs, is a duplication waiting to drift. I believe that if the rule is in the skill, the log is redundant. If the rule isn't in the skill, the log is an evidence that I haven't finished the work. Either way, the right place for bug history is git log.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;13. Splitting "the skill" from "this repo's defaults"&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;I then wanted the orchestrator to be portable, but every run kept needing the same handful of decisions. &lt;EM&gt;Which Azure region by default? Which environment names? Which catalog naming convention?&lt;/EM&gt; These weren't part of the article. They weren't part of the Terraform skill either. They were specific to &lt;EM&gt;this repository's&lt;/EM&gt; opinion about how things should be deployed.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;If I baked them into the orchestrator, the orchestrator stopped being portable. If I left them out, every run produced unhelpful &lt;EM&gt;"not stated in article"&lt;/EM&gt; entries for the same five universal decisions.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The answer was a new file called &lt;CODE&gt;REPO_CONTEXT.md&lt;/CODE&gt; stored in the repo root. It's read by the orchestrator before generation and it carries the defaults that are owned by the repo, not by the skill. The split looks like this in practice:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;CODE&gt;SKILL.md&lt;/CODE&gt; answers the question &lt;EM&gt;"how do I turn an article into a runnable repo?"&lt;/EM&gt; It is portable.&lt;/LI&gt;
&lt;LI&gt;&lt;CODE&gt;REPO_CONTEXT.md&lt;/CODE&gt; answers the question &lt;EM&gt;"what does this repo default to when the article doesn't say?"&lt;/EM&gt; It is local.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Cloning the orchestrator into another GitHub project is now a clean operation. You take the skill, you write your own &lt;CODE&gt;REPO_CONTEXT.md&lt;/CODE&gt;, and the same generator produces output appropriate to your environment.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;14. The Validations&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Most of the rules I'd written into the skills were prose. &lt;EM&gt;"Don't invent suffixes." "Object IDs are inputs, not lookups." "Every required Terraform variable must have a matching TF_VAR_* in the workflow."&lt;/EM&gt; The model is good at following prose rules most of the time.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;So a few of the most regression-prone rules became executable. The most important one is &lt;CODE&gt;scripts/validate_workflow_parity.sh&lt;/CODE&gt;. Every variable declared in &lt;CODE&gt;infra/terraform/variables.tf&lt;/CODE&gt; must appear as a &lt;CODE&gt;TF_VAR_*&lt;/CODE&gt; export in the deploy workflow. The script greps both files, diffs the sets, and exits non-zero if they don't match. It is run at the end of generation. If it fails, the run failed, even if everything else looks fine.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;This caught real bugs. The most embarrassing was a variable I'd added to &lt;CODE&gt;variables.tf&lt;/CODE&gt; and forgot to wire through the workflow. Terraform plan would prompt interactively for it on a non-interactive runner, and the run would hang.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The rule of thumb I've ended up with is: prose rules are the default, but if a rule has been violated more than twice, it gets promoted to an executable check. There's a short list of those checks now, and it's the load-bearing one.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;15. Key Vault soft-delete state machine&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Key Vaults in Azure have soft delete on by default. When you delete a vault, it sticks around for ninety days in a "soft-deleted" state. If you try to create a vault with the same name in the same subscription during that window, the deploy fails. The right behaviour is to &lt;EM&gt;recover&lt;/EM&gt; the soft-deleted vault, not create a new one.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The first version of my recovery handler covered exactly one case: if the vault is soft-deleted, recover it. This worked the first time I ran it.&lt;/P&gt;
&lt;P&gt;The second time, the recovered vault came back into the previous resource group, not the new one I had just created. Terraform then tried to create a new vault in the correct resource group and failed because the name was already taken globally. The handler had no concept of "the recovered vault is in the wrong resource group." So I added that case.&lt;/P&gt;
&lt;P&gt;The third time, the previous resource group itself was gone, and the handler was looking for it to verify the move. So I added that case too.&lt;/P&gt;
&lt;P&gt;By the end, the state machine had three distinct cases and two preconditions, as shown in the diagram below.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The reason I keep coming back to this state machine is that it captures something that I think is generally true about agent-generated infrastructure code. The happy path is easy and meaningless, while the value is in the failure modes. The first version that worked on a clean tenant was about ten lines of bash. The version that works on a tenant that has been deployed-into and partially-torn-down five times is six times longer, and every additional line of it corresponds to a real environmental condition that I had to learn the hard way.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;16. What I've learned so far&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;I'm not going to pretend the full list of principles below was clear to me on day one. Every single one of these was learned by getting it wrong first. Looking back at the history, though, they are the ones that survived contact with reality.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The contract precedes the implementation. &lt;CODE&gt;output-contract.md&lt;/CODE&gt; was committed before any generator existed. Locking the shape of the deliverable first meant every later change had a fixed reference point.&lt;/LI&gt;
&lt;LI&gt;Generators, not stencils. Workflows are produced by Python scripts that take parameters and emit YAML. When restricted-tenant logic and the soft-delete state machine arrived, they needed conditional structure that a static template can't express.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Every bug becomes a rule. Patching the generated code is a tax on tomorrow's run. While patching the skill is an investment.&lt;/LI&gt;
&lt;LI&gt;Each concern has a clear owner. The orchestrator routes, the leaves author, and the repo context holds the local defaults.&lt;/LI&gt;
&lt;LI&gt;Restricted-tenant compatibility is non-negotiable. No Microsoft Graph reads from generated Terraform. Object IDs are trusted inputs. Single-principal mapping is supported.&lt;/LI&gt;
&lt;LI&gt;Naming is owned by Terraform. No suffixes invented in shell. The validation harness enforces this.&lt;/LI&gt;
&lt;LI&gt;State must be explicit, not inherited. Every workflow run writes its own flags. No reliance on env defaults from a previous step or a previous run.&lt;/LI&gt;
&lt;LI&gt;Validation is executable when a rule has been violated more than twice. Prose rules are the default. Promotion to a script is earned.&lt;/LI&gt;
&lt;LI&gt;Operator docs describe concepts, not commands. Command syntax ages out, while conceptual descriptions don't. The &lt;CODE&gt;TODO&lt;/CODE&gt; template enforces this rule.&lt;/LI&gt;
&lt;LI&gt;Add strong testing at the end of the process, once all the files are generated. Each run may produce slightly different output and introduce bugs, even if the previous run was successful.&lt;/LI&gt;
&lt;LI&gt;End-to-end runs against dirty tenants are the truth. The acceptance test isn't a clean-room deploy. It's a deploy into a tenant that has soft-deleted vaults, lingering RGs, and existing role assignments. Until that works, the project isn't done.&lt;/LI&gt;
&lt;LI&gt;From time to time, skills need to be reviewed and consolidated.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;The summary above of the journey is the one I find most useful to share when people ask whether this approach actually goes anywhere. From an empty repo to a generator that produces a deployable, restricted-tenant-compatible infrastructure-as-code repository from a blog URL, with executable validation and a recovery state machine that survives a previously-deployed environment.&lt;/P&gt;
&lt;P&gt;The first commit was an empty workspace. The last commit was the one where the same orchestrator, run against the same blog, against a tenant carrying state from five previous runs, deployed cleanly with no manual intervention.&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;
&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;That is what I what I was aiming to achieve when I started!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks for reading.&lt;/P&gt;</description>
      <pubDate>Fri, 15 May 2026 08:48:58 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/secure-medallion-architecture-pattern-on-azure-databricks-part/ba-p/4491044</guid>
      <dc:creator>mscagliola</dc:creator>
      <dc:date>2026-05-15T08:48:58Z</dc:date>
    </item>
    <item>
      <title>Resilient by Design: Azure Databricks Disaster Recovery Strategy</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/resilient-by-design-azure-databricks-disaster-recovery-strategy/ba-p/4516464</link>
      <description>&lt;H3 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Introduction: From Recovery Plans to Resilience Strategy&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;As organizations increasingly rely on&lt;EM&gt; Azure Databricks&lt;/EM&gt; for mission-critical analytics and data engineering workloads, the need for robust disaster recovery (DR) strategies becomes paramount. These platforms are no longer just analytics&amp;nbsp;engines,&amp;nbsp;they&amp;nbsp;power real-time decisions, AI models, and core business operations.&lt;/SPAN&gt; &lt;SPAN data-contrast="auto"&gt;Yet many organizations still approach Disaster Recovery (DR) as a reactive safeguard rather than a strategic capability. Resilience today is not about “&lt;EM&gt;if something fails&lt;/EM&gt;,” but about ensuring continuity, trust, and performance under any condition.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;A modern DR strategy must therefore evolve beyond backup configurations and failover scripts. It must align with business priorities, regulatory requirements, risk tolerance, and operational maturity to become a core pillar of the enterprise data platform.&lt;/SPAN&gt; &lt;SPAN data-contrast="auto"&gt;In this context, organizations are increasingly adopting architecture patterns that enable cross-region resilience for the &lt;EM&gt;Azure Databricks Lakehouse&lt;/EM&gt;. This pattern includes synchronizing Unity Catalog objects—catalogs, schemas, tables, views, function, models, and volumes—across regions, combined with scalable data movement &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;mechanisms&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;secure data access&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;approaches&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;such as &lt;EM&gt;Delta Sharing&lt;/EM&gt;&amp;nbsp;and &lt;EM&gt;high-performance transfer tools&lt;/EM&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;To help organizations operationalize this approach today, we have defined a &lt;EM&gt;structured strategy&lt;/EM&gt; for synchronizing Unity Catalog objects and associated data across regions, enabling a resilient-by-design Azure Databricks architecture. This post focuses on that approach, outlining the key architectural patterns, strategic considerations, and practical implementation steps required to design and enable cross-region resilience.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;In October 2025, Databricks announced a Managed Disaster Recovery solution, developed in collaboration with &lt;A class="lia-external-url" href="https://www.databricks.com/blog/how-databricks-managed-disaster-recovery-helps-capital-one-achieve-lakehouse-resilience" target="_blank" rel="noopener"&gt;&lt;EM&gt;Capital One&lt;/EM&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, which includes managed replication, customer-specified failover, and read-only secondary capabilities.&amp;nbsp;The approach outlined in this post serves as a complementary, customer-managed pattern, providing a practical and production-ready path for organizations to achieve robust disaster recovery and business continuity while Databricks continues to expand its native DR capabilities.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Why Disaster Recovery for&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Azure Databricks is Different&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Traditional Disaster Recovery approaches do not fully apply to modern Lakehouse platforms.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;In Azure Databricks, resilience must account for:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Tight coupling between&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;data, compute, and metadata (Unity Catalog)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;
&lt;DIV class="lia-align-left"&gt;&lt;SPAN data-contrast="auto"&gt;Distributed pipelines (batch, streaming, ML)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Decentralized workspace ownership and rapid platform growth&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;This makes disaster recovery not just an infrastructure concern, but a&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;data platform design challenge.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;EM&gt;Figure 1. Main Disaster Recovery Considerations&lt;/EM&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Understanding the Fundamentals: RTO, RPO, and DR Trade-offs&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Before defining a disaster recovery strategy, it is essential to understand the core concepts that drive design decisions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Recovery Time Objective (RTO) defines how quickly a system must be restored after a disruption;&amp;nbsp;while Recovery Point Objective (RPO) defines how much data loss is acceptable. These two metrics directly influence the architecture, cost, and complexity of any DR solution.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;As illustrated&amp;nbsp;in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Figure&amp;nbsp;1&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, there is a clear trade-off between&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;cost and recovery performance&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Active-active (hot)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;architectures,&amp;nbsp;minimize downtime and data loss but come at a higher cost.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Warm standby&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;provides a balance between cost and recovery time.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cold DR&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;is cost-efficient but results in longer recovery times and higher data loss risk.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Understanding these trade-offs is critical to aligning DR strategy with business expectations.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Understanding the Fundamentals: RTO, RPO, and DR Trade-offs&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Before defining a disaster recovery strategy, it is essential to understand the core concepts that drive design decisions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Recovery Time Objective (RTO) defines how quickly a system must be restored after a disruption; while Recovery Point Objective (RPO) defines how much data loss is acceptable. These two metrics directly influence the architecture, cost, and complexity of any DR solution.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;As illustrated in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Figure&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;1&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, there is a clear trade-off between&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;cost and recovery performance&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Active-active (hot)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;architectures, minimize downtime and data loss but come at a higher cost.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Warm standby&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;provides a balance between cost and recovery time.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Cold DR&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;is cost-efficient but results in longer recovery times and higher data loss risk.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Understanding these trade-offs is critical to aligning DR strategy with business expectations.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Designing for Resilience: A Phased Disaster Recovery Approach&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Disaster recovery has evolved beyond a one-time setup into a structured, lifecycle-driven capability. Leading organizations design resilience intentionally, implement it systematically, and continuously&amp;nbsp;validate&amp;nbsp;it to ensure ongoing effectiveness.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;The framework outlined below provides a practical and strategic approach to operationalizing disaster recovery in Azure Databricks environments, bridging the gap between architectural intent and true operational readiness.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;EM&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;Figure &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;2&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;. Different Phases of Azure Databricks Disaster Recovery&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;H4 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Phase 1: Discovery &amp;amp; Assessment&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-align-justify" aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;A resilient disaster recovery strategy starts with clarity—yet in many Azure Databricks&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;environments,&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;that clarity is often missing. As platforms evolve, clusters multiply, jobs are duplicated, and data assets grow, making it increasingly difficult to answer a simple question: what do we&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;actually have&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;, and how critical is it?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify" aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;The Discovery phase addresses this by&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;establishing&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;a&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;single, authoritative view&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;of the platform. By&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;consolidating&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;all assets, dependencies, and usage patterns into a structured baseline, organizations can move from fragmented visibility to informed decision-making.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify" aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;This approach aligns closely with the concepts outlined in “&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;From Chaos to Clarity: Your Databricks Workspace on a Single Pane of Glass&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;”&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;,&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;where&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;establishing&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;a comprehensive inventory becomes the foundation for governance, optimization, and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;ultimately resilience&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify" aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;This foundation enables teams to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;identify&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;what matters most, define&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;appropriate RTO&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;and RPO targets, and understand the dependencies that will&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;ultimately shape&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&amp;nbsp;their disaster recovery strategy.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Outcome&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-align-justify"&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt;A clear, data-driven baseline of the environment—enabling confident workload prioritization and effective disaster recovery design.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;H4 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Phase 2: Strategy &amp;amp; Design&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Once visibility is&amp;nbsp;established, the next step is making deliberate design choices—balancing&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;resilience, cost, and complexity&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. At this stage, organizations define how their platform should behave under failure.&amp;nbsp;This typically starts with selecting a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;multi-site deployment pattern&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, in which&amp;nbsp;two primary approaches are commonly adopted:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="18" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Active–Active&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, where both regions are fully operational and serve live workloads&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="18" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;
&lt;DIV class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Active–Passive (Warm Standby)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, where a secondary region is pre-provisioned and activated only during failover&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Active–active architectures provide near-zero downtime and minimal data&amp;nbsp;loss but&amp;nbsp;come with increased cost and architectural complexity. Active–passive patterns offer a more cost-efficient alternative, with slightly higher recovery times depending on how failover is orchestrated.&lt;/SPAN&gt; &lt;SPAN data-contrast="auto"&gt;Beyond selecting the deployment pattern, a key architectural decision is how data is replicated across the Medallion architecture (Bronze, Silver, Gold). Our approach introduces a set of practical scenarios that allow organizations to tailor resilience based on both &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;workload criticality&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;recovery requirements&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;A common starting point is aligning the DR strategy to workload tiers, such as:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="32" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Tier 1 (Mission-critical)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;Active–Active with full replication&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="32" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Tier 2 (Business-critical)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;:&amp;nbsp;Active–Passive with partial replication&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Building on this, organizations can further refine their approach by defining how data is replicated across the Medallion layers:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Full replication (Bronze, Silver, Gold)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;,&amp;nbsp;i.e.&amp;nbsp;fastest recovery&amp;nbsp;at&amp;nbsp;highest cost;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Bronze-only replication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;lower cost, with re-computation&amp;nbsp;required&amp;nbsp;during recovery;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Gold-only replication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;optimized&amp;nbsp;for consumption-focused use cases.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;This combination of workload tiering and Medallion replication strategies enables a flexible, fit-for-purpose approach to disaster recovery, which balances&amp;nbsp;performance, cost, and operational complexity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Below we demonstrate, as an example, two&amp;nbsp;representative patterns:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;(a)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Active–Active architecture&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, where data pipelines operate in continuous trigger mode across regions, enabling near real-time synchronization; and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;(b)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Active–Passive architecture&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, where all layers are replicated using a clone-based approach and activated on demand during failover.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;These scenarios highlight how organizations can balance recovery performance and cost by adjusting both the deployment model and the depth of data replication.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;Figure &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;3&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;. Active - Active Scenario - Continuous Trigger Mode&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/img&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&lt;SPAN data-contrast="auto"&gt;Within the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;active–passive model&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, multiple variations can be applied, ranging from full replication of all&amp;nbsp;medallion layers to more selective approaches (such as replicating only&amp;nbsp;Bronze or Gold&amp;nbsp;layers). This flexibility allows organizations to further balance recovery performance, cost, and operational complexity.&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;Figure &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;4&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;. Active - Passive Scenario - Clone All Layers Mode&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/img&gt;
&lt;H4 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Phase&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;3&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Disaster Recovery Implementation&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;&amp;amp; Enablement&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;With the strategy defined, the focus shifts to translating design into a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;repeatable and operational solution&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. At this stage, resilience is no longer&amp;nbsp;conceptual,&amp;nbsp;it is embedded into the platform through automation, data replication, and standardized deployment patterns.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;From Strategy to Architecture&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;At&amp;nbsp;a high level, the DR architecture spans both the primary and secondary Azure regions, ensuring that all critical components can be either replicated or recreated:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Control plane synchronization:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Users, groups, and workspace assets are replicated using SCIM, Terraform, and CI/CD pipelines.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Workspace and metadata portability:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Jobs, notebooks, and configurations are defined as code and deployed consistently across regions.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Data&amp;nbsp;layer replication:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Managed data, external data, and streaming checkpoints are synchronized using deep clone operations.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This layered approach ensures that the platform can be reconstructed end-to-end, not just partially recovered.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Unity Catalog-Driven Replication&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;A critical aspect of the implementation is the replication of Unity Catalog metadata and associated data assets. This includes:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Synchronizing catalogs, schemas, tables, views, functions, and volumes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Using&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Delta Sharing&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to expose datasets across regions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Leveraging&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;deep clone&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and storage replication to ensure data availability&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Recreating external and managed locations in the target region&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;By combining metadata synchronization with data replication, the target environment becomes a fully functional mirror of the source.&lt;/SPAN&gt;&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;Figure &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;5&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;. Unity Catalog Focused DR Mechanisms&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Operationalizing with a DR Pipeline&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;To make this repeatable, the architecture is supported by a DR pipeline that orchestrates the process end-to-end:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Synchronize schemas and Unity Catalog structures&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Perform deep clone of Delta tables&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Recreate views and dependent objects&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Provision volumes and copy associated data&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Ensure consistency across storage layers (e.g., ADLS &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;via&amp;nbsp;AzCopy)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This pipeline can operate either continuously or on demand, depending on the selected DR pattern.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;Figure &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;6&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="caption"&gt;. Azure Databricks DR Replication Workflow&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/img&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Outcome&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt;A fully implemented disaster recovery solution where data, metadata, and platform components are consistently synchronized, enabling rapid and reliable activation of workloads in a secondary region.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;H4 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Phase 4:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;DR Drill:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Validation, Operations &amp;amp; Continuous Improvement&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:false,&amp;quot;134245529&amp;quot;:false,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;A disaster recovery strategy is only valuable if it works when needed. This phase focuses on&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;validating,&amp;nbsp;operating, and continuously improving&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;the DR solution to ensure it meets business expectations.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Failover &amp;amp; Failback in Practice&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;In a real failure scenario, the transition to the secondary region must be&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;simple, predictable, and fast&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;A typical failover process includes:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Detecting primary region unavailability&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Executing a final synchronization (if possible)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Redirecting connections to the DR workspace&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Resuming operations without requiring code changes&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Equally important is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;failback&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, once the primary region is restored:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Re-synchronizing data from DR to primary&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Switching pipelines and configurations back&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;
&lt;DIV class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Gradually restoring normal operations&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Because infrastructure and metadata are standardized, this process becomes&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;operational rather than reactive&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="none"&gt;Operating DR as a Continuous Capability&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Beyond failover, DR must be actively managed as part of daily operations:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Monitoring &amp;amp; Alerting:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Track job failures, performance bottlenecks, and system health&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Governance &amp;amp; Change Management:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Maintain&amp;nbsp;consistency between environments using&amp;nbsp;IaC&amp;nbsp;and version-controlled pipelines&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Continuous Optimization:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Adjust replication strategies, scaling, and performance as workloads evolve&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;This ensures the DR solution&amp;nbsp;remains&amp;nbsp;aligned with both&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;technical and business changes&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;over time.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="none"&gt;Ensuring Performance, Integrity, and Security&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;A production-ready DR solution must also guarantee:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="28" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Performance &amp;amp; Scalability:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Optimize&amp;nbsp;compute, autoscaling, and data transfer to handle recovery scenarios efficiently&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-align-justify"&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="28" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Data Integrity &amp;amp; Consistency:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Validate&amp;nbsp;schema synchronization,&amp;nbsp;monitor&amp;nbsp;replication jobs, and ensure parity between regions&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="28" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;
&lt;DIV class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Security &amp;amp; Compliance:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Enforce consistent access controls, secure credentials, and enable audit logging across environments&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Outcome&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-align-justify"&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Normal (Web)"&gt;A validated and continuously evolving DR capability—where recovery processes are tested,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Normal (Web)"&gt;monitored&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Normal (Web)"&gt;, and improved over time, providing confidence to both technical teams and business stakeholders.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Key Takeaways and Closing Thoughts&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;469777462&amp;quot;:[1440],&amp;quot;469777927&amp;quot;:[0],&amp;quot;469777928&amp;quot;:[1]}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;Resilience in modern data platforms is no longer defined by how quickly systems can recover, but by how effectively they are designed to withstand disruption in the first place. Azure Databricks, as a core engine for data, analytics, and AI, requires a disaster recovery approach that extends beyond infrastructure—one that treats data, metadata, pipelines, and governance as a unified system.&lt;/SPAN&gt; &lt;SPAN data-contrast="auto"&gt;By combining a structured discovery phase, a strategy aligned to workload criticality, and automated, repeatable implementation patterns, organizations can move from reactive recovery to resilience by design. This not only reduces risk, but also ensures that critical data workloads&amp;nbsp;remain&amp;nbsp;available, trusted, and performant when it matters most.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;469777462&amp;quot;:[1440],&amp;quot;469777927&amp;quot;:[0],&amp;quot;469777928&amp;quot;:[1]}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-align-justify"&gt;&lt;SPAN data-contrast="auto"&gt;The approach outlined in this post provides a practical and flexible way to enable cross-region resilience today, while also complementing the managed disaster recovery capabilities expected to be introduced by Databricks. As we&amp;nbsp;anticipate&amp;nbsp;the availability of these native features, this approach offers a production-ready foundation that can extend and integrate with future platform capabilities.&lt;/SPAN&gt; &lt;SPAN data-contrast="auto"&gt;In a world where disruption is inevitable, the&amp;nbsp;objective&amp;nbsp;is no longer simply to recover—but to&amp;nbsp;maintain&amp;nbsp;continuity of data, decisions, and business operations with confidence.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;469777462&amp;quot;:[1440],&amp;quot;469777927&amp;quot;:[0],&amp;quot;469777928&amp;quot;:[1]}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Special thank you to Vasilis Zisiadis, Dimitris Kotanis&amp;nbsp;who contributed their expertise to create this material and bring it to life.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:264}"&gt;Thank You Antony Bitar, C&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-olk-copy-source="MessageBody"&gt;ollin Brian&lt;/SPAN&gt; and Jason Pereira for their support in reviewing the content.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 06 May 2026 16:28:58 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/resilient-by-design-azure-databricks-disaster-recovery-strategy/ba-p/4516464</guid>
      <dc:creator>KonstantinaF</dc:creator>
      <dc:date>2026-05-06T16:28:58Z</dc:date>
    </item>
    <item>
      <title>From Chaos to Clarity: Your Databricks Workspace on a Single Pane of Glass</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/from-chaos-to-clarity-your-databricks-workspace-on-a-single-pane/ba-p/4516805</link>
      <description>&lt;H3 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-15"&gt;The question that never stays answered — until now&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;As Azure Databricks workspaces evolve, complexity creeps in unnoticed.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Every Azure Databricks conversation with customers eventually lands on the same question: “What do we actually have in this workspace?” Over time, clusters multiply, jobs get cloned, warehouses are spun up for one-off demos and forgotten, and Unity&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Catalog&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;keeps expanding until&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;it’s&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;hard to reason about. In most enterprises, each business or data science team&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;operates&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;its own workspace, while the central platform or operations team has little to no visibility into&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;what’s&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;being created or why. Teams often spend days—or weeks—trying to piece together what exists, who owns it, and the business purpose behind it, only to realize they still&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;don’t&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;have the full picture. And when the same question comes up next quarter, the cycle starts all over again.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;To address this, we built a utility that helps customers answer exactly that—by providing&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;a single pane of glass&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;for all Databricks assets through comprehensive&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;cataloging&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;and usage analysis. The utility works in two phases: Discovery and Analysis. This post focuses on the first step—the Discovery phase, where we&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;establish&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;a clear, authoritative inventory of everything that exists in the workspace.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-15"&gt;What the Discovery Phase&amp;nbsp;delivers?&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Think of the Discovery phase as a workspace health assessment. Once configured against a target workspace, the utility runs in a selected mode and&amp;nbsp;consolidates&amp;nbsp;all discovered assets into a centralized, Delta-based repository. The result is a structured,&amp;nbsp;queryable, and dashboard-ready metadata store.&lt;/SPAN&gt; &lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:6,&amp;quot;335551620&amp;quot;:6,&amp;quot;335559738&amp;quot;:80,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Behind the scenes, ten purpose-built scanners run in a tiered and parallelized architecture, enabling a fast yet comprehensive scan of the entire workspace.&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="width: 85.0926%; height: 453.8px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-background-color-10 lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-22"&gt;Scanner&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-background-color-10 lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-22"&gt;&lt;STRONG&gt;What is Cataloged&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Clusters&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Interactive, job, SQL — configs, policies, pools&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 37.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 37.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Jobs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 37.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Workflows, schedules, tasks, run history&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Warehouses&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;SQL endpoints, sizes, serverless settings&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Pipelines&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Delta Live Tables and their state&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Unity&amp;nbsp;Catalog&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Catalogs, schemas, tables, volumes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Workspace Objects&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Notebooks, repos, ML experiments, serving endpoints, alerts, Genie spaces&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Security&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Identity, network, data protection settings&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Billing&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;30–180 days of DBU usage by SKU and product&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Utilization&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Real CPU, memory, runtime patterns (deep scan)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Spark Job Optimizer (plugin)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Skew, spill, small files, broadcast hints (deep scan)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 26.1039%" /&gt;&lt;col style="width: 73.8772%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-15"&gt;Design Overview&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;img /&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21" border="1" style="width: 87.963%; height: 562.4px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 38.8px;"&gt;&lt;td class="lia-background-color-10 lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-16"&gt;#&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-background-color-10 lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-16"&gt;Block&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-background-color-10 lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-16"&gt;Role&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-background-color-10 lia-border-color-21" style="height: 38.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-16"&gt;Contents / Flow&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.8px;"&gt;&lt;td class="lia-align-center lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Source&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Starting point — the Databricks environments being discovered.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;One or more Azure Databricks workspaces. Auth via&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;OAuth. Outputs an authenticated&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;WorkspaceClient&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;to the Orchestrator.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 94.8px;"&gt;&lt;td class="lia-align-center lia-border-color-21" style="height: 94.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;2&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 94.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Orchestrator &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P aria-level="1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 94.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;The brain of the utility — coordinates scanning, concurrency, retries, timing.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 94.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Tiered thread-pool executor, scan config (mode, billing window, UC depth, max workers). Dispatches scanners in controlled waves.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.8px;"&gt;&lt;td class="lia-align-center lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;3&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Tier 1 Scanners&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Lightweight, high-concurrency scans. Run first for quick signal.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Clusters, Warehouses, Pipelines, Security. Up to 12 workers, 10-min timeout. Artifacts flow to the Centralized Repository.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.8px;"&gt;&lt;td class="lia-align-center lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;4&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Tier 2 Scanners&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;High-volume scans. Controlled concurrency to avoid API throttling.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Jobs, Workspace Objects (notebooks, repos, experiments, serving, alerts, Genie), Unity&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Catalog&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;, Billing (30–180 days DBU). 1/2 workers, 30-min timeout.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.8px;"&gt;&lt;td class="lia-align-center lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;5&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Tier 3 Scanners&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Sequential, analysis-grade scans (deep scan only).&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Utilization&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;(CPU, memory, SQL usage patterns) and Spark Job Optimizer&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;plugin (skew, spill, small files, broadcast hints). Runs after Tiers 1 &amp;amp; 2.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 94.8px;"&gt;&lt;td class="lia-align-center lia-border-color-21" style="height: 94.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;6&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 94.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Centralized Repository&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 94.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;The&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;catalog&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;of truth — where all output lands, timestamped and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;queryable&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 94.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Unity&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Catalog&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;&amp;nbsp;Delta tables (dashboard-ready) plus portable JSON and CSV exports for offline sharing or downstream tools.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.8px;"&gt;&lt;td class="lia-align-center lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;7&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Single Pane of Glass&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;The user-facing view — insight&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;at a glance&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 66.8px;"&gt;
&lt;P aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 1"&gt;Pre-built Lakeview dashboard: KPI strip, inventory charts, and week-over-week trends. Refresh to see current workspace state.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:280,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-15"&gt;Why users love the view — visualization that earns its keep&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This is where the Discovery phase stops being just a scan and starts becoming a decision-making tool. Because everything is&amp;nbsp;consolidated&amp;nbsp;into a single, Unity&amp;nbsp;Catalog–backed source of truth, the Lakeview dashboard delivers a genuine single pane of glass for the entire Databricks workspace.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:2,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;At a glance, you get:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:40,&amp;quot;335559739&amp;quot;:40}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="•" data-font="" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:540,&amp;quot;335559991&amp;quot;:270,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;•&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;KPI strip at the top&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;— total clusters, active jobs, UC tables, SQL warehouses, DLT pipelines, workspace objects. One glance, one number each.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:40,&amp;quot;335559739&amp;quot;:40}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="•" data-font="" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:540,&amp;quot;335559991&amp;quot;:270,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;•&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Inventory charts&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;— clusters by type, jobs by schedule, warehouses by size, tables by&amp;nbsp;catalog. The shape of your workspace becomes obvious.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:40,&amp;quot;335559739&amp;quot;:40}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="•" data-font="" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:540,&amp;quot;335559991&amp;quot;:270,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;•&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;The “that doesn’t look right” moments&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;—&amp;nbsp;The idle SQL warehouse with zero queries, the cluster running the wrong runtime, the notebook floating outside any repo. These surface instantly, without hunting.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:2,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Change over time&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;— because every scan is timestamped, you can&amp;nbsp;literally see&amp;nbsp;your platform grow (or sprawl) week over week.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:40,&amp;quot;335559739&amp;quot;:40}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;In the first customer walkthrough, the platform team&amp;nbsp;identified&amp;nbsp;an always-on SQL warehouse with zero queries and three jobs running on the wrong compute tier—all within the first 30 minutes. That single view paid for the project.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN class="lia-text-color-15"&gt;&lt;STRONG&gt;Sample Item&amp;nbsp;Catalog&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-15"&gt;Closing thoughts&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-21"&gt;The Discovery phase&amp;nbsp;isn’t&amp;nbsp;about governance for governance’s sake—it’s&amp;nbsp;about&amp;nbsp;clarity. Before teams can&amp;nbsp;optimize&amp;nbsp;costs, improve performance, or enforce standards, they first need a reliable answer to a basic question:&amp;nbsp;what&amp;nbsp;actually exists&amp;nbsp;today?&amp;nbsp;By giving platform and operations teams a single, authoritative view of all Databricks assets—grounded in data, not tribal knowledge—Discovery turns guesswork into informed decisions. In the next phase,&amp;nbsp;Analysis, that foundation is used to go deeper: identifying inefficiencies, risks, and opportunities to simplify and optimize the platform. But it all starts here—by finally knowing what you have.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Special thank you to&amp;nbsp;Antony Bitar, Collin Brian and Jason Pereira for their support in reviewing the content.&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 06 May 2026 16:25:47 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/from-chaos-to-clarity-your-databricks-workspace-on-a-single-pane/ba-p/4516805</guid>
      <dc:creator>AmitDamle</dc:creator>
      <dc:date>2026-05-06T16:25:47Z</dc:date>
    </item>
    <item>
      <title>From Manual Backfills to Autonomous Pipelines: Building an LLM-Powered Backfill Agent on Azure</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/from-manual-backfills-to-autonomous-pipelines-building-an-llm/ba-p/4516777</link>
      <description>&lt;H2&gt;&lt;STRONG&gt;Introduction:&amp;nbsp;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="94" data-end="529"&gt;Data backfills are a common operational requirement in modern data platforms. Missing partitions, upstream delays, or failed pipeline runs often require engineers to manually identify gaps, determine the appropriate recovery window, and trigger reprocessing. This approach does not scale well it introduces operational overhead, increases the risk of human error, and requires deep knowledge of data dependencies and pipeline behavior.&lt;/P&gt;
&lt;P data-start="531" data-end="788"&gt;In this post, I describe how to build a backfill agent using Azure AI Foundry, Model Context Protocol (MCP), Azure Functions, Synapse, and ADX. &lt;STRONG&gt;The goal is to automate the decision-making process while keeping execution controlled, observable, and governed.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="790" data-end="848"&gt;The design separates responsibilities across three layers:&lt;/P&gt;
&lt;UL data-start="850" data-end="1271"&gt;
&lt;LI data-section-id="17qn7zf" data-start="850" data-end="1004"&gt;&lt;STRONG data-start="852" data-end="870"&gt;Decision layer&lt;/STRONG&gt;: an LLM-based agent determines whether a backfill is required and defines the recovery scope (e.g., which dates, datasets, or layers)&lt;/LI&gt;
&lt;LI data-section-id="17f65sh" data-start="1005" data-end="1154"&gt;&lt;STRONG data-start="1007" data-end="1026"&gt;Execution layer&lt;/STRONG&gt;: an MCP server hosted on Azure Functions exposes controlled operations such as triggering pipelines and querying system state&lt;/LI&gt;
&lt;LI data-section-id="10dgit2" data-start="1155" data-end="1271"&gt;&lt;STRONG data-start="1157" data-end="1172"&gt;State layer&lt;/STRONG&gt;: ADX tables maintain backfill control metadata, data availability signals, and execution history&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="1273" data-end="1391"&gt;This separation keeps the system flexible while ensuring that all actions are traceable, auditable, and policy-driven.&lt;/P&gt;
&lt;P data-start="1393" data-end="1807"&gt;Importantly, this pattern is &lt;STRONG&gt;not limited to a single dataset or pipeline.&lt;/STRONG&gt; It can be applied across all datasets and across all layers of a medallion architecture Bronze, Silver, and Gold with layer-specific validation rules and backfill strategies. For example, Bronze may focus on completeness of ingestion, while Silver and Gold can enforce data quality and business logic constraints before initiating recovery.&lt;/P&gt;
&lt;P data-start="1809" data-end="2314" data-is-last-node="" data-is-only-node=""&gt;The key benefit of a backfill agent is that it shifts backfilling from a manual, reactive process to an automated, intelligent, and consistent workflow. Instead of engineers investigating incidents and triggering reruns, the agent continuously evaluates data state, identifies gaps, and initiates-controlled recovery actions. This reduces operational burden, improves reliability, and ensures faster recovery from data issues while maintaining governance, observability, and strict control over execution.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-section-id="18pwj5f" data-start="131" data-end="155"&gt;&lt;STRONG&gt;Architecture Overview&lt;BR /&gt;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-section-id="18pwj5f" data-start="131" data-end="155"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="157" data-end="382"&gt;The solution is designed as a controlled orchestration pattern that separates decision-making, execution, and state management. This allows backfill operations to be automated without compromising governance or observability.&lt;/P&gt;
&lt;P data-start="384" data-end="434"&gt;The architecture consists of four main components.&lt;/P&gt;
&lt;H3 data-section-id="fr74le" data-start="441" data-end="463"&gt;Logic Apps Trigger&lt;/H3&gt;
&lt;P data-start="465" data-end="599"&gt;The workflow is initiated using a Logic App. The trigger can be scheduled or invoked on demand, depending on operational requirements.&lt;/P&gt;
&lt;P data-start="601" data-end="781"&gt;It provides the input context required for the backfill evaluation, such as dataset name, processing layer, and scope constraints (for example, maximum number of dates to process).&lt;/P&gt;
&lt;H3 data-section-id="1qeht" data-start="788" data-end="831"&gt;Azure AI Foundry Agent (Decision Layer)&lt;/H3&gt;
&lt;P data-start="833" data-end="887"&gt;The Azure AI Foundry agent acts as the decision layer.&lt;/P&gt;
&lt;P data-start="889" data-end="1126"&gt;It evaluates the request and determines whether a backfill is required, and if so, what scope should be applied. The agent does not interact directly with data systems. Instead, it invokes predefined tools exposed through the MCP server.&lt;/P&gt;
&lt;P data-start="1128" data-end="1209"&gt;This ensures that decision logic is flexible, while execution remains controlled.&lt;/P&gt;
&lt;H3 data-section-id="1sbexms" data-start="1216" data-end="1269"&gt;Azure Function App – MCP Server (Execution Layer)&lt;/H3&gt;
&lt;P data-start="1271" data-end="1360"&gt;The Azure Function App hosts the MCP server and exposes a set of operations to the agent.&lt;/P&gt;
&lt;P data-start="1362" data-end="1503"&gt;These operations include querying missing partitions, triggering Synapse pipelines, retrieving execution status, and updating control tables.&lt;/P&gt;
&lt;P data-start="1505" data-end="1680"&gt;All interactions with external systems (Synapse and ADX) are handled within this layer. It is responsible for input validation, authorization, and enforcing execution rules.&lt;/P&gt;
&lt;P data-start="1682" data-end="1775"&gt;This abstraction ensures that infrastructure actions are not directly performed by the agent.&lt;/P&gt;
&lt;H3 data-section-id="1ydp7ml" data-start="1782" data-end="1822"&gt;Synapse Pipelines (Processing Layer)&lt;/H3&gt;
&lt;P data-start="1824" data-end="1890"&gt;Backfill execution is handled by a parameterized Synapse pipeline.&lt;/P&gt;
&lt;P data-start="1892" data-end="1934"&gt;The pipeline follows a consistent pattern:&lt;/P&gt;
&lt;UL data-start="1935" data-end="2068"&gt;
&lt;LI data-section-id="1a2jmey" data-start="1935" data-end="1977"&gt;Data is first written to a staging table&lt;/LI&gt;
&lt;LI data-section-id="1svpbk9" data-start="1978" data-end="2003"&gt;Validation is performed&lt;/LI&gt;
&lt;LI data-section-id="17ja9xq" data-start="2004" data-end="2068"&gt;Data is promoted to the main table only if validation succeeds&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="2070" data-end="2163"&gt;This approach ensures data quality and prevents partial or invalid data from being published.&lt;/P&gt;
&lt;H3 data-section-id="4ulhkj" data-start="2170" data-end="2211"&gt;Azure Data Explorer(State and Observability Layer)&lt;/H3&gt;
&lt;P data-start="2213" data-end="2254"&gt;ADX is used as the central state store.&lt;/P&gt;
&lt;P data-start="2256" data-end="2382"&gt;It maintains control and execution tables that track expected partitions, missing data, pipeline runs, and execution outcomes.&lt;/P&gt;
&lt;P data-start="2384" data-end="2397"&gt;This enables:&lt;/P&gt;
&lt;UL data-start="2398" data-end="2529"&gt;
&lt;LI data-section-id="1f0ma8r" data-start="2398" data-end="2431"&gt;Detection of missing partitions&lt;/LI&gt;
&lt;LI data-section-id="1w8dugz" data-start="2432" data-end="2486"&gt;Idempotent execution (avoiding duplicate processing)&lt;/LI&gt;
&lt;LI data-section-id="4hpvar" data-start="2487" data-end="2529"&gt;Full traceability of backfill operations&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="2531" data-end="2610"&gt;The agent relies on this state, accessed via the MCP server, to make decisions.&lt;/P&gt;
&lt;H2 data-section-id="pwn58s" data-start="2617" data-end="2635"&gt;End-to-End Flow&lt;/H2&gt;
&lt;OL data-start="2637" data-end="3153"&gt;
&lt;LI data-section-id="1piqvyw" data-start="2637" data-end="2707"&gt;The Logic App triggers the workflow and passes the request context.&lt;/LI&gt;
&lt;LI data-section-id="d0m39m" data-start="2708" data-end="2751"&gt;The Foundry agent evaluates the request.&lt;/LI&gt;
&lt;LI data-section-id="a6dqyk" data-start="2752" data-end="2827"&gt;The agent invokes an MCP tool to retrieve missing partitions from ADX.&lt;/LI&gt;
&lt;LI data-section-id="yy49t0" data-start="2828" data-end="2904"&gt;Based on the result, the agent determines whether a backfill is required.&lt;/LI&gt;
&lt;LI data-section-id="236bmz" data-start="2905" data-end="2983"&gt;If required, the agent invokes an MCP tool to trigger the Synapse pipeline.&lt;/LI&gt;
&lt;LI data-section-id="exleev" data-start="2984" data-end="3061"&gt;The pipeline executes the backfill using a staging and validation pattern.&lt;/LI&gt;
&lt;LI data-section-id="871xr2" data-start="3062" data-end="3104"&gt;Execution details are written to ADX.&lt;/LI&gt;
&lt;LI data-section-id="1x8u7vw" data-start="3105" data-end="3153"&gt;The agent returns a summary of the operation.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Analytics Layer:&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Synapse Analytics:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In the Synapse workspace, I created a generic parameterized pipeline that has three steps:&amp;nbsp;&lt;BR /&gt;1.Copy data from upstream and ingest it to ADX staging table&lt;/P&gt;
&lt;P&gt;2. Run Data validation&amp;nbsp;&lt;/P&gt;
&lt;P&gt;3 ingest staging data to main dataset table.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;the pipeline gets as a parameter dataset name, partitioning date, isbackfill flag and layer and ingest dataset into kusto table.&lt;/P&gt;
&lt;P&gt;values for layer : Bronze,Silver or Gold.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Kusto&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P&gt;In Kusto, the solution relies on the following tables:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Dataset tables for example, the Customers table in this demo [the same pattern can be extended to support multiple datasets.]&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;BackfillControl:&lt;/STRONG&gt;&amp;nbsp;
&lt;P data-start="104" data-end="336"&gt;its the central configuration and decision input for the backfill process. It defines which dataset partitions require backfill and provides the metadata needed for the agent to make execution decisions.&lt;BR /&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;each row in this table represents a &lt;/SPAN&gt;&lt;STRONG style="color: rgb(30, 30, 30);" data-start="374" data-end="404"&gt;specific dataset partition&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt; (for example, a given date in a specific layer) and its current backfill state.&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P data-start="106" data-end="308"&gt;&lt;STRONG&gt;BackfillExecutionLog &lt;/STRONG&gt;:&lt;/P&gt;
&lt;P data-start="106" data-end="308"&gt;this table is used to track the execution of backfill operations. It provides a complete record of when backfills were triggered, their outcome, and the associated pipeline runs, while the &lt;STRONG data-start="320" data-end="339"&gt;BackfillControl&lt;/STRONG&gt; table defines &lt;EM data-start="354" data-end="380"&gt;what should be processed&lt;/EM&gt;, the &lt;STRONG data-start="386" data-end="410"&gt;BackfillExecutionLog&lt;/STRONG&gt; captures &lt;EM data-start="420" data-end="444"&gt;what actually happened&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Code for Creating the tables:&lt;/P&gt;
&lt;LI-CODE lang="kusto"&gt;.create table BackfillExecutionLog ( ExecutionId: string, DatasetName: string, Layer: string, PartitionDate: datetime, PipelineName: string, PipelineRunId: string, TriggeredAt: datetime, TriggeredBy: string, ExecutionStatus: string, Reason: string ) .create table BackfillControl ( DatasetName: string, Layer: string, PartitionDate: datetime, BackfillRequired: bool, Status: string, DQStatus: string, RetryCount: int, MaxRetryCount: int, Reason: string )&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp; Output examples:&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="0" data-end="278"&gt;In this demo, Logic Apps, Synapse, and Kusto are&lt;STRONG&gt; treated as existing systems&lt;/STRONG&gt;; the focus is how to expose &lt;STRONG&gt;controlled MCP tools from an Azure Function App and connect them to Azure AI Foundry agent.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;Microsoft’s Azure Functions MCP extension lets a Function App expose functions as MCP tools, and Foundry can connect to the deployed MCP endpoint.&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 data-start="280" data-end="464"&gt;Steps:&lt;/H3&gt;
&lt;P data-start="280" data-end="464"&gt;Step1: Create the local Function App project&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;in VS code, run the command:&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;mkdir backfill-kusto-mcp
cd backfill-kusto-mcp

func init . --worker-runtime python --python&lt;/LI-CODE&gt;
&lt;P data-start="280" data-end="464"&gt;Step2: Implement the MCP tools&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-start="280" data-end="464"&gt;&amp;nbsp;add requirements to requirements.txt file:&lt;BR /&gt;&lt;LI-CODE lang=""&gt;azure-functions&amp;gt;=1.24.0
azure-identity
azure-kusto-data
requests
python-dotenv&lt;/LI-CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI data-start="280" data-end="464"&gt;The host.json file defines&amp;nbsp;&lt;STRONG data-start="185" data-end="211"&gt;runtime-level behavior&lt;/STRONG&gt; for the Azure Function App.&lt;BR data-start="239" data-end="242" /&gt;In this implementation, it is used to configure the &lt;STRONG data-start="294" data-end="311"&gt;MCP extension&lt;/STRONG&gt;, logging, and extension bundles.&lt;BR /&gt;&lt;LI-CODE lang="json"&gt;{
  "version": "2.0",
  "extensions": {
    "mcp": {
      "system": {
        "webhookAuthorizationLevel": "Anonymous"
      }
    }
  },
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      },
      "enableLiveMetricsFilters": true
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Experimental",
    "version": "[4.*, 5.0.0)"
  }
}&lt;/LI-CODE&gt;&lt;/LI&gt;
&lt;LI data-start="280" data-end="464"&gt;
&lt;P data-start="144" data-end="284"&gt;The local.settings.json file is used to define &lt;STRONG data-start="193" data-end="231"&gt;environment-specific configuration&lt;/STRONG&gt; for the Azure Function App during local development.&lt;/P&gt;
&lt;P data-start="286" data-end="507"&gt;It contains &lt;STRONG data-start="298" data-end="346"&gt;application settings (environment variables)&lt;/STRONG&gt; that are read by the Function App at runtime. These settings are not checked into source control and are replaced by &lt;STRONG data-start="464" data-end="489"&gt;App Settings in Azure&lt;/STRONG&gt; after deployment.&lt;BR /&gt;For example:&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "KUSTO_CLUSTER": "https://&amp;lt;ClusterName&amp;gt;.&amp;lt;Region&amp;gt;.kusto.windows.net",
    "KUSTO_DATABASE": "&amp;lt;DatabaseName&amp;gt;",
    "BACKFILL_CONTROL_TABLE": "BackfillControl",
    "BACKFILL_EXECUTION_LOG_TABLE": "BackfillExecutionLog",
    "SYNAPSE_WORKSPACE": "&amp;lt;SynapseWorkspaceName&amp;gt;",
    "SYNAPSE_PIPELINE": "&amp;lt;PipelineName&amp;gt;",
    "AUTH_MODE": "az_login", 
    "AZURE_CLIENT_ID": "",
    "DEFAULT_DATASET_NAME": "Customers",
    "DEFAULT_LAYER": "Bronze",
    "MAX_DATES_DEFAULT": "5"
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;For local development, AUTH_MODE is set to az_login.&lt;/P&gt;
&lt;P&gt;Before deploying to Azure Functions, change AUTH_MODE to &lt;STRONG&gt;MANAGED_IDENTITY &lt;/STRONG&gt;in the Function App application settings.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI data-start="280" data-end="464"&gt;The function_app.py defines the main implementation of MCP server&amp;nbsp;&lt;BR /&gt;
&lt;P data-start="10" data-end="92"&gt;ir:&lt;/P&gt;
&lt;UL data-start="98" data-end="578"&gt;
&lt;LI data-section-id="1hknd7g" data-start="98" data-end="218"&gt;Exposes MCP tools (find_backfill_candidates, trigger_backfill, run_backfill_agent, get_backfill_execution_log)&lt;/LI&gt;
&lt;LI data-section-id="1f30767" data-start="219" data-end="267"&gt;Reads configuration from environment variables&lt;/LI&gt;
&lt;LI data-section-id="n7s5md" data-start="268" data-end="335"&gt;Authenticates using Azure CLI (local) or Managed Identity (Azure)&lt;/LI&gt;
&lt;LI data-section-id="x0lh7g" data-start="336" data-end="405"&gt;Queries &lt;STRONG data-start="346" data-end="365"&gt;BackfillControl&lt;/STRONG&gt; in Kusto to identify missing partitions&lt;/LI&gt;
&lt;LI data-section-id="gyu8mm" data-start="406" data-end="451"&gt;Triggers &lt;STRONG data-start="417" data-end="438"&gt;Synapse pipelines&lt;/STRONG&gt; for backfill&lt;/LI&gt;
&lt;LI data-section-id="1hwnnxj" data-start="452" data-end="506"&gt;Writes execution results to &lt;STRONG data-start="482" data-end="506"&gt;BackfillExecutionLog&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI data-section-id="12el6jd" data-start="507" data-end="578"&gt;Enforces idempotency by checking if a partition was already triggered&lt;/LI&gt;
&lt;/UL&gt;
&lt;BR /&gt;Code:&lt;BR /&gt;&lt;BR /&gt;&lt;LI-CODE lang="python"&gt;import os
import uuid
import json
import logging
from datetime import datetime, timezone
from urllib.parse import quote

import requests
import azure.functions as func
from azure.identity import ManagedIdentityCredential, AzureCliCredential
from azure.kusto.data import KustoClient, KustoConnectionStringBuilder


app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

logging.basicConfig(level=logging.INFO)


AUTH_MODE = os.getenv("AUTH_MODE", "MANAGED_IDENTITY").lower()

KUSTO_CLUSTER = os.getenv("KUSTO_CLUSTER")
KUSTO_DATABASE = os.getenv("KUSTO_DATABASE")

CONTROL_TABLE = os.getenv("BACKFILL_CONTROL_TABLE", "BackfillControl")
EXECUTION_LOG_TABLE = os.getenv("BACKFILL_EXECUTION_LOG_TABLE", "BackfillExecutionLog")

SYNAPSE_WORKSPACE = os.getenv("SYNAPSE_WORKSPACE")
SYNAPSE_PIPELINE = os.getenv("SYNAPSE_PIPELINE", "Customer Dataset")

DEFAULT_DATASET_NAME = os.getenv("DEFAULT_DATASET_NAME", "Customers")
DEFAULT_LAYER = os.getenv("DEFAULT_LAYER", "Bronze")


def utc_now() -&amp;gt; str:
    return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")


def log_event(event: str, **properties):
    logging.info(
        "MCP_BACKFILL %s",
        json.dumps(
            {
                "event": event,
                "timestamp_utc": utc_now(),
                **properties,
            },
            default=str,
        ),
    )


def require_setting(name: str, value: str | None):
    if not value:
        raise ValueError(f"Missing required app setting: {name}")


def escape_kusto_string(value: str | None) -&amp;gt; str:
    if value is None:
        return ""

    return str(value).replace("\\", "\\\\").replace('"', '\\"')


def get_credential():
    if AUTH_MODE == "az_login":
        return AzureCliCredential()

    managed_identity_client_id = os.getenv("AZURE_CLIENT_ID")

    if managed_identity_client_id:
        log_event(
            "using_user_assigned_managed_identity",
            client_id=managed_identity_client_id,
        )
        return ManagedIdentityCredential(client_id=managed_identity_client_id)

    log_event("using_system_assigned_managed_identity")
    return ManagedIdentityCredential()


def get_kusto_client() -&amp;gt; KustoClient:
    require_setting("KUSTO_CLUSTER", KUSTO_CLUSTER)

    if AUTH_MODE == "az_login":
        kcsb = KustoConnectionStringBuilder.with_az_cli_authentication(KUSTO_CLUSTER)
    else:
        managed_identity_client_id = os.getenv("AZURE_CLIENT_ID")

        if managed_identity_client_id:
            kcsb = KustoConnectionStringBuilder.with_aad_managed_service_identity_authentication(
                KUSTO_CLUSTER,
                client_id=managed_identity_client_id,
            )
        else:
            kcsb = KustoConnectionStringBuilder.with_aad_managed_service_identity_authentication(
                KUSTO_CLUSTER
            )

    return KustoClient(kcsb)


def execute_kusto_query(query: str):
    require_setting("KUSTO_DATABASE", KUSTO_DATABASE)

    client = get_kusto_client()
    response = client.execute(KUSTO_DATABASE, query)

    return response.primary_results[0]


def execute_kusto_command(command: str):
    require_setting("KUSTO_DATABASE", KUSTO_DATABASE)

    client = get_kusto_client()
    return client.execute_mgmt(KUSTO_DATABASE, command)


def find_backfill_candidates_core(
    dataset_name: str,
    layer: str,
    max_dates: int,
) -&amp;gt; list[dict]:
    dataset = escape_kusto_string(dataset_name)
    layer_name = escape_kusto_string(layer)

    query = f"""
    {CONTROL_TABLE}
    | where DatasetName == "{dataset}"
    | where Layer == "{layer_name}"
    | where BackfillRequired == true
    | where RetryCount &amp;lt; MaxRetryCount
    | where Status in ("Missing", "Failed") or DQStatus == "Failed"
    | top {int(max_dates)} by PartitionDate asc
    | project DatasetName, Layer, PartitionDate, Status, DQStatus, RetryCount, MaxRetryCount, Reason
    """

    rows = execute_kusto_query(query)

    return [
        {
            "DatasetName": row["DatasetName"],
            "Layer": row["Layer"],
            "PartitionDate": str(row["PartitionDate"])[:10],
            "Status": row["Status"],
            "DQStatus": row["DQStatus"],
            "RetryCount": row["RetryCount"],
            "MaxRetryCount": row["MaxRetryCount"],
            "Reason": row["Reason"],
        }
        for row in rows
    ]


def was_backfill_already_triggered(
    dataset_name: str,
    layer: str,
    partition_date: str,
) -&amp;gt; bool:
    dataset = escape_kusto_string(dataset_name)
    layer_name = escape_kusto_string(layer)

    query = f"""
    {EXECUTION_LOG_TABLE}
    | where DatasetName == "{dataset}"
    | where Layer == "{layer_name}"
    | where PartitionDate == datetime({partition_date})
    | where ExecutionStatus == "Triggered"
    | summarize Count = count()
    """

    rows = list(execute_kusto_query(query))

    return bool(rows and rows[0]["Count"] &amp;gt; 0)


def write_execution_log(
    execution_id: str,
    dataset_name: str,
    layer: str,
    partition_date: str,
    pipeline_name: str,
    pipeline_run_id: str,
    execution_status: str,
    reason: str,
):
    command = f"""
    .set-or-append {EXECUTION_LOG_TABLE} &amp;lt;|
    print
        ExecutionId = "{escape_kusto_string(execution_id)}",
        DatasetName = "{escape_kusto_string(dataset_name)}",
        Layer = "{escape_kusto_string(layer)}",
        PartitionDate = datetime({partition_date}),
        PipelineName = "{escape_kusto_string(pipeline_name)}",
        PipelineRunId = "{escape_kusto_string(pipeline_run_id)}",
        TriggeredAt = datetime({utc_now()}),
        TriggeredBy = "FoundryMCPBackfillAgent",
        ExecutionStatus = "{escape_kusto_string(execution_status)}",
        Reason = "{escape_kusto_string(reason)}"
    """

    execute_kusto_command(command)


def trigger_synapse_pipeline(
    dataset_name: str,
    layer: str,
    partition_date: str,
) -&amp;gt; str:
    require_setting("SYNAPSE_WORKSPACE", SYNAPSE_WORKSPACE)
    require_setting("SYNAPSE_PIPELINE", SYNAPSE_PIPELINE)

    credential = get_credential()
    token = credential.get_token("https://dev.azuresynapse.net/.default").token

    encoded_pipeline_name = quote(SYNAPSE_PIPELINE, safe="")
    url = (
        f"https://{SYNAPSE_WORKSPACE}.dev.azuresynapse.net"
        f"/pipelines/{encoded_pipeline_name}/createRun"
        f"?api-version=2020-12-01"
    )

    payload = {
        "DatasetName": dataset_name,
        "Layer": layer,
        "PartitionDate": partition_date,
        "IsBackfill": True,
    }

    response = requests.post(
        url,
        headers={
            "Authorization": f"Bearer {token}",
            "Content-Type": "application/json",
        },
        json=payload,
        timeout=30,
    )

    log_event(
        "synapse_create_run_response",
        status_code=response.status_code,
        body=response.text[:2000],
    )

    response_json = {}
    try:
        response_json = response.json()
    except Exception:
        pass

    if "runId" in response_json:
        return response_json["runId"]

    raise Exception(
        f"Synapse trigger failed. "
        f"StatusCode={response.status_code}. "
        f"Body={response.text}"
    )


def trigger_backfill_core(
    dataset_name: str,
    layer: str,
    partition_date: str,
) -&amp;gt; dict:
    execution_id = str(uuid.uuid4())

    log_event(
        "trigger_backfill_started",
        execution_id=execution_id,
        dataset_name=dataset_name,
        layer=layer,
        partition_date=partition_date,
    )

    try:
        if was_backfill_already_triggered(dataset_name, layer, partition_date):
            return {
                "ExecutionId": execution_id,
                "DatasetName": dataset_name,
                "Layer": layer,
                "PartitionDate": partition_date,
                "Status": "Skipped",
                "Reason": "Backfill was already triggered for this partition.",
            }

        pipeline_run_id = trigger_synapse_pipeline(
            dataset_name=dataset_name,
            layer=layer,
            partition_date=partition_date,
        )

        write_execution_log(
            execution_id=execution_id,
            dataset_name=dataset_name,
            layer=layer,
            partition_date=partition_date,
            pipeline_name=SYNAPSE_PIPELINE,
            pipeline_run_id=pipeline_run_id,
            execution_status="Triggered",
            reason="Triggered by Foundry MCP backfill agent",
        )

        return {
            "ExecutionId": execution_id,
            "DatasetName": dataset_name,
            "Layer": layer,
            "PartitionDate": partition_date,
            "PipelineName": SYNAPSE_PIPELINE,
            "PipelineRunId": pipeline_run_id,
            "Status": "Triggered",
        }

    except Exception as ex:
        error_message = str(ex)

        log_event(
            "trigger_backfill_failed",
            execution_id=execution_id,
            dataset_name=dataset_name,
            layer=layer,
            partition_date=partition_date,
            error=error_message,
        )

        try:
            write_execution_log(
                execution_id=execution_id,
                dataset_name=dataset_name,
                layer=layer,
                partition_date=partition_date,
                pipeline_name=SYNAPSE_PIPELINE or "",
                pipeline_run_id="",
                execution_status="FailedToTrigger",
                reason=error_message,
            )
        except Exception as log_ex:
            log_event(
                "failed_to_write_execution_log",
                execution_id=execution_id,
                original_error=error_message,
                log_error=str(log_ex),
            )

        return {
            "ExecutionId": execution_id,
            "DatasetName": dataset_name,
            "Layer": layer,
            "PartitionDate": partition_date,
            "Status": "FailedToTrigger",
            "Error": error_message,
        }


def run_backfill_agent_core(
    dataset_name: str,
    layer: str,
    max_dates: int,
) -&amp;gt; list[dict]:
    log_event(
        "run_backfill_agent_started",
        dataset_name=dataset_name,
        layer=layer,
        max_dates=max_dates,
    )

    candidates = find_backfill_candidates_core(
        dataset_name=dataset_name,
        layer=layer,
        max_dates=max_dates,
    )

    results = []

    for candidate in candidates:
        result = trigger_backfill_core(
            dataset_name=candidate["DatasetName"],
            layer=candidate["Layer"],
            partition_date=candidate["PartitionDate"],
        )

        results.append(result)

    log_event(
        "run_backfill_agent_completed",
        dataset_name=dataset_name,
        layer=layer
    )

    return results


def get_execution_log_core(
    dataset_name: str,
    limit: int,
) -&amp;gt; list[dict]:
    dataset = escape_kusto_string(dataset_name)

    query = f"""
    {EXECUTION_LOG_TABLE}
    | where DatasetName == "{dataset}"
    | top {int(limit)} by TriggeredAt desc
    | project ExecutionId, DatasetName, Layer, PartitionDate, PipelineName, PipelineRunId, TriggeredAt, TriggeredBy, ExecutionStatus, Reason
    """

    rows = execute_kusto_query(query)

    return [
        {
            "ExecutionId": row["ExecutionId"],
            "DatasetName": row["DatasetName"],
            "Layer": row["Layer"],
            "PartitionDate": str(row["PartitionDate"])[:10],
            "PipelineName": row["PipelineName"],
            "PipelineRunId": row["PipelineRunId"],
            "TriggeredAt": str(row["TriggeredAt"]),
            "TriggeredBy": row["TriggeredBy"],
            "ExecutionStatus": row["ExecutionStatus"],
            "Reason": row["Reason"],
        }
        for row in rows
    ]


@app.mcp_tool()
@app.mcp_tool_property(arg_name="dataset_name", description="Dataset name, for example Customers.")
@app.mcp_tool_property(arg_name="layer", description="Layer name, for example Bronze.")
@app.mcp_tool_property(arg_name="max_dates", description="Maximum number of dates to return.")
def find_backfill_candidates(
    dataset_name: str = DEFAULT_DATASET_NAME,
    layer: str = DEFAULT_LAYER,
    max_dates: int = 5,
) -&amp;gt; list[dict]:
    return find_backfill_candidates_core(dataset_name, layer, max_dates)


@app.mcp_tool()
@app.mcp_tool_property(arg_name="dataset_name", description="Dataset name, for example Customers.")
@app.mcp_tool_property(arg_name="layer", description="Layer name, for example Bronze.")
@app.mcp_tool_property(arg_name="partition_date", description="Partition date in yyyy-MM-dd format.")
def trigger_backfill(
    dataset_name: str,
    layer: str,
    partition_date: str,
) -&amp;gt; dict:
    return trigger_backfill_core(dataset_name, layer, partition_date)


@app.mcp_tool()
@app.mcp_tool_property(arg_name="dataset_name", description="Dataset name, for example Customers.")
@app.mcp_tool_property(arg_name="layer", description="Layer name, for example Bronze.")
@app.mcp_tool_property(arg_name="max_dates", description="Maximum number of dates to trigger.")
def run_backfill_agent(
    dataset_name: str = DEFAULT_DATASET_NAME,
    layer: str = DEFAULT_LAYER,
    max_dates: int = 5,
) -&amp;gt; list[dict]:
    return run_backfill_agent_core(dataset_name, layer, max_dates)


@app.mcp_tool()
@app.mcp_tool_property(arg_name="dataset_name", description="Dataset name, for example Customers.")
@app.mcp_tool_property(arg_name="limit", description="Maximum number of execution log rows to return.")
def get_backfill_execution_log(
    dataset_name: str = DEFAULT_DATASET_NAME,
    limit: int = 10,
) -&amp;gt; list[dict]:
    return get_execution_log_core(dataset_name, limit)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="280" data-end="464"&gt;Step3: . Run locally&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1. Activate virtual environment:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;python -m venv .sally-env
.\.sally-env\Scripts\activate&lt;/LI-CODE&gt;
&lt;P data-start="280" data-end="464"&gt;&amp;nbsp; &amp;nbsp;2. Install dependencies :&lt;/P&gt;
&lt;LI-CODE lang=""&gt;pip install -r requirements.txt
npm install -g azurite&lt;/LI-CODE&gt;
&lt;P data-start="280" data-end="464"&gt;&amp;nbsp; 3. Open 2 terminals, in one terminal run:&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;azurite&lt;/LI-CODE&gt;&lt;img /&gt;
&lt;P data-start="280" data-end="464"&gt;4. in the second terminal:&amp;nbsp;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;Login to Azure:&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;az login&lt;/LI-CODE&gt;
&lt;P data-start="280" data-end="464"&gt;&amp;nbsp;start the function app:&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;func start&lt;/LI-CODE&gt;
&lt;P data-start="280" data-end="464"&gt;P.S make sure to change auth in local.settings.json file to&amp;nbsp;&lt;/P&gt;
&lt;P&gt;"AUTH_MODE": "az_login"&lt;/P&gt;
&lt;img /&gt;&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;Step4: Create Azure resources and deploy&lt;/P&gt;
&lt;LI-CODE lang=""&gt;# LOGIN
az login

# VARIABLES
$RG="rg-backfill-kusto-mcp-demo"
$LOCATION="westeurope"
$STORAGE="stbackfillmcp$((Get-Random -Minimum 10000 -Maximum 99999))"
$FUNCAPP="func-backfill-kusto-mcp-$((Get-Random -Minimum 10000 -Maximum 99999))"

# CREATE RESOURCE GROUP
az group create --name $RG --location $LOCATION

# CREATE STORAGE ACCOUNT
az storage account create `
  --name $STORAGE `
  --resource-group $RG `
  --location $LOCATION `
  --sku Standard_LRS

# CREATE FUNCTION APP
az functionapp create `
  --resource-group $RG `
  --consumption-plan-location $LOCATION `
  --runtime python `
  --runtime-version 3.11 `
  --functions-version 4 `
  --name $FUNCAPP `
  --storage-account $STORAGE `
  --os-type Linux

# ENABLE MANAGED IDENTITY
az functionapp identity assign `
  --resource-group $RG `
  --name $FUNCAPP

# GET PRINCIPAL ID
$FUNC_PRINCIPAL_ID = az functionapp identity show `
  --resource-group $RG `
  --name $FUNCAPP `
  --query principalId `
  --output tsv

Write-Host "Function App Principal ID: $FUNC_PRINCIPAL_ID"

# CONFIGURE APP SETTINGS
az functionapp config appsettings set `
  --resource-group $RG `
  --name $FUNCAPP `
  --settings `
    AUTH_MODE=MANAGED_IDENTITY `
    KUSTO_CLUSTER="https://&amp;lt;ClusterName&amp;gt;.&amp;lt;Region&amp;gt;.kusto.windows.net" `
    KUSTO_DATABASE="&amp;lt;DatabaseName&amp;gt;" `
    BACKFILL_CONTROL_TABLE="BackfillControl" `
    BACKFILL_EXECUTION_LOG_TABLE="BackfillExecutionLog" `
    SYNAPSE_WORKSPACE="&amp;lt;SynapseWorkspaceName&amp;gt;" `
    SYNAPSE_PIPELINE="&amp;lt;PipelineName&amp;gt;" `
    DEFAULT_DATASET_NAME="Customers" `
    DEFAULT_LAYER="Bronze" `
    MAX_DATES_DEFAULT="5"

# DEPLOY FUNCTION APP (RUN FROM PROJECT FOLDER)
func azure functionapp publish $FUNCAPP

# GET MCP ENDPOINT
$MCP_ENDPOINT="https://$FUNCAPP.azurewebsites.net/runtime/webhooks/mcp"
Write-Host "MCP Endpoint: $MCP_ENDPOINT"

# GET MCP KEY
$MCP_KEY = az functionapp keys list `
  --resource-group $RG `
  --name $FUNCAPP `
  --query "systemKeys.mcp_extension" `
  --output tsv

Write-Host "MCP Key: $MCP_KEY"

# TEST MCP TOOL
$body = @{
  jsonrpc = "2.0"
  id = "1"
  method = "tools/call"
  params = @{
    name = "find_backfill_candidates"
    arguments = @{
      dataset_name = "Customers"
      layer = "Bronze"
      max_dates = 1
    }
  }
} | ConvertTo-Json -Depth 10

Invoke-RestMethod `
  -Uri $MCP_ENDPOINT `
  -Method POST `
  -Headers @{
    Accept = "application/json, text/event-stream"
    "x-functions-key" = $MCP_KEY
  } `
  -ContentType "application/json" `
  -Body $body&lt;/LI-CODE&gt;
&lt;P data-start="280" data-end="464"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;After deployment, the Function App’s &lt;STRONG&gt;managed identity &lt;/STRONG&gt;must be granted the appropriate permissions in both Kusto and Synapse with &lt;STRONG&gt;Function app principal id&lt;/STRONG&gt; , this allows the Function App to query Kusto tables and trigger Synapse pipelines without issues.&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;Step5: . Connect the MCP server to Azure AI Foundry&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-section-id="17agz2b" data-start="699" data-end="734"&gt;Go to &lt;STRONG data-start="707" data-end="734"&gt;Azure AI Foundry portal&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI data-section-id="1mzk1sg" data-start="735" data-end="765"&gt;Navigate to your &lt;STRONG data-start="754" data-end="765"&gt;Project&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI data-section-id="1uk8jec" data-start="766" data-end="787"&gt;Open your &lt;STRONG data-start="778" data-end="787"&gt;Agent&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI data-section-id="1uk8jec" data-start="766" data-end="787"&gt;&lt;STRONG data-start="778" data-end="787"&gt;Add MCP as a tool :&amp;nbsp;&lt;/STRONG&gt;
&lt;UL data-start="820" data-end="871"&gt;
&lt;LI data-section-id="16n0v2o" data-start="820" data-end="837"&gt;Go to &lt;STRONG data-start="828" data-end="837"&gt;Tools&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI data-section-id="1xm1iyn" data-start="838" data-end="858"&gt;Click &lt;STRONG data-start="846" data-end="858"&gt;Add Tool&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI data-section-id="1v5ow8q" data-start="859" data-end="868"&gt;Select:&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Custom → Model Context Protocol (MCP)&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Configure custom MCP and click on Save&lt;/P&gt;
MCP endpoint:&lt;BR /&gt;https://&amp;lt;function-app-name&amp;gt;.azurewebsites.net/runtime/webhooks/mcp&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="280" data-end="464"&gt;Step6: Define Agent instructions&lt;/P&gt;
&lt;LI-CODE lang=""&gt;You are a Backfill Reliability Agent.
You MUST use the backfill_agent MCP tool.
Do NOT ask the user for candidate dates.
When asked to run backfill:
Find dataset name
1. Call find_backfill_candidates with dataset_name layer max_dates 
2. Then call run_backfill_agent with dataset_name, layer= max_dates
Return the PipelineRunId.&lt;/LI-CODE&gt;
&lt;P&gt;Note:&amp;nbsp;&lt;BR /&gt;The instructions are very generic; you need to modify it based on your business scenario.&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;Step7: Test prompt&lt;/P&gt;
&lt;img /&gt;
&lt;P data-start="280" data-end="464"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;Now in Synapse Monitor:&amp;nbsp;&lt;BR /&gt;Search for PipelineRunId: df1b1920-09dd-415b-bbe9-d810d8505f58:&lt;/P&gt;
&lt;img /&gt;
&lt;P data-start="280" data-end="464"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Future Enhancements:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="11" data-end="132"&gt;The backfill agent automates recovery by detecting missing or failed data and triggering controlled reprocessing via MCP.&lt;/P&gt;
&lt;P data-start="134" data-end="237"&gt;It can scale across all datasets and medallion layers (Bronze, Silver, Gold) with layer-specific rules.&lt;/P&gt;
&lt;P data-start="239" data-end="430"&gt;The design can evolve into a &lt;STRONG data-start="268" data-end="292"&gt;multi-agent workflow &lt;/STRONG&gt;for example, if backfill fails multiple times, a notification agent can automatically send emails or create incidents for upstream teams.&lt;/P&gt;
&lt;P data-start="432" data-end="561" data-is-last-node="" data-is-only-node=""&gt;Overall, this shift backfilling from a manual, reactive task to an automated, governed, and intelligent data operations process.&lt;/P&gt;
&lt;P data-start="432" data-end="561" data-is-last-node="" data-is-only-node=""&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;&lt;STRONG&gt;Links:&lt;/STRONG&gt;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-mcp-tutorial?tabs=mcp-extension&amp;amp;pivots=programming-language-python" target="_blank" rel="noopener"&gt;Tutorial: Host an MCP server on Azure Functions | Microsoft Learn&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/foundry/tutorials/quickstart-create-foundry-resources?tabs=azurecli" target="_blank" rel="noopener"&gt;Quickstart: Set up Microsoft Foundry resources - Microsoft Foundry | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/synapse-analytics/quickstart-connect-azure-data-explorer" target="_blank" rel="noopener"&gt;Quickstart: Connect Azure Data Explorer to an Azure Synapse Analytics workspace - Azure Synapse Analytics | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P data-start="280" data-end="464"&gt;Would love to hear your Feedback:&amp;nbsp;&lt;A href="https://www.linkedin.com/in/sally-dabbah/" target="_blank" rel="noopener"&gt;Sally Dabbah | LinkedIn&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 05 May 2026 10:16:19 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/from-manual-backfills-to-autonomous-pipelines-building-an-llm/ba-p/4516777</guid>
      <dc:creator>Sally_Dabbah</dc:creator>
      <dc:date>2026-05-05T10:16:19Z</dc:date>
    </item>
    <item>
      <title>Step by Step Guide to Ontology and Plan for Financial Service</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/step-by-step-guide-to-ontology-and-plan-for-financial-service/ba-p/4512708</link>
      <description>&lt;H2&gt;What We Will Build&lt;/H2&gt;
&lt;P&gt;In this guide, we will construct a complete Fabric IQ solution that accomplishes the following:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;First, &lt;/STRONG&gt;a Lakehouse that ingests publicly available data including bank financials, P2P lending statistics, borrower demographics, and licensing information. &lt;STRONG&gt;Second, &lt;/STRONG&gt;a Semantic Model that defines the analytical layer with proper dimensions, measures, and relationships. &lt;STRONG&gt;Third, &lt;/STRONG&gt;an Ontology that elevates these tables into business entities such as Bank, P2P Platform, Borrower, and Loan, connected by meaningful relationships and governed by regulatory rules. &lt;STRONG&gt;Fourth, &lt;/STRONG&gt;a Planning sheet that enables supervisors to forecast enforcement workloads, allocate examination budgets, and model scenarios based on live data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Step 1: Preparing the Data Foundation in Fabric Lakehouse&lt;/H1&gt;
&lt;P&gt;Every Fabric IQ solution begins with data. Before we can model business semantics or build planning sheets, we need a well structured Lakehouse that holds our source data in a governed and queryable format.&lt;/P&gt;
&lt;H2&gt;Creating the Lakehouse&lt;/H2&gt;
&lt;P&gt;Navigate to your Fabric workspace and create a new Lakehouse. In this example, we have named it P2PLendingLH, housed within the workspace P2P Lending CrossSector Demo. The Lakehouse serves as the Bronze and Silver layer of our medallion architecture, storing both raw ingested data and transformed analytical tables.&lt;/P&gt;
&lt;H2&gt;Data Sources and Tables&lt;/H2&gt;
&lt;P&gt;The Lakehouse is populated with data from publicly available&amp;nbsp; publications. The table structure follows a dimensional modeling pattern with clear separation between dimension tables (prefixed with dim_) and relationship tables (prefixed with rel_). The following tables form the foundation of our model:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Table Name&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;dim_bank&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Bank profiles including KBMI tier, total assets, CAR, NPL, channeling exposure percentage&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;dim_borrower&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Borrower demographics with credit score, employment type, province, and risk segment&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;dim_p2p_platform&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Licensed P2P lending operators with TWP90 rate, outstanding balance, and total borrowers&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;dim_loan&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Individual loan records with amount, tenure, interest rate, and repayment status&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;dim_supervisor_team&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;supervisory teams and their regional assignments&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;dim_channeling_agreement&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Bank to P2P channeling contracts and exposure limits&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In addition to dimension tables, several relationship tables capture the connections between entities. These include rel_bank_channels_platform (which bank funds which P2P platform), rel_borrower_takes_loan (linking borrowers to their loans), rel_loan_funded_by_bank (tracing the funding chain), rel_platform_issues_loan (connecting platforms to the loans they originate), and rel_supervisor_oversees_platform and rel_supervisor_oversees_bank (mapping supervisory responsibility).&lt;/P&gt;
&lt;H1&gt;Step 2: Creating the Semantic Model&lt;/H1&gt;
&lt;P&gt;With data in the Lakehouse, the next step is to create a Semantic Model that defines the analytical interface. The Semantic Model is a Power BI construct that organizes your tables into a star schema with proper relationships, hierarchies, and measures. More importantly for our purpose, this Semantic Model will later serve as the blueprint from which we generate our Ontology.&lt;/P&gt;
&lt;H2&gt;Generating the Model from Lakehouse&lt;/H2&gt;
&lt;P&gt;From within the Lakehouse, click on "New semantic model" in the toolbar. A dialog appears allowing you to name your model and select which tables to include. In our case, we select all dimension and relationship tables to ensure the Ontology will have full visibility into the data landscape.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 1. Creating a new Direct Lake semantic model from the P2PLendingLH Lakehouse, selecting dimension and relationship tables for inclusion.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Notice that the dialog shows the workspace name (P2P Lending CrossSector Demo) and provides a searchable list of all available tables. The Direct Lake mode is automatically selected, which means the Semantic Model will query data directly from the Lakehouse parquet files without importing a copy. This is important for our use case because it ensures that when regulator publishes updated monthly statistics and the Lakehouse is refreshed, the Semantic Model and subsequently the Ontology will reflect the latest data.&lt;/P&gt;
&lt;H2&gt;Configuring Relationships and Properties&lt;/H2&gt;
&lt;P&gt;After creation, the Semantic Model opens in the editing view where you can configure relationships, add calculated measures, and define display properties. The model view shows the entity cards with their fields and the lines connecting related tables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 2. The Semantic Model editor showing entity cards for dim_bank and dim_borrower, with relationship lines and the full table listing in the Data panel.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;In the screenshot above, you can see two of the core dimension tables. The dim_bank table contains fields such as bank_id, bank_type, channeling_exposure_pct, channeling_total, name, regulator_team, and total_assets. The dim_borrower table holds borrower_id, credit_score, employment_type, name, province, and risk_segment. The Data panel on the right reveals the complete set of tables available in this model, including all the relationship tables that define the connections between entities.&lt;/P&gt;
&lt;P&gt;At this stage, you should verify that all necessary relationships are correctly established. For example, dim_bank should connect to rel_bank_channels_platform through bank_id, and dim_p2p_platform should connect to rel_platform_issues_loan through platform_id. These relationships are what enable the Ontology to reason across domains in the next step.&lt;/P&gt;
&lt;P&gt;You may also want to add calculated measures at this point, such as a weighted average TWP90 across all platforms funded by a specific bank, or a total channeling exposure as a percentage of the bank's total assets. These measures will be carried forward into the Ontology and can be used by AI agents for natural language querying.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Step 3: Generating the Ontology&lt;/H1&gt;
&lt;P&gt;This is the step where the magic of Fabric IQ truly comes alive. The Ontology transforms your Semantic Model from a reporting layer into an intelligence layer. While the Semantic Model answers the question "what does the data look like," the Ontology answers the question "what does the data mean."&lt;/P&gt;
&lt;H2&gt;What the Ontology Does&lt;/H2&gt;
&lt;P&gt;An Ontology in Fabric IQ is a machine understandable vocabulary of your business. It consists of entity types (the things in your environment, such as Bank, Borrower, or P2P Platform), properties (the facts about those entities, such as a bank's NPL ratio or a platform's TWP90 rate), and relationships (the ways entities connect, such as a Bank channels funding to a P2P Platform). Beyond static modeling, the Ontology also supports rules and constraints that can trigger automated actions when business conditions are met.&lt;/P&gt;
&lt;H2&gt;Generating from the Semantic Model&lt;/H2&gt;
&lt;P&gt;To create the Ontology, open your Semantic Model and look for the "Generate Ontology" button in the toolbar. Clicking it opens the generation dialog, which presents three key value propositions:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Unify models into a semantic layer &lt;/STRONG&gt;allows you to align concepts across domains and modeling paradigms, bringing banking data and P2P lending data into a shared vocabulary.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Model expressively &lt;/STRONG&gt;enables you to capture complex relationships, domain specific rules, and actions that drive business workflows, such as triggering an alert when a P2P platform's TWP90 crosses the 5 percent regulatory threshold.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Reason over events and temporal patterns &lt;/STRONG&gt;means that the Ontology can use sequences and trends to inform decisions and automation, such as detecting three consecutive months of TWP90 deterioration.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 3. The Ontology generation dialog, creating a new Ontology named NewP2P from the existing Semantic Model within the P2P Lending CrossSector Demo workspace.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;In the dialog, you specify the workspace (P2P Lending CrossSector Demo) and give your Ontology a name (in this example, NewP2P). After clicking Create, Fabric IQ analyzes the Semantic Model's structure, identifies entity types from dimension tables, infers relationships from the foreign key connections, and generates a navigable graph that represents your business domain.&lt;/P&gt;
&lt;H2&gt;Enriching the Ontology with Rules&lt;/H2&gt;
&lt;P&gt;Once the Ontology is generated, you can enrich it with business rules that reflect regulatory requirements. For the P2P lending use case, the following rules are particularly relevant:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Rule Name&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Condition&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Action&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Elevated TWP90&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;P2P Platform TWP90 exceeds 5 percent&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Flag platform as high risk and alert PVML supervisor&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Contagion Risk&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Bank channeling exposure to flagged P2P platform exceeds 10 percent of portfolio&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Alert Banking supervisor and recommend joint examination&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Youth Overleveraged&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Borrowers aged 19 to 34 represent more than 60 percent of a platform's portfolio AND TWP90 is above average&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Trigger consumer protection review and education program allocation&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;CAR Threshold&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Bank CAR drops below 10 percent while having active P2P channeling agreements&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Escalate to Kepala Eksekutif Pengawas Perbankan&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;These rules integrate with Fabric Activator, enabling the Ontology to automatically initiate business processes through alerts and automated actions. This means that when new monthly P2P statistics are ingested and a platform's TWP90 crosses the threshold, the system does not wait for an analyst to discover it manually. The rule fires, the alert is sent, and the supervisory workflow begins.&lt;/P&gt;
&lt;H2&gt;Querying with Natural Language&lt;/H2&gt;
&lt;P&gt;One of the most powerful capabilities enabled by the Ontology is the ability to query across domains using natural language through a Data Agent. Because the Ontology defines the business vocabulary and binds it to real data, a supervisor can ask questions like:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;"Which banks have channeling agreements with P2P platforms whose TWP90 is currently above 5 percent, and what is their total exposure?"&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The Data Agent resolves this query by traversing the Ontology graph: from the Bank entity through the channels_funding_to relationship to P2P Platform, filtering by the TWP90 property, and aggregating the channeling_total measure.&lt;/P&gt;
&lt;H1&gt;Step 4: Setting Up Planning Sheets&lt;/H1&gt;
&lt;P&gt;While the Ontology tells you what is happening in your business right now, the Plan item in Fabric IQ helps you decide what should happen next. Planning in Fabric IQ brings budgeting, forecasting, and scenario modeling directly into the same environment where your data lives, eliminating the disconnect between analytical insights and forward looking decisions.&lt;/P&gt;
&lt;H2&gt;Creating a Planning Sheet&lt;/H2&gt;
&lt;P&gt;To create a Plan, navigate to your workspace and select New Item followed by Plan (preview). After naming the plan and connecting it to your Semantic Model, you can begin building Planning sheets that pull dimensions and measures directly from the same data that powers your Ontology.&lt;/P&gt;
&lt;P&gt;In the screenshot below, we see a Planning sheet named "Planning P2P" that presents a tabular view of all P2P lending platforms alongside their key risk metrics.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 4. The Planning sheet showing P2P lending platforms with their TWP90 rates, total outstanding balances (in trillions of Rupiah), total borrower counts (in thousands), and risk categories.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The Planning sheet is structured with the platform name and risk_category as row dimensions, and three critical measures as values: Sum of twp90_rate, Sum of total_outstanding (displayed in trillions of Rupiah), and Sum of total_borrowers (displayed in thousands). The risk_category column provides an immediate visual classification of each platform's health status, with categories such as Elevated and Very High clearly indicating where supervisory attention should be directed.&lt;/P&gt;
&lt;P&gt;Looking at the data, several insights emerge immediately. DanaBijak and DanaCepat both carry a Very High risk category, with TWP90 rates of 18.77 and 17.79 respectively. CashWagon ID shows an Elevated risk designation despite a comparatively modest TWP90 of 8.26, likely due to its substantial outstanding balance of 144.97 thousand borrowers. The aggregate row at the top reveals the industry total: a combined TWP90 of 365.38 (this is a sum across all platforms), total outstanding of 29.86 trillion Rupiah, and 7,281.55 thousand borrowers across the monitored universe.&lt;/P&gt;
&lt;H2&gt;Using Planning for Supervisory Resource Allocation&lt;/H2&gt;
&lt;P&gt;The real power of the Planning sheet becomes apparent when supervisors begin using it for forward looking decisions. Consider the following scenarios that can be modeled directly within the Planning interface:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Enforcement Forecasting: &lt;/STRONG&gt;Based on the current data showing multiple platforms in the Very High risk category, supervisors can forecast the expected volume of warning letters and administrative sanctions for the coming quarter. If historical patterns show that each Very High platform typically receives two to three rounds of correspondence before resolution, the planning sheet can project staffing requirements for the enforcement team.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Budget Allocation: &lt;/STRONG&gt;The Planning sheet can incorporate budget dimensions alongside risk metrics. If the current quarterly examination budget allows for on site visits to 15 platforms, the risk category column helps prioritize which platforms should be visited first. The forecast capability can then project whether the budget is sufficient given the current risk trajectory, or whether a reallocation request should be submitted.&lt;/P&gt;</description>
      <pubDate>Sun, 19 Apr 2026 15:06:24 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/step-by-step-guide-to-ontology-and-plan-for-financial-service/ba-p/4512708</guid>
      <dc:creator>NaufalPrawironegoro</dc:creator>
      <dc:date>2026-04-19T15:06:24Z</dc:date>
    </item>
    <item>
      <title>Microsoft Fabric Operations Agent Step by Step Walkthrough</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/microsoft-fabric-operations-agent-step-by-step-walkthrough/ba-p/4512572</link>
      <description>&lt;H2&gt;Fabric Capacity and Workspace&lt;/H2&gt;
&lt;P&gt;You need a Microsoft Fabric workspace backed by a paid capacity. Trial capacities are not supported for Operations Agent. Your capacity must be provisioned in a supported region. As of April 2026, Operations Agent is available in all Microsoft Fabric regions except South Central US and East US. If your capacity is outside the US or EU, you will also need to enable cross geo processing and storage for AI through the tenant settings.&lt;/P&gt;
&lt;P&gt;Your workspace must contain an Eventhouse with at least one KQL database. The Eventhouse is the telemetry backbone, and the KQL database holds the tables the agent will monitor. In the screenshot below, you can see a workspace named OperationAgent-WS that contains an Eventhouse (ops_eventhouse), two KQL databases (ops_db and ops_eventhouse), and a Lakehouse (ops_lakehouse). This is the environment used throughout this guide.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 1. Workspace contents showing the Eventhouse, KQL databases, and Lakehouse ready for the Operations Agent.&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;Enabling the Operations Agent in the Admin Portal&lt;/H2&gt;
&lt;P&gt;A Fabric administrator must enable the Operations Agent preview toggle in the Admin Portal before anyone in the organization can create an agent. Navigate to the Admin Portal, locate the section for Real Time Intelligence, and find the setting labeled Enable Operations Agents (Preview). Toggle it to Enabled for the entire organization or for specific security groups depending on your governance requirements.&lt;/P&gt;
&lt;P&gt;In addition to this toggle, ensure that Microsoft Copilot and Azure OpenAI Service are also enabled at the tenant level. The Operations Agent relies on Azure OpenAI to generate its playbook and to reason about data when conditions are met.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 2. The Admin Portal showing the Enable Operations Agents (Preview) toggle set to Enabled for the entire organization.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Note that messages sent to Operations Agents are processed through the Azure AI Bot Service. If your capacity is outside the EU Data Boundary, data may be processed outside your geographic or national cloud boundary. Be sure to communicate this to your compliance stakeholders before enabling the feature in production tenants.&lt;/P&gt;
&lt;H2&gt;Microsoft Teams Account&lt;/H2&gt;
&lt;P&gt;Every person who will receive recommendations from the agent must have a Microsoft Teams account. The Operations Agent delivers its findings and action suggestions through a dedicated Teams app called Fabric Operations Agent. You can install this app from the Teams app store by searching for its name. Once installed, the agent will be able to send messages containing data summaries and recommended actions directly to the designated recipients.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Creating and Configuring the Operations Agent&lt;/H1&gt;
&lt;P&gt;With your prerequisites in place, you are ready to create the Operations Agent. The following steps walk you through the entire configuration process using the Fabric portal.&lt;/P&gt;
&lt;H2&gt;Step 1: Create a New Operations Agent&lt;/H2&gt;
&lt;P&gt;Open the Microsoft Fabric portal and navigate to your workspace. On the Fabric home page, select the ellipsis icon and then select Create. In the Create pane, scroll to the Real Time Intelligence section and select Operations Agent. A dialog will appear asking you to name your agent and select the target workspace. Choose a descriptive name that reflects the agent’s purpose. In this guide, the agent is named OperationsAgent_1 and is deployed to the OperationAgent-WS workspace.&lt;/P&gt;
&lt;H2&gt;Step 2: Define Business Goals and Agent Instructions&lt;/H2&gt;
&lt;P&gt;Once the agent is created, you are taken to the Agent Setup page. This page is divided into two halves. On the left side, you configure the agent’s behavior. On the right side, you see the generated Agent Playbook after saving.&lt;/P&gt;
&lt;P&gt;The first field is Business Goals, where you describe the high level objective the agent should accomplish. Write this in clear, outcome oriented language. In this demo, the business goal is set to:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;“Monitor data pipeline execution and alert on failures.”&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The second field is Agent Instructions, where you provide more specific guidance on how the agent should reason about the data. Think of this as a brief you would hand to an analyst who will be watching your systems overnight. Be explicit about the table name, the column to watch, and the condition that constitutes an alert. In this demo, the instruction reads:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;“Monitor pipeline_runs table. Alert when status is failed.”&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Together, the business goals and instructions give the underlying large language model enough context to generate an accurate playbook. The more specific your instructions, the more reliable the agent’s behavior will be.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 3. The Agent Setup page showing business goals, agent instructions, and the generated playbook on the right.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;On the right side of the screen, you can see the Agent Playbook that was generated after saving. The playbook includes a Business Term Glossary, which shows the business objects the agent inferred from your goals and data. In this case, it identified an object called PipelineRun, mapped to the pipeline_runs table, with two properties: status (the pipeline run status from the status column) and runId (the unique identifier from the run_id column). It also displays the Rules section, which contains the conditions the agent will evaluate.&lt;/P&gt;
&lt;P&gt;Review the playbook carefully. Since it is generated by an AI model, there may be occasional misinterpretations. Verify that every property maps to the correct column and that the rules reflect your intended thresholds. If something is off, update your goals or instructions and save again to regenerate the playbook.&lt;/P&gt;
&lt;H2&gt;Step 3: Add a Knowledge Source&lt;/H2&gt;
&lt;P&gt;Scroll down on the Agent Setup page to find the Knowledge section. This is where you connect the agent to the data it will monitor. When you first open this section, it will display a message indicating that no knowledge source has been added yet.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 4. The Knowledge section before any data source has been added.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Select the Add Data button to browse the available data sources. A panel will appear listing the KQL databases and Eventhouses accessible within your Fabric environment. In this demo, three sources are available: ops_db in the OperationAgent-WS workspace, wms_eventhouse in the WMS-CDC-Demo workspace, and ops_eventhouse in the OperationAgent-WS workspace. Select the database that contains the table you want the agent to monitor. For this guide, select ops_db, which holds the pipeline_runs table referenced in the agent instructions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 5. Selecting the knowledge source from available KQL databases and Eventhouses.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Once the knowledge source is connected, the agent will be able to query this database at regular intervals (approximately every five minutes) to evaluate its rules. Make sure the table in your selected database is actively receiving data, especially if you plan to demonstrate the agent detecting a condition in real time.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Step 4: Define Actions&lt;/H2&gt;
&lt;P&gt;Actions are the responses the agent can recommend when it detects a condition that matches its rules. Scroll further down the Agent Setup page to find the Actions section. Select the Add Action button to define a new custom action.&lt;/P&gt;
&lt;P&gt;A dialog titled New Custom Action will appear. It has three fields. The Action Name is a short, descriptive label for the action. The Action Description explains the purpose of the action and gives the agent context about when to use it. The Parameters section allows you to define input fields that pass dynamic values (such as names, dates, or identifiers) into the Power Automate flow that will be triggered.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 6. The New Custom Action dialog where you define the action name, description, and optional parameters.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;In this demo, the action is named Send Email Alert with a description indicating that it should send an email notification when a pipeline failure is detected. Once created, you can see the action listed in the Actions section with a green status indicator showing that the action is successfully connected.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 7. The Actions section showing the Send Email Alert action with a connected status.&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;Step 5: Configure the Custom Action with Power Automate&lt;/H2&gt;
&lt;P&gt;After creating the action, you need to configure it by linking it to an activator item and a Power Automate flow. Select the action you just created to open the Configure Custom Action pane.&lt;/P&gt;
&lt;P&gt;In this pane, you will see several fields. First, select the Workspace where the activator item resides. In this demo, the workspace is OperationAgent-WS. Next, select the Activator, which is the Fabric item that bridges the Operations Agent and Power Automate. Here, the activator is named Email_Alert_Activator.&lt;/P&gt;
&lt;P&gt;Once the connection is created, a Connection String is generated. This string is a unique identifier that links the Operations Agent to the Power Automate flow. Select the Copy button to copy this connection string to your clipboard. You will need it in the next step.&lt;/P&gt;
&lt;P&gt;Below the connection string, you will find the Open Flow Builder button. Select this to launch the Power Automate flow designer where you will build the email notification flow.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 8. The Configure Custom Action pane showing the workspace, activator, connection string, and the button to open the flow builder.&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;Step 6: Build the Power Automate Flow&lt;/H2&gt;
&lt;P&gt;When you select Open Flow Builder, a new browser tab opens with the Power Automate designer. The flow is pre-configured with a trigger called When an Activator Rule is Triggered. This trigger fires whenever the Operations Agent approves an action.&lt;/P&gt;
&lt;P&gt;In the Parameters tab of the trigger, you will see a field labeled Connection String. Paste the connection string you copied from the previous step into this field. This is the critical link that connects the Power Automate flow back to your Operations Agent. If this string is incorrect or missing, the flow will not fire when the agent recommends the action.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Figure 9. The Power Automate flow builder with the activator trigger and the Connection String field.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Below the trigger, you can add any actions your workflow requires. For an email alert scenario, add an Office 365 Outlook action to send an email to the operations team. You can use dynamic content from the trigger to include details such as the pipeline run ID, the failure status, and any parameters passed through from the Operations Agent.&lt;/P&gt;
&lt;P&gt;Save the flow and return to the Fabric portal. Your action is now fully configured and ready to be triggered by the agent.&lt;/P&gt;
&lt;H2&gt;Step 7: Generate the Playbook and Start the Agent&lt;/H2&gt;
&lt;P&gt;With all configuration complete (business goals, instructions, knowledge source, and actions), select Save on the Agent Setup page. Fabric will use the underlying large language model to generate the agent’s playbook. The playbook is a structured summary of everything the agent knows: its goals, the properties it monitors, and the rules it evaluates.&lt;/P&gt;
&lt;P&gt;You can also select Generate Playbook at the top of the page to regenerate the playbook if you have made changes. Review the playbook one final time to confirm that properties map correctly to your table columns and that rules reflect the exact conditions you want to monitor.&lt;/P&gt;
&lt;P&gt;When you are satisfied, select Start in the toolbar at the top of the page. The agent will begin actively monitoring your data. It queries the knowledge source approximately every five minutes, evaluating the playbook rules against the latest data. If a condition is met, the agent uses the LLM to summarize the data, generate a recommendation, and send a message to the designated recipients through Microsoft Teams.&lt;/P&gt;
&lt;P&gt;To pause the agent at any time, select Stop. This is useful during demos when you want to control the timing of the demonstration.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;How the Agent Operates at Runtime&lt;/H1&gt;
&lt;P&gt;Once started, the Operations Agent follows a continuous loop. Every five minutes, it queries the connected KQL database to evaluate the rules defined in the playbook. If no conditions are met, it continues silently. If a condition is matched (for example, a pipeline run with a status of "failed" appears in the pipeline_runs table), the agent proceeds through the following sequence.&lt;/P&gt;
&lt;P&gt;First, the agent uses the large language model to analyze the data that triggered the condition. It summarizes the context, identifies the relevant business object (such as a specific pipeline run), and determines which action to recommend.&lt;/P&gt;
&lt;P&gt;Second, the agent sends a message to the designated recipients through Microsoft Teams. This message contains a summary of the detected insight, the data context that triggered it, and a suggested action. Recipients can approve the action by selecting Yes or reject it by selecting No. If parameters are included (such as a run ID or a severity level), they can be reviewed and adjusted before final approval.&lt;/P&gt;
&lt;P&gt;Third, if the recipient approves the action, the agent executes it on behalf of the creator using the creator’s credentials. In this demo, approving the action would trigger the Power Automate flow that sends an email alert.&lt;/P&gt;
&lt;P&gt;It is important to note that if a recommendation is not responded to within three days, the operation is automatically canceled. After cancellation, the action can no longer be approved or interacted with.&lt;/P&gt;</description>
      <pubDate>Sat, 18 Apr 2026 07:00:41 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/microsoft-fabric-operations-agent-step-by-step-walkthrough/ba-p/4512572</guid>
      <dc:creator>NaufalPrawironegoro</dc:creator>
      <dc:date>2026-04-18T07:00:41Z</dc:date>
    </item>
    <item>
      <title>Azure Managed Redis &amp; Azure Databricks: Real-time Feature Serving for Low-Latency Decisions</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/azure-managed-redis-azure-databricks-real-time-feature-serving/ba-p/4503116</link>
      <description>&lt;H5&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt;This blog content has been a collective collaboration between the Azure Databricks and Azure Managed Redis Product and Product Marketing teams.&lt;/SPAN&gt;&lt;/EM&gt;&lt;/H5&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Executive summary&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Modern decisioning systems,&amp;nbsp;fraud scoring, payments authorization, personalization, and step-up authentication,&amp;nbsp;must return answers in tens of milliseconds while still reflecting the most recent behavior. That creates a classic tension:&amp;nbsp;lakehouse&amp;nbsp;platforms excel at large-scale ingestion, feature engineering, governance, training, and&amp;nbsp;replayable&amp;nbsp;history, but they are not designed to sit directly on the synchronous request path for high-QPS, ultra-low-latency lookups. This guide shows&amp;nbsp;a&amp;nbsp;pattern that keeps Azure Databricks as the&amp;nbsp;primary&amp;nbsp;system&amp;nbsp;for building and&amp;nbsp;maintaining&amp;nbsp;features, while using Azure Managed Redis as the online speed layer that serves those features at memory speed for real-time scoring.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The result is a shorter and more predictable critical path for your application: the Payment API (or any online service) reads features from Azure Managed Redis and calls a model endpoint; Azure Databricks continuously refreshes features from streaming and batch sources; and your authoritative systems of record (for example, account/card data) remain durable and governed. You get real-time responsiveness without giving up data correctness, lineage, or operational discipline.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;What each service does&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Azure Databricks&lt;/STRONG&gt; is a first-party analytics and AI&amp;nbsp;platform on Azure&amp;nbsp;built&amp;nbsp;on&amp;nbsp;Apache Spark and the&amp;nbsp;lakehouse&amp;nbsp;&amp;nbsp;architecture. It is commonly used for&amp;nbsp;batch&amp;nbsp;and streaming pipelines, feature engineering, model training, governance, and operationalization of ML workflows. In this architecture,&amp;nbsp;Azure&amp;nbsp;Databricks is&amp;nbsp;the primary&amp;nbsp;data&amp;nbsp;and AI&amp;nbsp;platform&amp;nbsp;environment&amp;nbsp;where features are defined, computed,&amp;nbsp;validated, published,&amp;nbsp;as&amp;nbsp;well&amp;nbsp;as&amp;nbsp;where&amp;nbsp;governed history is&amp;nbsp;retained.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Azure Managed Redis&lt;/STRONG&gt; is a Microsoft‑managed, in‑memory data store based on Redis Enterprise, designed for low‑latency, high‑throughput access patterns. It is commonly used for traditional and real‑time caching, counters, and session state, and increasingly as a fast state layer for AI‑driven applications. In this architecture, Azure Managed Redis serves as the online feature store and speed layer: it holds the most recent feature values and signals required for real‑time scoring and can also support modern agentic patterns such as short‑ and long‑term memory, vector lookups, and fast state access alongside model inference.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;Business story: real-time fraud scoring as a running example&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Consider a payment system that must decide&amp;nbsp;to approve, decline, or step-up authentication in tens of milliseconds—faster than a blink of an eye!&amp;nbsp;The decision depends on recent behavioral signals,&amp;nbsp;velocity counters, device changes, geo anomalies, and merchant patterns,&amp;nbsp;combined with a fraud model. If the online service tries to compute or retrieve those features from heavy analytics systems on-demand, the request path becomes slower and more variable, especially at peak load. Instead,&amp;nbsp;Azure&amp;nbsp;Databricks pipelines continuously compute and refresh those features, and Azure Managed Redis serves them instantly to the scoring service.&amp;nbsp;Behavioral history, profiles, and outcomes are still written to durable Azure datastores such as Delta tables,&amp;nbsp;and Azure Cosmos&amp;nbsp;DB&amp;nbsp;so fraud models can be retrained with governed,&amp;nbsp;reproducible&amp;nbsp;data.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;The pattern: online feature serving with a speed layer&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The core idea is to separate responsibilities.&amp;nbsp;Azure&amp;nbsp;Databricks owns “building” features,&amp;nbsp;ingest, join, aggregate, compute windows, and publish validated&amp;nbsp;governed&amp;nbsp;results. Azure Managed Redis owns “serving” features,&amp;nbsp;fast, repeated key-based access on the hot path. The model endpoint then consumes a feature payload that is already pre-shaped for inference. This division prevents the&amp;nbsp;lakehouse&amp;nbsp;from becoming an online dependency and lets you scale online decisioning independently from offline compute.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="auto"&gt;Pseudocode: end-to-end flow (online scoring + feature refresh)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The pseudocode below intentionally&amp;nbsp;reads like&amp;nbsp;application logic rather than a single SDK. It highlights what matters: key design, pipelined feature reads, conservative fallbacks, and continuous refresh from&amp;nbsp;Azure&amp;nbsp;Databricks.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;# ---------------------------- 

# Online scoring (critical path) 

# ---------------------------- 

function handleAuthorization(req): 

  schemaV = "v3" 

  keys = buildFeatureKeys(schemaV, req)            # card/device/merchant + windows 

 

  feats = redis.MGET(keys)                         # single round trip (pipelined) 

  feats = fillDefaults(feats)                      # conservative, no blocking 

 

  payload = toModelPayload(req, feats) 

    score = modelEndpoint.predict(payload)         # Databricks Model Serving or an Azure-hosted model endpoint

 

  decision = policy(score, req)                    # approve/decline/step-up 

 

  emitEventHub("txn_events", summarize(req, score, decision))   # async 

  emitMetrics(redisLatencyMs, modelLatencyMs, missCount(feats)) 

 

  return decision 

 

 

# ----------------------------------------- 

# Feature pipeline (async): build + publish 

# ----------------------------------------- 

function streamingFeaturePipeline(): 

  events = readEventHubs("txn_events") 

  ref   = readCosmos("account_card_reference")     # system of record lookups 

 

  feats = computeFeatures(events, ref)             # windows, counters, signals 

  writeDelta("fraud_feature_history", feats)       # ADLS Delta tables (lakehouse) 

 

  publishLatestToRedis(feats, schemaV="v3")        # SET/HSET + TTL (+ jitter) 

 

 

# ----------------------------------- 

# Training + deploy (async lifecycle) 

# ----------------------------------- 

function trainAndDeploy(): 

  hist   = readDelta("fraud_feature_history") 

  labels = readCosmos("fraud_outcomes")            # delayed ground truth 

 

  model = train(joinPointInTime(hist, labels)) 

  register(model) 

  deployToDatabricksModelServing(model) &lt;/LI-CODE&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;Why it works&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This architecture works because each layer does the job it is best at. The lakehouse and feature pipelines handle heavy computation, validation, lineage, and re-playable history. The online speed layer handles locality and frequency: it keeps the “hot” feature state close to the online compute so requests do not pay the cost of re-computation or large fan-out reads. You explicitly control freshness with TTLs and refresh cadence, and you keep clear correctness boundaries by treating Azure Managed Redis as a serving layer rather than the authoritative system of record,&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;with durable, governed feature history and labels stored in Delta tables and Azure data stores such as Azure Cosmos DB.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-contrast="auto"&gt;Design choices that matter&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Cost efficiency and availability start with clear separation of concerns. Serving hot features from Azure Managed Redis avoids sizing analytics infrastructure for high‑QPS, low‑latency SLAs, and enables predictable capacity planning with regional isolation for online services. Azure Databricks remains optimized for correctness, freshness, and re-playable history while the online tier scales independently by request rate and working set size.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Freshness and TTLs should reflect business tolerance for staleness and the meaning of each feature. Short velocity windows need TTLs slightly longer than ingestion gaps, while profiles and reference features can live longer. Adding jitter (for example ±10%) prevents synchronized expirations that create load spikes.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Key design is the control plane for safe evolution and availability. Include explicit schema version prefixes and keep keys stable by entity and window. Publish new versions alongside existing ones, switch readers, and retire old versions to enable zero‑downtime rollouts.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Protect the online path from stampedes and unnecessary cost. If a hot key is missing, avoid triggering widespread re-computation in downstream systems. Use a short single‑flight mechanism and conservative defaults, especially for risk‑sensitive decisions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Keep payloads compact so performance and cost remain predictable. Online feature reads are fastest when values are small and fetched in one or two round trips. Favor numeric encodings and small blobs, and use atomic writes to avoid partial or inconsistent reads during scoring.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN data-contrast="auto"&gt;Reference architecture notes (regional first, then global)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Start with a single-region deployment to&amp;nbsp;validate&amp;nbsp;end-to-end freshness and latency. Co-locate the Payment API compute, Azure Managed Redis, the model endpoint, and the primary data sources for feature pipelines to minimize round trips. Once the pattern is proven, extend to multi-region by deploying the online tier and its local speed layer per region, while keeping a clear strategy for how features are published and reconciled across regions (often via regional pipelines that consume the same event stream or replicated event hubs).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;Operations and SRE considerations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Layer&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What to Monitor&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why It Matters&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Typical Signals / Metrics&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Online service (API / scoring)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;End‑to‑end request latency, error rate, fallback rate&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Confirms the critical path meets application SLAs even under partial degradation&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;p50/p95/p99 latency, error %, step‑up or conservative decision rate&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Azure Managed Redis (speed layer)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Feature fetch latency, hit/miss ratio, memory pressure&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Indicates whether the working set fits and whether TTLs align with access patterns&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;GET/MGET latency, miss %, evictions, memory usage&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Model serving&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Inference latency, throughput, saturation&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Separates model execution cost from feature access cost&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Inference p95 latency, QPS, concurrency&amp;nbsp;utilization&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Azure&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Databricks feature pipelines&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Streaming lag, job health, data freshness&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Ensures features are being refreshed on time and correctness is preserved&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Event lag, job failures, watermark delay&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cross‑layer boundaries&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Correlation between misses, latency spikes, and pipeline lag&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Helps&amp;nbsp;identify&amp;nbsp;whether regressions originate in serving, pipelines, or models&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Redis miss spikes vs pipeline delays vs API latency&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Monitor each layer independently, then correlate at the boundaries. This makes it clear whether an SLA issue is caused by online serving pressure, model inference, or delayed feature publication, without turning the lakehouse into a synchronous dependency.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-contrast="auto"&gt;Putting it all together&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Adopt the pattern incrementally. First, publish a small, high-value feature set from&amp;nbsp;Azure&amp;nbsp;Databricks into Azure Managed Redis and wire the online service to fetch those features during scoring. Measure end-to-end impact on latency, model quality, and operational stability. Next, extend to streaming refresh for near-real-time behavioral features, and add controlled fallbacks for partial misses. Finally, scale out to multi-region if needed, keeping each region’s online service close to its local speed layer and ensuring the feature pipelines provide consistent semantics across regions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN data-contrast="auto"&gt;Sources and further reading&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Azure Databricks documentation: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/" target="_blank" rel="noopener"&gt;https://learn.microsoft.com/en-us/azure/databricks/&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Azure Managed Redis documentation (overview and architecture): &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/redis/" target="_blank" rel="noopener"&gt;https://learn.microsoft.com/azure/redis/&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Azure Architecture Center: Stream processing with Azure Databricks: &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/architecture/reference-architectures/data/stream-processing-databricks" target="_blank" rel="noopener"&gt;https://learn.microsoft.com/azure/architecture/reference-architectures/data/stream-processing-databricks&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Databricks Feature Store / feature engineering docs (Azure Databricks): &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/databricks/" target="_blank" rel="noopener"&gt;https://learn.microsoft.com/azure/databricks/&amp;nbsp;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Mar 2026 16:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/azure-managed-redis-azure-databricks-real-time-feature-serving/ba-p/4503116</guid>
      <dc:creator>Jason_Pereira</dc:creator>
      <dc:date>2026-03-25T16:00:00Z</dc:date>
    </item>
    <item>
      <title>Announcing the New Home for the Azure Databricks Blog</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/announcing-the-new-home-for-the-azure-databricks-blog/ba-p/4503570</link>
      <description>&lt;P&gt;&lt;SPAN style="font-style: var(--lia-blog-font-style); font-family: var(--lia-blog-font-family); font-size: var(--lia-bs-font-size-base); -webkit-tap-highlight-color: hsla(var(--lia-bs-black-h),var(--lia-bs-black-s),var(--lia-bs-black-l),0); -webkit-text-size-adjust: 100%;"&gt;We’re excited to share that the Azure Databricks blog has moved to a new address on Microsoft Tech Community Hub!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/category/azure/blog/azure-databricks" data-lia-auto-title="Azure Databricks | Microsoft Community Hub" data-lia-auto-title-active="0" target="_blank"&gt;Azure Databricks | Microsoft Community Hub&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Our new blog home is designed to make it easier than ever for you to discover the latest product updates, deep technical insights, and real-world best practices directly from the Azure Databricks product team. Whether you're a data engineer, data scientist, or analytics leader, this is your go-to destination for staying informed and inspired.&lt;/P&gt;
&lt;H3&gt;What You’ll Find on the New Blog&lt;/H3&gt;
&lt;P&gt;At our new address, you can expect:&lt;/P&gt;
&lt;UL data-spread="false"&gt;
&lt;LI&gt;&lt;STRONG&gt;Latest Announcements&lt;/STRONG&gt; – Stay up to date with new features, capabilities, and releases&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Best Practice Guidance&lt;/STRONG&gt; – Learn proven approaches for building scalable data and AI solutions&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Technical Deep Dives&lt;/STRONG&gt; – Explore detailed walkthroughs and architecture insights&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Customer Stories&lt;/STRONG&gt; – See how organizations are driving impact with Azure Databricks&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Why the Move?&lt;/H3&gt;
&lt;P&gt;This new blog gives us the flexibility to deliver a better reading experience, improved navigation, and richer content dedicated to Azure Databricks. It also allows us to bring you more frequent updates and more in-depth resources tailored to your needs.&lt;/P&gt;
&lt;H3&gt;Stay Connected&lt;/H3&gt;
&lt;P&gt;We encourage you to bookmark the new blog and check back regularly. Even better—follow along so you never miss an update. By staying connected, you’ll be among the first to hear about new features, performance improvements, and expert recommendations to help you get the most out of Azure Databricks.&lt;/P&gt;
&lt;P&gt;👉 Follow the new Azure Databricks blog today and stay ahead with the latest announcements and best practices.&lt;/P&gt;
&lt;P&gt;We’re looking forward to continuing this journey with you—now at our new home!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Check out the latest blogs if you haven’t already:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;• &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/azure-databricks/introducing-lakeflow-connect-free-tier-now-available-on-azure-databricks/4502755" data-lia-auto-title="Introducing Lakeflow Connect Free Tier, now available on Azure Databricks | Microsoft Community Hub" data-lia-auto-title-active="0" target="_blank"&gt;Introducing Lakeflow Connect Free Tier, now available on Azure Databricks | Microsoft Community Hub&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;•&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/azure-databricks/near–real-time-cdc-to-delta-lake-for-bi-and-ml-with-lakeflow-on-azure-databricks/4502750" data-lia-auto-title="Near–Real-Time CDC to Delta Lake for BI and ML with Lakeflow on Azure Databricks | Microsoft Community Hub" data-lia-auto-title-active="0" target="_blank"&gt;Near–Real-Time CDC to Delta Lake for BI and ML with Lakeflow on Azure Databricks | Microsoft Community Hub&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 18 Mar 2026 18:44:42 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/announcing-the-new-home-for-the-azure-databricks-blog/ba-p/4503570</guid>
      <dc:creator>AnaviNahar</dc:creator>
      <dc:date>2026-03-18T18:44:42Z</dc:date>
    </item>
    <item>
      <title>Smart Pipelines Orchestration: Designing Predictable Data Platforms on Shared Spark</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/smart-pipelines-orchestration-designing-predictable-data/ba-p/4491766</link>
      <description>&lt;H2 data-start="668" data-end="683"&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="344" data-end="627"&gt;In mature data platforms, scaling compute is rarely the primary challenge. Shared, elastic Spark pools already provide sufficient processing capacity for most workloads. The harder problem is achieving &lt;STRONG data-start="546" data-end="571"&gt;predictable execution&lt;/STRONG&gt; when multiple pipelines compete for the same resources.&lt;/P&gt;
&lt;P data-start="629" data-end="873"&gt;In Azure Synapse, Spark pools are commonly shared across pipelines to optimize cost and utilization. While this model is efficient, it introduces a key limitation: &lt;STRONG data-start="793" data-end="872"&gt;execution order is determined by scheduling behavior, not business priority&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P data-start="875" data-end="1090"&gt;This post describes an orchestration pattern that makes priority explicit, allowing critical workloads to run predictably on shared Spark compute &lt;STRONG data-start="1021" data-end="1089"&gt;without modifying Spark code, configuration, or cluster capacity&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H2 data-start="1280" data-end="1287"&gt;&lt;STRONG&gt;Goal&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="1289" data-end="1349"&gt;This work does not aim to optimize Spark performance.&lt;BR data-start="2585" data-end="2588" /&gt;Its goal is to ensure that, when pipelines share a Spark pool:&lt;/P&gt;
&lt;UL data-start="1429" data-end="1570"&gt;
&lt;LI data-start="1429" data-end="1468"&gt;latency-sensitive workloads run first&lt;/LI&gt;
&lt;LI data-start="1469" data-end="1518"&gt;heavy backfills do not delay critical pipelines&lt;/LI&gt;
&lt;LI data-start="1519" data-end="1570"&gt;execution order is deterministic under contention&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="1572" data-end="1678"&gt;All of this needed to be achieved without changes to Spark configuration, notebook logic, or cluster size.&lt;/P&gt;
&lt;P data-start="1572" data-end="1678"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-start="1685" data-end="1711"&gt;&lt;STRONG&gt;Why This Problem Occurs&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="1713" data-end="1807"&gt;In a naïve orchestration model, pipelines are triggered in parallel. From Spark’s perspective:&lt;/P&gt;
&lt;UL data-start="1808" data-end="1950"&gt;
&lt;LI data-start="1808" data-end="1833"&gt;all jobs are equivalent&lt;/LI&gt;
&lt;LI data-start="1834" data-end="1890"&gt;all jobs attempt to acquire executors at the same time&lt;/LI&gt;
&lt;LI data-start="1891" data-end="1950"&gt;scheduling decisions are based on availability and timing&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="1952" data-end="2134"&gt;As a result, priority is implicit and often incorrect. A heavy workload may acquire executors before a lightweight but critical one simply because it requests more resources earlier.&lt;/P&gt;
&lt;P data-start="2136" data-end="2222"&gt;This behavior is expected from Spark. The issue lies in orchestration, not in compute.&lt;/P&gt;
&lt;H2 data-start="1271" data-end="1320"&gt;&lt;STRONG&gt;Core Concept: Priority as Execution Ordering&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="2111" data-end="2210"&gt;In shared Spark platforms, priority is enforced through &lt;STRONG data-start="2167" data-end="2189"&gt;execution ordering&lt;/STRONG&gt;, not compute tuning.&lt;/P&gt;
&lt;P data-start="2212" data-end="2358"&gt;The orchestration layer controls &lt;STRONG data-start="2245" data-end="2253"&gt;when&lt;/STRONG&gt; workloads are admitted to shared compute. Once execution begins, Spark processes each workload normally.&lt;/P&gt;
&lt;P data-start="2360" data-end="2451"&gt;This preserves Spark’s execution model while providing &lt;STRONG data-start="2415" data-end="2450"&gt;deterministic workload ordering&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H2 data-start="2622" data-end="2657"&gt;&lt;STRONG&gt;Step 1: Workload Classification&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="2659" data-end="2730"&gt;In the demo presented in this blog, workloads are classified during configuration based on business impact:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 98.9815%; height: 164px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;Category&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;Priority example&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 59px;"&gt;&lt;td style="height: 59px;"&gt;Light (critical)&lt;/td&gt;&lt;td style="height: 59px;"&gt;SLA sensitive dashboard and downstream consumers&lt;/td&gt;&lt;td style="height: 59px;"&gt;High priority , low resource weight(data volume)&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;Medium (High)&lt;/td&gt;&lt;td style="height: 35px;"&gt;Core reporting workloads&lt;/td&gt;&lt;td style="height: 35px;"&gt;Medium priority&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;Heavy(Best Effort)&lt;/td&gt;&lt;td style="height: 35px;"&gt;Backfills and historical computes&amp;nbsp;&lt;/td&gt;&lt;td style="height: 35px;"&gt;Low priority, high resource weight(data volume)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="2947" data-end="3062"&gt;This classification is external to Spark and external to code. It represents business intent, not implementation.&lt;/P&gt;
&lt;P data-start="3069" data-end="3218"&gt;As a future phase, classification can be automated,for example, an agent may adjust priority based on observed failure rates or execution stability.&lt;BR /&gt;Workload classification is expressed as orchestration metadata, for example:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;[
  {"name":"ExecDashboard","pipeline":"PL_Light_ExecDashboard","weight":1,"tier":"Critical"},
  {"name":"FinanceReporting","pipeline":"PL_Medium_FinanceReporting","weight":3,"tier":"High"},
  {"name":"Backfill","pipeline":"PL_Heavy_Backfill","weight":8,"tier":"BestEffort"}
]&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-start="562" data-end="600"&gt;What Runs in Each Workload Category&lt;/H2&gt;
&lt;P data-start="3312" data-end="3452"&gt;All pipelines execute on the same shared Spark pool, but the work they perform differs in scope, data volume, and sensitivity to contention.&lt;/P&gt;
&lt;P data-start="3454" data-end="3749"&gt;&lt;STRONG data-start="3454" data-end="3473"&gt;Light workloads&lt;/STRONG&gt; power SLA-sensitive dashboards and downstream consumers. Their notebooks perform targeted reads with strong filtering, limited joins, and small aggregations. Execution time is short, and overall pipeline duration is dominated by executor availability rather than computation.&lt;/P&gt;
&lt;P data-start="3751" data-end="4011"&gt;&lt;STRONG data-start="3751" data-end="3771"&gt;Medium workloads&lt;/STRONG&gt; represent core reporting and analytics logic. These notebooks process larger datasets, perform joins across multiple sources, and apply aggregations that are more expensive than Light workloads but still time-bounded and business-critical.&lt;/P&gt;
&lt;P data-start="4013" data-end="4349"&gt;&lt;STRONG data-start="4013" data-end="4032"&gt;Heavy workloads&lt;/STRONG&gt; are best-effort pipelines such as backfills and historical recomputation. Their notebooks scan large data volumes, apply expensive transformations, and are optimized for throughput rather than responsiveness. These workloads tolerate delay but place significant pressure on shared compute when admitted concurrently.&lt;/P&gt;
&lt;P data-start="4351" data-end="4520"&gt;All workloads use the &lt;STRONG data-start="4373" data-end="4429"&gt;same Spark pool, executor configuration, and runtime&lt;/STRONG&gt;. The distinction reflects business intent and execution characteristics, not Spark tuning.&lt;/P&gt;
&lt;P data-start="4522" data-end="4610"&gt;Example notebooks for each category are available in the accompanying GitHub repository.&lt;/P&gt;
&lt;H2 data-start="3181" data-end="3223"&gt;&lt;STRONG&gt;Step 2: Naïve Orchestration (Baseline)&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;The following pipeline run illustrates the baseline behavior when all workloads are triggered in parallel against a shared Spark pool.&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="4796" data-end="5008"&gt;All Light, Medium, and Heavy pipelines are admitted concurrently. Executor acquisition and execution order depend on timing rather than business priority, resulting in non-deterministic behavior under contention.&lt;/P&gt;
&lt;P data-start="5010" data-end="5178"&gt;Although Light workloads require minimal compute, they are delayed by executor contention caused by Medium and Heavy pipelines entering the Spark pool at the same time.&lt;/P&gt;
&lt;H2 data-start="3749" data-end="3797"&gt;&lt;STRONG&gt;Step 3: Smart Orchestration (Priority-Aware)&lt;/STRONG&gt;&lt;/H2&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 data-start="5234" data-end="5257"&gt;Orchestration Model&lt;/H3&gt;
&lt;P data-start="5259" data-end="5357"&gt;The same child pipelines and notebooks are reused.&lt;BR data-start="5309" data-end="5312" /&gt;The parent pipeline enforces admission order:&lt;/P&gt;
&lt;OL data-start="5359" data-end="5424"&gt;
&lt;LI data-start="5359" data-end="5380"&gt;Light (Critical)&lt;/LI&gt;
&lt;LI data-start="5381" data-end="5399"&gt;Medium (High)&lt;/LI&gt;
&lt;LI data-start="5400" data-end="5424"&gt;Heavy (Best Effort)&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-start="5426" data-end="5529"&gt;Dependencies control admission to the Spark pool. Parallelism is preserved &lt;STRONG data-start="5501" data-end="5511"&gt;within&lt;/STRONG&gt; a priority class.&lt;/P&gt;
&lt;H3 data-start="5531" data-end="5557"&gt;Effect on Shared Spark&lt;/H3&gt;
&lt;UL data-start="5559" data-end="5766"&gt;
&lt;LI data-start="5559" data-end="5618"&gt;Light workloads enter the Spark pool without contention&lt;/LI&gt;
&lt;LI data-start="5619" data-end="5665"&gt;Medium workloads run after Light completes&lt;/LI&gt;
&lt;LI data-start="5666" data-end="5711"&gt;Heavy workloads are intentionally delayed&lt;/LI&gt;
&lt;LI data-start="5712" data-end="5766"&gt;Executor acquisition aligns with business priority&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="5768" data-end="5931"&gt;Light pipelines execute first and complete before medium pipelines are admitted. Heavy workloads run last by design. No Spark configuration changes are introduced.&lt;/P&gt;
&lt;P data-start="5933" data-end="6060"&gt;The Spark pool, notebooks, and executor configuration are identical to the naïve run. &lt;STRONG data-start="6019" data-end="6059"&gt;Only the orchestration graph differs&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H2 data-start="4313" data-end="4350"&gt;&lt;STRONG&gt;Step 4: Impact on Light Workloads&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="6105" data-end="6234"&gt;Light workloads are particularly sensitive to orchestration because their runtime is dominated by queueing time, not computation.&lt;/P&gt;
&lt;P data-start="6236" data-end="6396"&gt;Comparing the naïve and priority-aware runs shows that Spark execution time is unchanged, but pipeline duration improves due to earlier admission to the Spark pool and immediate executor access&lt;/P&gt;
&lt;H3 data-start="4487" data-end="4506"&gt;Naïve Execution&lt;/H3&gt;
&lt;UL data-start="4507" data-end="4626"&gt;
&lt;LI data-start="4507" data-end="4538"&gt;Spark execution time: short and unchanged&lt;/LI&gt;
&lt;LI data-start="4539" data-end="4584"&gt;Pipeline duration: minutes under contention&lt;/LI&gt;
&lt;LI data-start="4585" data-end="4626"&gt;Delay caused by executor unavailability&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 data-start="4628" data-end="4647"&gt;Smart Execution&lt;/H3&gt;
&lt;UL data-start="4648" data-end="4762"&gt;
&lt;LI data-start="4648" data-end="4681"&gt;Spark execution time: unchanged&lt;/LI&gt;
&lt;LI data-start="4682" data-end="4730"&gt;Pipeline duration closely matches compute time&lt;/LI&gt;
&lt;LI data-start="4731" data-end="4762"&gt;Immediate access to executors&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="4764" data-end="4852"&gt;The improvement comes from removing admission contention, not from increasing resources.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 data-start="4859" data-end="4885"&gt;&lt;STRONG&gt;Results and Performance&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Compared to naïve orchestration, priority-aware orchestration ensures that Light workloads complete in minutes rather than tens of minutes under contention, while Spark execution time itself remains unchanged. Heavy workloads no longer delay latency-sensitive pipelines, and execution order is deterministic across runs. These improvements are achieved solely by controlling admission to the shared Spark pool, without modifying Spark configuration, notebook logic, or cluster capacity.&lt;/P&gt;
&lt;H2 data-start="5551" data-end="5589"&gt;&lt;STRONG&gt;Next Steps:&lt;/STRONG&gt;&lt;/H2&gt;
&lt;H2 data-start="5551" data-end="5589"&gt;&lt;STRONG&gt;1. Optimizing Heavy Workloads&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="7495" data-end="7578"&gt;Once heavy workloads are isolated by priority, they can be optimized independently:&lt;/P&gt;
&lt;UL data-start="7580" data-end="7687"&gt;
&lt;LI data-start="7580" data-end="7604"&gt;retries with backoff&lt;/LI&gt;
&lt;LI data-start="7605" data-end="7641"&gt;tolerance for transient failures&lt;/LI&gt;
&lt;LI data-start="7642" data-end="7687"&gt;increased executor counts or larger pools&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="7689" data-end="7830"&gt;Without admission control, these optimizations increase contention, with smart orchestration, they do not impact critical pipelines.&lt;/P&gt;
&lt;H2 data-start="5917" data-end="5964"&gt;&lt;STRONG&gt;2. Moving Beyond Static Classification&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="7885" data-end="8007"&gt;In this implementation, workload classification is static and configuration-driven, which is sufficient for stabilization.&lt;/P&gt;
&lt;P data-start="8009" data-end="8049"&gt;A next phase is adaptive classification:&lt;/P&gt;
&lt;UL data-start="8051" data-end="8216"&gt;
&lt;LI data-start="8051" data-end="8098"&gt;collect execution metrics and failure rates&lt;/LI&gt;
&lt;LI data-start="8099" data-end="8128"&gt;detect unstable pipelines&lt;/LI&gt;
&lt;LI data-start="8129" data-end="8216"&gt;reclassify pipelines that exceed thresholds (e.g., &amp;gt;20% failures in a rolling window)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="8218" data-end="8291"&gt;This prevents unstable workloads from impacting critical execution paths and makes the pipeline reliable with minimal maintenance.&lt;/P&gt;
&lt;H2 data-start="6388" data-end="6436"&gt;&lt;STRONG&gt;3. Assisted Classification with Copilot agent&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="8402" data-end="8602"&gt;At scale, priority decisions benefit from automation. A Copilot-style agent can use historical execution data to recommend classification changes, grounding decisions in observed behavior while keeping engineers in control.&lt;/P&gt;
&lt;H3 data-start="134" data-end="188"&gt;Example: Changing workload classification from Light to Medium&lt;/H3&gt;
&lt;P data-start="190" data-end="348"&gt;Consider a pipeline initially classified as &lt;STRONG data-start="234" data-end="243"&gt;Light&lt;/STRONG&gt; because it powers an SLA-sensitive dashboard and typically executes quickly with minimal resource usage.&lt;/P&gt;
&lt;P data-start="350" data-end="408"&gt;Over time, execution telemetry shows a change in behavior:&lt;/P&gt;
&lt;UL data-start="410" data-end="620"&gt;
&lt;LI data-start="410" data-end="489"&gt;The pipeline fails in &lt;STRONG data-start="434" data-end="459"&gt;4 of the last 10 runs&lt;/STRONG&gt; due to transient Spark errors&lt;/LI&gt;
&lt;LI data-start="490" data-end="558"&gt;Average duration has increased by &lt;STRONG data-start="526" data-end="532"&gt;3×&lt;/STRONG&gt;, even when admitted early&lt;/LI&gt;
&lt;LI data-start="559" data-end="620"&gt;Retry attempts amplify contention for other Light workloads&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="622" data-end="757"&gt;Based on these signals, an automated agent flags the workload as unstable and recommends reclassifying it from &lt;STRONG data-start="733" data-end="742"&gt;Light&lt;/STRONG&gt; to &lt;STRONG data-start="746" data-end="756"&gt;Medium&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P data-start="759" data-end="782"&gt;After reclassification:&lt;/P&gt;
&lt;UL data-start="784" data-end="1010"&gt;
&lt;LI data-start="784" data-end="859"&gt;The pipeline is admitted after Light workloads but before Heavy workloads&lt;/LI&gt;
&lt;LI data-start="860" data-end="923"&gt;It no longer blocks latency-critical paths when retries occur&lt;/LI&gt;
&lt;LI data-start="924" data-end="1010"&gt;Execution remains predictable, while instability is isolated from critical workloads&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="1012" data-end="1154"&gt;The notebook logic and Spark configuration remain unchanged, only the workload’s &lt;STRONG data-start="1093" data-end="1115"&gt;admission priority&lt;/STRONG&gt; is updated via orchestration metadata.&lt;/P&gt;
&lt;P data-start="1156" data-end="1300"&gt;This approach allows the platform to adapt to changing workload characteristics while preserving deterministic execution for critical pipelines.&lt;/P&gt;
&lt;H2 data-start="7080" data-end="7093"&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="886" data-end="1056"&gt;Parallel execution is a default, not a strategy. In shared environments, orchestration must explicitly encode business intent rather than relying on scheduler behavior.&lt;/P&gt;
&lt;P data-start="1063" data-end="1248"&gt;Enforcing priority at the orchestration layer restores predictability without sacrificing efficiency and provides a foundation for adaptive, policy-driven execution as platforms evolve.&lt;/P&gt;
&lt;H2 data-start="7223" data-end="7452"&gt;&lt;STRONG&gt;Links&lt;BR /&gt;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/training/modules/orchestrate-data-movement-transformation-azure-data-factory/" target="_blank" rel="noopener"&gt;Orchestrating data movement and transformation in Azure Data Factory - Training | Microsoft Learn&lt;/A&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;A href="https://www.sparkcodehub.com/spark/performance/optimize-jobs" target="_blank" rel="noopener"&gt;How to Optimize Spark Jobs for Maximum Performance: A Complete Guide&lt;/A&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;GitHub repo for notebook reference:&amp;nbsp;&lt;A href="https://github.com/sallydabbahmsft/Smart-pipelines-orchestration" target="_blank" rel="noopener"&gt;sallydabbahmsft/Smart-pipelines-orchestration&lt;/A&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Feedback: &lt;A href="https://www.linkedin.com/in/sally-dabbah/" target="_blank" rel="noopener"&gt;Sally Dabbah | LinkedIn&lt;/A&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Sun, 08 Feb 2026 09:21:51 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/smart-pipelines-orchestration-designing-predictable-data/ba-p/4491766</guid>
      <dc:creator>Sally_Dabbah</dc:creator>
      <dc:date>2026-02-08T09:21:51Z</dc:date>
    </item>
    <item>
      <title>Building a Reliable Real Time Data Pipeline
with Microsoft Fabric</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/building-a-reliable-real-time-data-pipeline-with-microsoft/ba-p/4489534</link>
      <description>&lt;H1&gt;The Two Pillars That Determine Success&lt;/H1&gt;
&lt;H2&gt;Data Quality Cannot Be an Afterthought&lt;/H2&gt;
&lt;P&gt;The most common mistake we see is treating data quality as something to address after the pipeline is running. This approach creates technical debt that compounds over time and erodes trust in your data.&lt;/P&gt;
&lt;P&gt;Your CDC pipeline will ingest millions of events daily. Without proper validation at each layer, small issues become major problems. A single source system changing a column from integer to string can silently corrupt downstream analytics for days before anyone notices.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What you need to implement from day one:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Validation at the Bronze layer should focus on structural integrity. Every record landing in your raw layer needs verification that required fields exist, timestamps are valid, and CDC operation types are recognized.&lt;/LI&gt;
&lt;LI&gt;The Silver layer is where business validation happens. Here you check referential integrity, apply domain specific rules, and flag anomalies. A customer ID that does not exist in your customer master table needs to be caught here.&lt;/LI&gt;
&lt;LI&gt;Schema drift detection deserves special attention. Source systems change without warning. Your pipeline needs to detect these changes before they break downstream processes.&lt;/LI&gt;
&lt;LI&gt;The quality score approach works well in practice. Rather than binary pass or fail checks, calculate a quality score for each batch. A score above 95 percent proceeds normally. Between 90 and 95 percent sends a warning. Below 90 percent halts processing.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Replication Lag Requires Active Management&lt;/H2&gt;
&lt;P&gt;The second pillar is understanding and managing replication lag. In a real time pipeline, the value of data degrades rapidly with age. A five minute delay might be acceptable for daily reporting but catastrophic for fraud detection or inventory management.&lt;/P&gt;
&lt;P&gt;Lag accumulates at multiple points in your pipeline. There is capture lag between when a change occurs in the source database and when the CDC mechanism detects it. Processing lag occurs within Eventstream as events are transformed and routed. Ingestion lag happens between Eventstream and your destination tables. Each component adds latency, and under load, these delays compound.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Building effective lag management:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Monitor each stage independently. Knowing your total lag is useful, but knowing where lag accumulates is actionable.&lt;/LI&gt;
&lt;LI&gt;Establish baselines before setting alerts. Collect at least two weeks of baseline metrics before configuring alert thresholds.&lt;/LI&gt;
&lt;LI&gt;Implement automatic recovery procedures. When lag exceeds acceptable thresholds, your system should respond without waiting for human intervention.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Operational Foundations You Cannot Skip&lt;/H1&gt;
&lt;H3&gt;Capacity Planning Prevents Expensive Surprises&lt;/H3&gt;
&lt;P&gt;Microsoft Fabric uses a capacity unit model where all workloads draw from a shared pool. Underprovisioning leads to throttling and failed jobs. Overprovisioning wastes budget. Start with realistic estimates based on your data volumes.&lt;/P&gt;
&lt;P&gt;The F4 SKU handles most development and small production workloads comfortably. Medium deployments with 10 to 25 sources typically need F8. Large enterprise deployments should start at F16 and scale based on observed utilization. Watch for sustained utilization above 70 percent as a signal to consider scaling up.&lt;/P&gt;
&lt;H3&gt;Network Security Shapes Your Architecture&lt;/H3&gt;
&lt;P&gt;For production deployments handling sensitive data, network isolation is not optional. Private endpoints keep traffic on the Microsoft backbone network, eliminating exposure to the public internet. Plan your network architecture before building pipelines. Retrofitting private connectivity into an existing deployment is significantly more complex than designing it from the start.&lt;/P&gt;
&lt;H3&gt;Logging Enables Troubleshooting&lt;/H3&gt;
&lt;P&gt;When something goes wrong at 2 AM, your ability to diagnose the problem depends entirely on what information you captured beforehand. Centralized logging using Eventhouse gives you a queryable record of everything that happened across your pipeline. Log more than you think you need initially. Storage is inexpensive compared to the cost of troubleshooting without adequate information.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Key Decisions You Need to Make&lt;/H1&gt;
&lt;P&gt;Before proceeding with implementation, your team should align on several important decisions.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Data retention requirements &lt;/STRONG&gt;affect storage costs and query performance. How long do you need to keep Bronze layer data versus aggregated Gold layer data?&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Recovery time objectives &lt;/STRONG&gt;determine how you architect for resilience. If the pipeline can be down for four hours without business impact, your approach differs from a scenario where even 15 minutes causes significant problems.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Who owns data quality &lt;/STRONG&gt;shapes how you design validation and alerting. If source system teams are responsible, your pipeline detects and reports. If your team owns quality, you implement correction and enrichment.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Moving Forward&lt;/H1&gt;
&lt;P&gt;The patterns and practices in this guide reflect lessons learned from real implementations. Every organization has unique requirements, but the fundamentals of data quality, lag management, capacity planning, and operational readiness apply universally.&lt;/P&gt;
&lt;P&gt;Start with the foundations. A pipeline that handles one source reliably is more valuable than one that theoretically handles fifty but fails unpredictably. Build observability from day one. Automate responses to common problems. Document what you learn.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Your data is a strategic asset. The pipeline that delivers it reliably deserves the same careful engineering you would apply to any critical business system.&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 27 Jan 2026 01:34:03 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/building-a-reliable-real-time-data-pipeline-with-microsoft/ba-p/4489534</guid>
      <dc:creator>NaufalPrawironegoro</dc:creator>
      <dc:date>2026-01-27T01:34:03Z</dc:date>
    </item>
    <item>
      <title>A Technical Implementation Guide for Multi-Store Retail Environments</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/a-technical-implementation-guide-for-multi-store-retail/ba-p/4488418</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Understanding the Problem Space&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When organizations first approach multi-source data ingestion, they typically start with explicit configuration. Each database connection is defined individually, each table mapping is specified, and each destination partition is created manually. This works reasonably well for five or ten sources. It becomes painful at twenty. It becomes nearly unmanageable at fifty or more.&lt;/P&gt;
&lt;P&gt;The operational cost manifests in several ways. Every new store requires a ticket to the data engineering team. Someone must configure the connection, verify the schema compatibility, set up the &lt;A class="lia-external-url" href="https://microsoftlearning.github.io/mslearn-fabric/Instructions/Labs/09-real-time-analytics-eventstream.html" target="_blank"&gt;ingestion pipeline&lt;/A&gt;, create the destination structures, and validate the data flow. In a fast-growing retail operation, this creates a bottleneck that delays time-to-insight for new locations.&lt;/P&gt;
&lt;P&gt;Beyond the immediate operational burden, there is also the risk of configuration drift. When each source is configured individually, small inconsistencies creep in over time. One store might have slightly different table names. Another might be ingesting an extra column that was added during a schema migration. These inconsistencies compound, making the overall system harder to maintain and debug.&lt;/P&gt;
&lt;P&gt;The solution presented here eliminates most of this manual work by implementing two complementary patterns: automatic source detection through regex-based CDC configuration, and dynamic partition creation through Delta Lake's native capabilities.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;Architecture Overview&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The proposed architecture places &lt;A class="lia-external-url" href="https://github.com/debezium/debezium-examples" target="_blank"&gt;Debezium&lt;/A&gt; as the CDC engine, reading from PostgreSQL databases and publishing change events to Azure Event Hubs. Fabric&lt;A class="lia-external-url" href="https://microsoftlearning.github.io/mslearn-fabric/Instructions/Labs/09-real-time-analytics-eventstream.html" target="_blank"&gt; EventStream&lt;/A&gt; consumes these events and writes them to a Delta Lake table in the Lakehouse. The key insight is that neither Debezium nor Delta Lake requires explicit enumeration of every data source. Both can operate on patterns rather than explicit lists.&lt;/P&gt;
&lt;P&gt;At the source layer, Debezium connects to PostgreSQL and monitors the write-ahead log for changes. Rather than configuring a separate connector for each store database, a single connector is configured with a regex pattern that matches all store databases. When a new database is created that matches this pattern, Debezium automatically begins capturing its changes without any configuration update.&lt;/P&gt;
&lt;P&gt;At the destination layer, Delta Lake tables are defined with partition columns but without explicit partition values. When a record arrives with a previously unseen partition value, Delta Lake automatically creates the necessary directory structure and begins writing data to the new partition. No DDL statement is required, no manual intervention is needed.&lt;/P&gt;
&lt;P&gt;The combination of these two behaviors creates an end-to-end pipeline where adding a new store database is as simple as creating the database itself. Everything downstream happens automatically.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Implementation Details&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Configuring Debezium for Automatic Source Detection&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The critical configuration element in Debezium is the database include list parameter. Rather than specifying each database explicitly, this parameter accepts a regular expression that defines which databases should be monitored.&lt;/P&gt;
&lt;P&gt;For a retail environment where store databases follow a naming convention such as store_001, store_002, and so forth, the configuration would specify a pattern like store_.* as the include list. This pattern matches any database whose name begins with store_ followed by any characters. When the DBA creates store_058, Debezium detects this new database during its periodic metadata refresh and automatically begins capturing changes from it.&lt;/P&gt;
&lt;P&gt;The connector configuration should also specify which tables within each database to monitor. In most retail scenarios, the schema is standardized across all stores, so this can be a fixed list such as public.transactions, public.inventory, and public.products. If schema variations exist between stores, additional filtering logic may be required, but this is generally a sign that the source systems need standardization rather than accommodation of inconsistency.&lt;/P&gt;
&lt;P&gt;The topic routing configuration is equally important. All CDC events should be routed to a single Event Hubs topic, with the store identifier included in the message payload. This allows a single EventStream to process all store data while preserving the ability to identify which store each record originated from. The source metadata that Debezium includes with each change event contains the database name, which serves as the natural store identifier.&lt;/P&gt;
&lt;P&gt;Initial snapshot behavior must be considered carefully. When Debezium detects a new database, it will perform an initial snapshot to capture the current state before beginning to track incremental changes. For a store with substantial historical data, this snapshot may take anywhere from a few minutes to several hours. During this period, the connector is occupied with the snapshot and may exhibit increased latency for change events from other databases. Scheduling new store database creation during off-peak hours helps mitigate this impact.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Configuring Delta Lake for Dynamic Partitioning&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Delta Lake supports dynamic partition creation as a default behavior. When a table is created with partition columns specified, any INSERT operation that includes a previously unseen partition value will automatically create the corresponding partition directory.&lt;/P&gt;
&lt;P&gt;The table definition should include the store identifier as the primary partition column. A secondary partition on date is typically advisable for managing data lifecycle and optimizing query performance. The combination of store_id and event_date provides a natural organization that supports both store-specific queries and time-range queries efficiently.&lt;/P&gt;
&lt;P&gt;The table should be created with automatic optimization enabled. The autoOptimize.optimizeWrite property causes Delta Lake to automatically coalesce small files during write operations, reducing the small file problem that frequently plagues streaming ingestion workloads. The autoOptimize.autoCompact property enables background compaction of files that have accumulated between optimization runs.&lt;/P&gt;
&lt;P&gt;When EventStream writes a record with store_id equal to store_058 and this value has never been seen before, Delta Lake creates the partition directory structure automatically. The first write creates the directory, and subsequent writes append to files within that directory. From the perspective of downstream queries, the new store's data is immediately available without any schema changes or administrative intervention.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;EventStream Processing Logic&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The EventStream configuration bridges the gap between Event Hubs and the Lakehouse. It must parse the Debezium change event format, extract the relevant fields including the store identifier, and route the data to the appropriate Delta table.&lt;/P&gt;
&lt;P&gt;The transformation logic should extract the store identifier from the source metadata section of the Debezium payload. This is typically found at a path like source.db within the JSON structure. The operation type indicating whether the change is an insert, update, or delete should be preserved for downstream CDC merge processing.&lt;/P&gt;
&lt;P&gt;A derived column for the event date should be computed from the event timestamp. This serves as the secondary partition key and enables time-based data management. The date extraction should use the source system timestamp rather than the ingestion timestamp to ensure that data is partitioned based on when the business event occurred rather than when it was processed.&lt;/P&gt;
&lt;P&gt;The destination configuration specifies the Delta table and the partition columns. EventStream handles the actual write operations, and Delta Lake handles the partition management automatically based on the values present in each record.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Best Practices for Production Deployment&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Naming Convention Enforcement&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The automatic detection pattern is only as reliable as the naming convention it depends on. Before implementing this architecture, establish and enforce a strict naming convention for store databases. Document the convention, communicate it to all teams that provision databases, and implement validation checks in the database provisioning process.&lt;/P&gt;
&lt;P&gt;The naming convention should be simple and unambiguous. A pattern like store_NNN where NNN is a zero-padded three-digit number provides clear structure and allows for up to 999 stores without format changes. Avoid conventions that might conflict with other databases or that include characters with special meaning in regex patterns.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Schema Standardization&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Automatic source detection assumes that all detected sources share a compatible schema. If store_058 has different table structures than store_001, the downstream processing will fail or produce incorrect results. Schema standardization must be enforced at the source system level before relying on automatic detection.&lt;/P&gt;
&lt;P&gt;Implement schema validation as part of the store database provisioning process. When a new store database is created, it should be created from a template that guarantees schema compatibility. If schema migrations are necessary, they should be applied uniformly across all store databases before being reflected in the CDC configuration.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Partition Key Selection&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The choice of partition keys has significant implications for both storage efficiency and query performance. The store identifier is the natural first-level partition because it provides the strongest cardinality and aligns with common query patterns such as analyzing a specific store's performance.&lt;/P&gt;
&lt;P&gt;Date as a secondary partition enables efficient time-range queries and simplifies data lifecycle management. Retention policies can be implemented by dropping old date partitions rather than scanning and deleting individual records. However, the combination of store and date partitions can produce a large number of partition directories. With 100 stores and 365 days of retained data, the table would have 36,500 partitions. While Delta Lake handles this reasonably well, query planning overhead increases with partition count.&lt;/P&gt;
&lt;P&gt;Consider using month rather than date as the secondary partition if the total partition count becomes problematic. This reduces the partition count by a factor of roughly 30 while still enabling reasonably efficient time-based queries and lifecycle management.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Monitoring and Alerting&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Automatic detection reduces operational burden but does not eliminate the need for monitoring. Implement alerting for several key scenarios.&lt;/P&gt;
&lt;P&gt;First, monitor for new store detection. While the system handles new stores automatically, operations teams should be notified when a new store begins ingesting data. This serves as a sanity check that the detection is working and provides visibility into the growth of the system.&lt;/P&gt;
&lt;P&gt;Second, monitor for schema compatibility failures. If a new database is detected but its schema does not match expectations, the CDC process may fail or produce malformed data. Alerting on processing errors helps catch these issues quickly.&lt;/P&gt;
&lt;P&gt;Third, monitor for snapshot completion. When a new store database triggers an initial snapshot, track the snapshot progress and completion. Extended snapshot times may indicate unusually large source tables or performance issues that warrant investigation.&lt;/P&gt;
&lt;P&gt;Fourth, monitor partition growth. While dynamic partitioning is convenient, runaway partition creation can indicate a problem such as incorrect store identifiers being generated. Alert if the number of distinct store partitions grows faster than expected based on the known rate of new store openings.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Initial Snapshot Planning&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The initial snapshot that occurs when a new database is detected can be resource-intensive for both the source database and the CDC infrastructure. Plan for this by establishing a new store onboarding window during off-peak hours when the impact of snapshot processing is minimized.&lt;/P&gt;
&lt;P&gt;Consider implementing a two-phase onboarding process for stores with large historical datasets. In the first phase, configure the database but exclude it from the Debezium include pattern. Perform a bulk historical load using batch processing, which can be throttled and scheduled more flexibly than the streaming snapshot. In the second phase, add the database to the include pattern to begin capturing incremental changes. This approach reduces the load on the streaming infrastructure while still achieving complete data capture.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Capacity Planning&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Dynamic detection and partitioning enable easy scaling in terms of configuration, but the underlying infrastructure must still be sized appropriately. Event Hubs throughput units must accommodate the aggregate event volume from all stores. Fabric capacity units must handle the combined processing load of EventStream and Delta Lake operations.&lt;/P&gt;
&lt;P&gt;Develop a capacity model that estimates resource requirements per store. Multiply by the current store count plus a growth buffer to determine infrastructure sizing. Review and adjust this model as actual usage patterns become clear.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Risk Assessment and Mitigation&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Uncontrolled Source Proliferation&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The convenience of automatic detection carries a risk of unintended sources being captured. If the naming convention is not strictly enforced, or if the regex pattern is too broad, databases that should not be ingested may be detected and processed.&lt;/P&gt;
&lt;P&gt;Mitigation involves implementing strict naming convention governance and using precise regex patterns. The pattern should be as specific as possible while still accommodating legitimate variations. Consider implementing a whitelist in addition to the pattern match, where new databases matching the pattern are flagged for approval before ingestion begins. This adds a manual step but provides a safety checkpoint.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Schema Drift Between Sources&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Over time, individual store databases may drift from the standard schema due to local modifications, failed migrations, or version inconsistencies. When the CDC process encounters unexpected schema elements, it may fail or produce incorrect data.&lt;/P&gt;
&lt;P&gt;Mitigation requires implementing schema validation at both the source and destination. At the source, periodic schema audits should compare each store database against the canonical schema and flag deviations. At the destination, schema evolution policies in Delta Lake should be configured to reject incompatible changes rather than silently accepting them. The merge schema option should be used cautiously and only when schema evolution is intentional.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Partition Explosion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Dynamic partition creation can lead to an excessive number of partitions if the partition key has unexpectedly high cardinality or if erroneous data introduces spurious partition values. A misconfigured pipeline might create thousands of partitions, degrading query performance and complicating data management.&lt;/P&gt;
&lt;P&gt;Mitigation involves implementing partition count monitoring with alerts at defined thresholds. Additionally, validate partition key values before writing to Delta Lake. If a store identifier does not match the expected format, reject the record or route it to an error table for investigation rather than creating an erroneous partition.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CDC Lag During Snapshot&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When a new database triggers an initial snapshot, the Debezium connector dedicates resources to reading the full table contents. During this period, change events from other databases may experience increased latency. In severe cases, the replication slot lag may grow to problematic levels.&lt;/P&gt;
&lt;P&gt;Mitigation involves scheduling new database provisioning during low-activity periods, sizing the CDC infrastructure with headroom for snapshot operations, and monitoring replication slot lag with alerts at defined thresholds. For very large initial loads, consider the two-phase onboarding approach described earlier.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Event Hubs Partition Affinity&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Event Hubs uses partitions to parallelize message processing. If all messages are routed to a single partition, throughput is limited to what that partition can handle. If messages are distributed across partitions without regard to ordering requirements, related events may be processed out of order.&lt;/P&gt;
&lt;P&gt;Mitigation involves configuring the Debezium producer to use the store identifier as the partition key. This ensures that all events for a given store are routed to the same Event Hubs partition, preserving ordering within each store while distributing load across partitions for different stores. The number of Event Hubs partitions should be set high enough to accommodate the expected number of stores with room for growth. Unlike some properties, partition count cannot be increased after the Event Hub is created.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Orphaned Replication Slots&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If a store database is decommissioned but the replication slot is not cleaned up, PostgreSQL continues to retain write-ahead log segments for the orphaned slot. Over time, this can fill the disk and cause database outages.&lt;/P&gt;
&lt;P&gt;Mitigation requires implementing a decommissioning procedure that includes replication slot cleanup. Monitor for inactive replication slots and alert when a slot has not been read from in an extended period. Consider implementing automatic slot cleanup for slots that have been inactive beyond a defined threshold, though this should be done cautiously to avoid accidentally removing slots that are temporarily inactive due to maintenance.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operational Procedures&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Adding a New Store&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The procedure for adding a new store is intentionally minimal. The DBA creates the store database following the established naming convention. The database should be created from the standard template to ensure schema compatibility.&lt;/P&gt;
&lt;P&gt;Within minutes of database creation, Debezium detects the new database and begins the initial snapshot. Operations teams receive a notification of the new store detection. The snapshot progresses, with completion typically occurring within 30 minutes for a standard store data volume.&lt;/P&gt;
&lt;P&gt;Once the snapshot completes, incremental CDC begins. The first records arriving at the Lakehouse trigger automatic partition creation. From this point forward, the new store's data is fully integrated into the analytics platform with no additional intervention required.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Removing a Store&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Store removal requires more deliberate action than store addition. First, stop ingesting new data by either renaming the database to no longer match the include pattern or by dropping the database entirely. Second, drop the replication slot associated with the store to prevent WAL retention issues. Third, decide whether to retain or purge historical data in the Lakehouse.&lt;/P&gt;
&lt;P&gt;If historical data should be retained, no action is needed at the Lakehouse level. The partition remains but simply receives no new data. If historical data should be purged, drop the partition using Delta Lake's partition drop capability. This removes the data files and the partition metadata in a single atomic operation.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Handling Schema Changes&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Schema changes require coordination across all store databases and the downstream processing logic. Minor additive changes such as new nullable columns can often be handled through Delta Lake's schema evolution capabilities. The merge schema option allows new columns to be added automatically when encountered.&lt;/P&gt;
&lt;P&gt;Breaking changes such as column renames, type changes, or column removals require a more deliberate migration process. First, update the downstream processing logic to handle both the old and new schemas. Deploy this change and verify it works with existing data. Then, apply the schema change to source databases in a rolling fashion. Finally, once all sources have been migrated, remove support for the old schema from the processing logic.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Disaster Recovery&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The architecture provides several recovery options depending on the failure scenario. If Event Hubs experiences an outage, Debezium buffers changes locally and resumes publishing when connectivity is restored. The replication slot ensures no changes are lost during the outage, though extended outages may cause WAL accumulation on the source database.&lt;/P&gt;
&lt;P&gt;If Fabric experiences an outage, events accumulate in Event Hubs up to the retention period. Once Fabric recovers, EventStream resumes processing from its last checkpoint, catching up on accumulated events. The Delta Lake table remains consistent due to its transactional nature.&lt;/P&gt;
&lt;P&gt;If a source database is lost, recovery depends on backup strategy. The Lakehouse contains a copy of all ingested data, which can serve as a read-only recovery source. Full database recovery requires restoring from PostgreSQL backups.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Dynamic partitioning and automatic source detection transform multi-store data ingestion from an operational burden into a largely self-managing system. The combination of Debezium's pattern-based database detection with Delta Lake's dynamic partition creation eliminates most manual configuration work while maintaining the flexibility to accommodate growth.&lt;/P&gt;
&lt;P&gt;The implementation requires careful attention to naming conventions, schema standardization, and monitoring. The risks are real but manageable with appropriate governance and operational procedures. For organizations operating at scale with dozens or hundreds of similar data sources, this architecture provides a sustainable path to unified analytics without proportional growth in operational overhead.&lt;/P&gt;
&lt;P&gt;The key principle underlying this approach is that systems should adapt to data rather than requiring data to conform to rigid system configurations. By designing for automatic detection and dynamic accommodation, the data platform becomes a utility that business operations can leverage without constant engineering involvement. This shift from explicit configuration to pattern-based adaptation is essential for organizations seeking to derive value from data at scale.&lt;/P&gt;</description>
      <pubDate>Thu, 22 Jan 2026 08:39:19 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/a-technical-implementation-guide-for-multi-store-retail/ba-p/4488418</guid>
      <dc:creator>NaufalPrawironegoro</dc:creator>
      <dc:date>2026-01-22T08:39:19Z</dc:date>
    </item>
    <item>
      <title>Azure Databricks &amp; Fabric Disaster Recovery: The Better Together Story</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/azure-databricks-fabric-disaster-recovery-the-better-together/ba-p/4481323</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Author's: Amudha Palani &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3298387" data-lia-user-login="amudhapalani" class="lia-mention lia-mention-user"&gt;amudhapalani​&lt;/a&gt;,&amp;nbsp;&lt;/SPAN&gt;Oscar Alvarado &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="2298967" data-lia-user-login="oscaralvarado" class="lia-mention lia-mention-user"&gt;oscaralvarado​&lt;/a&gt;, &lt;SPAN data-contrast="auto"&gt;Eric Kwashie&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3283946" data-lia-user-login="ekwashie" class="lia-mention lia-mention-user"&gt;ekwashie​&lt;/a&gt;, Peter Lo &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="2085522" data-lia-user-login="PeterLo" class="lia-mention lia-mention-user"&gt;PeterLo​&lt;/a&gt; and Rafia Aqil &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3072440" data-lia-user-login="Rafia_Aqil" class="lia-mention lia-mention-user"&gt;Rafia_Aqil​&lt;/a&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Disaster recovery (DR) is a critical component of any cloud-native data analytics platform, ensuring business continuity even during rare regional outages caused by natural disasters, infrastructure failures, or other disruptions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Identify&amp;nbsp;Business Critical Workloads&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Before designing any disaster recovery strategy, organizations must first&amp;nbsp;identify&amp;nbsp;which workloads are truly business‑critical and require regional redundancy. Not all Databricks or Fabric processes need full DR protection; instead, customers should evaluate the operational impact of downtime, data freshness requirements, regulatory obligations, SLAs, and dependencies across upstream and downstream systems. By classifying workloads into&amp;nbsp;tiers&amp;nbsp;and aligning DR investments accordingly, customers ensure they protect what matters most without over‑engineering the platform.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Azure Databricks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Azure Databricks requires a customer‑driven approach to disaster recovery, where organizations&amp;nbsp;are responsible for&amp;nbsp;replicating workspaces, data, infrastructure components, and security configurations across regions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 class=""&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Full System Failover (Active-Passive) Strategy&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;A comprehensive approach that replicates all dependent services to the secondary region. Implementation requirements include:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Infrastructure Components:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Replicate Azure services (ADLS, Key Vault, SQL databases) using Terraform&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Deploy network infrastructure (subnets) in the secondary region&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Establish data synchronization mechanisms&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Data Replication Strategy:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use Deep Clone for Delta tables&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;rather than geo-redundant storage&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Implement periodic synchronization jobs using Delta's incremental replication&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Measure data transfer results using time travel syntax&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Workspace Asset Synchronization:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Co-deploy cluster configurations, notebooks, jobs, and permissions using CI/CD&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Utilize Terraform and SCIM for identity and access management&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Keep job concurrencies at zero in the secondary region to prevent execution&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Fully Redundant (Active-Active) Strategy&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;The most sophisticated approach where all transactions are processed in multiple regions simultaneously. While providing maximum resilience, this strategy:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Requires complex data synchronization&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;between regions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Incurs highest operational costs&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;due to duplicate processing&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Typically needed only for mission-critical workloads&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with zero-tolerance for downtime&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Can be implemented as partial active-active&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, processing most workload in primary with subset in secondary&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Enabling Disaster Recovery&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Create a secondary workspace in a paired region.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="7" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use CI/CD to keep&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Workspace Assets Synchronized&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;continuously.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN lia-indent-padding-left-30px"&gt;&lt;table class="lia-indent-margin-left-30px lia-border-color-20 lia-border-style-double" border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Requirement&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approach&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Tools&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cluster Configurations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Co-deploy to both regions as code&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Terraform&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Code (Notebooks, Libraries, SQL)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Co-deploy with CI/CD pipelines&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Git, Azure DevOps, GitHub Actions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Jobs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Co-deploy with CI/CD, set concurrency to zero in secondary&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Databricks Asset Bundles, Terraform&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Permissions (Users, Groups, ACLs)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Use IdP/SCIM and infrastructure as code&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Terraform, SCIM&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Secrets&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Co-deploy using secret management&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Terraform, Azure Key Vault&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Table Metadata&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Co-deploy with CI/CD workflows&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Git, Terraform&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cloud Services (ADLS, Network)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Co-deploy infrastructure&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-20"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Terraform&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="8" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Update your orchestrator (ADF, Fabric pipelines, etc.) to include a&amp;nbsp;simple region toggle&amp;nbsp;to reroute job execution.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="9" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Replicate all dependent services (Key Vault, Storage accounts, SQL DB).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="10" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Implement Delta&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;“Deep Clone”&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;synchronization jobs to keep datasets continuously aligned between regions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="11" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Introduce an application‑level&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;“Sync Tool”&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;that redirects:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:1,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;data ingestion&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:1,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;compute execution&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="12" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enable parallel processing in both regions for selected or all workloads.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="13" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use bi‑directional synchronization for Delta data to maintain consistency across regions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="14" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;For performance and cost control, run most workloads in primary and only subset workloads in secondary to keep it warm.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&lt;SPAN data-contrast="auto"&gt;Implement Three-Pillar DR Design&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:360,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Primary Workspace:&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Your production Databricks environment running normal operations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:360,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Secondary Workspace:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;A standby Databricks workspace in a different(paired) Azure region that&amp;nbsp;remains&amp;nbsp;ready to take over if the primary fails. This architecture ensures business continuity while&amp;nbsp;optimizing&amp;nbsp;costs by keeping the secondary workspace dormant until needed.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;SPAN data-contrast="auto"&gt;The DR solution is built on three fundamental pillars that work together to provide comprehensive protection:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;1. Infrastructure Provisioning (Terraform&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;The infrastructure layer creates and manages all Azure resources required for disaster recovery using Infrastructure as Code (Terraform).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;What It Creates:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Secondary Resource Group:&lt;/STRONG&gt; A dedicated resource group in your paired DR region (e.g., if primary is in East US, secondary might be in West US 2)&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Secondary Databricks Workspace:&amp;nbsp;&lt;/STRONG&gt;A standby Databricks workspace with the same SKU as your primary, ready to receive failover traffic&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;DR Storage Account:&lt;/STRONG&gt; An ADLS Gen2 storage account that serves as the backup destination for your critical data&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Monitoring Infrastructure:&amp;nbsp;&lt;/STRONG&gt;Azure Monitor Log Analytics workspace and alert action groups to track DR health&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Protection Locks:&lt;/STRONG&gt; Management locks to prevent accidental deletion of critical DR resources&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key Design Principle:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt; &amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;The Terraform configuration references your existing primary workspace without modifying it. It only creates new resources in the secondary region, ensuring your production environment remains untouched during setup.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;2. Data Synchronization (Delta Notebooks)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;The data synchronization layer ensures your critical data is continuously backed up to the secondary region.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;How It Works:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt; &amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;The solution uses a Databricks notebook that runs in your primary workspace on a scheduled basis. This notebook:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Connects to Backup Storage:&lt;/STRONG&gt; Uses Unity Catalog with Azure Managed Identity for secure, credential-free authentication to the secondary storage account&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Identifies Critical Tables:&amp;nbsp;&lt;/STRONG&gt;Reads from a configuration list you define (sales data, customer data, inventory, financial transactions, etc.)&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Performs Deep Clone:&amp;nbsp;&lt;/STRONG&gt;Uses Delta Lake's native CLONE functionality to create exact copies of your tables in the backup storage&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Tracks Sync Status:&amp;nbsp;&lt;/STRONG&gt;Logs each synchronization operation, tracks row counts, and reports on data freshness&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Authentication Flow:&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;The synchronization process&amp;nbsp;leverages&amp;nbsp;Unity Catalog's managed identity capabilities:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;An existing Access Connector for Unity Catalog is granted "Storage Blob Data Contributor" permissions on the backup storage.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Storage credentials are created in Databricks that reference this Access Connector.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;The notebook uses these credentials transparently—no storage keys or secrets are required.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What Gets Synced:&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;You define which tables are critical to your business operations. The notebook creates backup copies including:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Full table data and schema&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Table partitioning structure&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Delta transaction logs for point-in-time recovery&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;&lt;SPAN data-contrast="auto"&gt;3. Failover Automation (Python Scripts)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;The failover automation layer orchestrates the switch from primary to secondary workspace when disaster strikes.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Fabric&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Fabric provides built‑in disaster recovery capabilities designed to keep analytics and Power BI experiences available during regional outages. Fabric simplifies continuity for reporting workloads, while still requiring customer planning for deeper data and workload replication.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Power BI Business Continuity&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Power BI, now integrated into Fabric, provides automatic disaster recovery as a default offering:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No opt-in&amp;nbsp;required&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: DR capabilities are automatically included.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Azure storage geo-redundant replication&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: Ensures backup instances exist in other regions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Read-only access during disasters&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: Semantic models, reports, and dashboards&amp;nbsp;remain&amp;nbsp;accessible.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Always supported&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: BCDR for Power BI&amp;nbsp;remains&amp;nbsp;active regardless of&amp;nbsp;OneLake&amp;nbsp;DR setting.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Fabric&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Fabric's cross-region DR uses a shared responsibility model between Microsoft and customers:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft's Responsibilities:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Ensure baseline infrastructure and platform services availability&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Maintain Azure regional pairings for geo-redundancy.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Provide DR capabilities for Power BI as default.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Customer Responsibilities:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enable disaster recovery settings for capacities&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Set up secondary capacity and workspaces in paired regions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Replicate data and configurations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Enabling Disaster Recovery&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Organizations can enable BCDR through the&amp;nbsp;Admin portal&amp;nbsp;under Capacity settings:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to&amp;nbsp;Admin portal → Capacity settings&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Select the&amp;nbsp;appropriate&amp;nbsp;Fabric&amp;nbsp;Capacity&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Access&amp;nbsp;Disaster Recovery configuration&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Enable the disaster recovery toggle&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Critical Timing Considerations:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:720}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;30-day minimum activation period&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: Once enabled, the setting&amp;nbsp;remains&amp;nbsp;active for at least&amp;nbsp;30 days&amp;nbsp;and cannot be reverted.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;72-hour activation window&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;Initial&amp;nbsp;enablement can take up to&amp;nbsp;72 hours&amp;nbsp;to become fully effective.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Azure&amp;nbsp;Databricks&amp;nbsp;&amp;amp; Microsoft Fabric&amp;nbsp;DR&amp;nbsp;Considerations&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Building a resilient analytics platform requires understanding how disaster recovery responsibilities differ between Azure Databricks and Microsoft Fabric. While both platforms&amp;nbsp;operate&amp;nbsp;within Azure’s regional architecture, their DR models, failover behaviors, and customer responsibilities are fundamentally different.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Recovery Procedures&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 98.6111%; height: 238.667px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 38.6667px;"&gt;&lt;td style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Procedure&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Databricks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Fabric&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Failover&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Stop workloads, update routing, resume&amp;nbsp;in secondary&amp;nbsp;region.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft initiates failover; customers restore services in DR capacity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Restore to Primary&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Stop secondary workloads, replicate data/code back, test, resume&amp;nbsp;production.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Recreate workspaces and items in new capacity; restore Lakehouse and Warehouse data.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Asset Syncing&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Use CI/CD and Terraform to&amp;nbsp;sync&amp;nbsp;clusters, jobs, notebooks, permissions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Use Git integration and pipelines to&amp;nbsp;sync&amp;nbsp;notebooks and pipelines; manually restore&amp;nbsp;Lakehouses.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Business Considerations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Consideration&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Databricks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Fabric&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Control&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Customers manage DR strategy, failover timing, and asset replication.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft manages failover; customers restore services post-failover.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Regional Dependencies&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Must ensure&amp;nbsp;secondary&amp;nbsp;region has sufficient capacity and services.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;DR only available in Azure regions with Fabric support and paired regions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Power BI Continuity&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Not applicable.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Power BI offers built-in BCDR with read-only access to semantic models and reports.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Activation Timeline&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Immediate upon&amp;nbsp;configuration.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;DR setting takes up to&amp;nbsp;72 hours&amp;nbsp;to activate; 30-day wait before changes&amp;nbsp;allowed.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 10 Mar 2026 01:46:28 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/azure-databricks-fabric-disaster-recovery-the-better-together/ba-p/4481323</guid>
      <dc:creator>Rafia_Aqil</dc:creator>
      <dc:date>2026-03-10T01:46:28Z</dc:date>
    </item>
    <item>
      <title>Tableau to Power BI Migration: Semantic Layer-First Approach for Cloud Architects</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/tableau-to-power-bi-migration-semantic-layer-first-approach-for/ba-p/4481009</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;Author's:&lt;/STRONG&gt; Mahjabin Ahmed, Yassine El Ouardi, &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Lavanya Sreedhar &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="1427133" data-lia-user-login="LavanyaSreedhar" class="lia-mention lia-mention-user"&gt;LavanyaSreedhar​&lt;/a&gt;, Peter Lo &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="2085522" data-lia-user-login="PeterLo" class="lia-mention lia-mention-user"&gt;PeterLo​&lt;/a&gt;, Aryan Anmol &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3159022" data-lia-user-login="aryananmol" class="lia-mention lia-mention-user"&gt;aryananmol​&lt;/a&gt;, Shreya Harvu &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3348995" data-lia-user-login="shreyaharvu" class="lia-mention lia-mention-user"&gt;shreyaharvu​&lt;/a&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-10"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;and Rafia Aqil &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3072440" data-lia-user-login="Rafia_Aqil" class="lia-mention lia-mention-user"&gt;Rafia_Aqil​&lt;/a&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;In this guide, we &lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;provide&lt;/SPAN&gt;&amp;nbsp;practical guidance for migrating from Tableau to Power BI&lt;SPAN data-ccp-charstyle="Normal"&gt;, with a focus on&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;technical best practices&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;and architecture&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Unifying business intelligence on the&amp;nbsp;&lt;/SPAN&gt;Microsoft Fabric&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;platform, enterprises gain closer integration with Microsoft 365 (Teams, Copilot, Excel). For cloud solution architects and BI developers, a successful migration is not just about rebuilding dashboards in a new tool. It requires thoughtful&amp;nbsp;&lt;/SPAN&gt;architectural planning&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;and a shift to a more model-centric approach to BI.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Why Semantic Layer-First Architecture Matters&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;The Traditional Migration Challenge&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Most Tableau to Power BI migrations&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;follow&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;a&amp;nbsp;&lt;/SPAN&gt;dashboard-centric approach&lt;SPAN data-ccp-charstyle="Normal"&gt;: teams&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;attempt&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;to replicate existing Tableau workbooks, calculated fields, and LOD (Level of Detail) expressions directly into Power BI reports.&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;While this may seem efficient initially, it creates significant downstream challenges:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="●" data-font="Times New Roman" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Times New Roman&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Duplicated logic&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Each report embeds its own calculations and business rules, leading to conflicting KPIs across the organization&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="●" data-font="Times New Roman" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Times New Roman&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Maintenance overhead&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Changes to business logic require updating dozens or hundreds of individual reports&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="●" data-font="Times New Roman" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Times New Roman&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Governance gaps&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Without centralized definitions, semantic drift occurs—different teams calculate "Revenue" or "Active Customer" differently&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="●" data-font="Times New Roman" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Times New Roman&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Scalability issues&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; As data volumes grow, report-level transformations become performance bottlenecks&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;The Semantic Layer-First Alternative&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Microsoft's recommended approach centers on&amp;nbsp;&lt;/SPAN&gt;semantic models&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;(formerly called datasets)—centralized, governed data models that separate business logic from visualization.&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;In this architecture:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;The payoff is substantial&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: when data evolves or business rules change, you update the semantic model once, and all dependent reports automatically reflect the changes—no manual redesign&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;required&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Understanding Migration Complexity: Simple to Very Complex Dashboards&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Not all Tableau dashboards are created&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;equal&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;. The migration strategy should align with dashboard complexity, and the semantic layer approach becomes increasingly valuable as complexity grows.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Follow a Step-by-Step&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Migration Strategy&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;Migrating from Tableau to Power BI is not a one-click effort&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;– it requires a mix of automated and manual refactoring, plus a sound change management plan. Below are key strategies and best practices for a successful migration:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;OL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Audit your Tableau estate&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Start by taking inventory of all existing Tableau workbooks, data sources, and dashboards.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Determine&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;what needs to be migrated (focus on&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;high-value&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;widely used&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;reports first) and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;identify&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;any redundant or obsolete content that can be retired rather than converted.&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Conduct a proof-of-concept (PoC)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Before migrating everything,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;pick&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;a representative complex dashboard (or a subset of your data) and perform a pilot migration. This will help you&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;validate&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;that Power BI can connect to your data (&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;e.g.&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;setting up the Power BI gateways for on-premises sources), test performance (Import vs&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;DirectQuery&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;modes), and experiment with replicating key visuals or calculations. Use the PoC to uncover any surprises early – for example, test that any&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;Level of Detail&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;expressions or table calculations in Tableau can be re-created in DAX. The lessons learned here should inform your overall project plan.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Use a phased migration approach&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Plan to run Tableau and Power BI in parallel for some period, rather than switching everything at once. Migrate in waves – for example, by business unit or subject area – and incorporate user feedback as you go. This phased approach reduces risk and allows your team to improve the process with each iteration. It also gives end users time to adjust gradually.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Migrate high-impact dashboards first&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; P&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;rioritize the migration of&amp;nbsp;&lt;/SPAN&gt;key reports and dashboards&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;that are critical to the business or have the most usage. Delivering these early wins will not only surface any technical challenges to solve but will also help&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;demonstrate&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;the value of Power BI’s capabilities to stakeholders. Early success builds buy-in and momentum for the rest of the migration.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Reimagine (don’t&amp;nbsp;just replicate) the experience&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;It&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;’s&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;rarely possible – or desirable – to exactly re-create every Tableau visualization pixel-for-pixel in Power BI. Embrace the opportunity to&amp;nbsp;&lt;/SPAN&gt;focus on&amp;nbsp;business&amp;nbsp;questions and improve user experience&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;with Power BI’s features. For example, rather than replicating&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;a complex Tableau workaround, you might implement a cleaner solution in Power BI using native features (like bookmarks, drilldowns, or simpler navigation between pages). Engage business users and subject matter experts during this redesign to ensure the new reports meet their needs.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Enable dataset&amp;nbsp;reusability&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;:&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;One&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;major benefit of the Power BI approach is the ability to create shared datasets and dataflows. As you migrate, look for opportunities to create&amp;nbsp;&lt;/SPAN&gt;central semantic models (datasets)&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;that can serve multiple reports. For instance, if several Tableau workbooks&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;are&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;all using similar data about sales, you can create one&amp;nbsp;&lt;/SPAN&gt;central Sales dataset&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;in Power BI. Report creators across the organization can then build different Power BI reports on that single dataset without duplicating data or logic. This reduces maintenance and promotes a “build once, reuse often” strategy.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Provide training and support&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Expect a learning curve for teams moving to Power BI – especially those who are very fluent in Tableau. Plan for user&amp;nbsp;&lt;/SPAN&gt;upskilling and training&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;programs. Establish a support community or&amp;nbsp;&lt;/SPAN&gt;office hours&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;where&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;new users&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;can ask questions and get help. If possible,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;identify&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;Power BI&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;champions&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;or recruit a&amp;nbsp;&lt;/SPAN&gt;Power BI Center of Excellence&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;(COE) team who can guide others. During the transition, ensure there are subject matter experts (SMEs) available to address questions and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;validate&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;that the new reports are correct.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Manage change and expectations&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;It’s&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;important to communicate&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;why&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;the organization is moving to Power BI (&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;e.g.&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;benefits like deeper integration, lower TCO, better governance) to get buy-in from end users. Some users may be resistant to change, especially if&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;they’ve&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;invested a lot of&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;time in&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;mastering Tableau. Prepare to handle varying responses – emphasize the personal benefits (like improved performance, new capabilities, or career growth with popular skills) to encourage adoption. Also, involve influential business users early and gather their feedback, so they feel ownership in the new solution.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Establish governance from Day 1&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Don’t&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;wait until after migration to think about governance. Use this chance to set up&amp;nbsp;&lt;/SPAN&gt;Power BI governance&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;aligned to best practices. Decide on important aspects such as workspace naming conventions, who can create or publish content, how you’ll monitor usage and costs, and how to manage data access and security (for example, designing a strategy for &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/fabric/data-warehouse/tutorial-row-level-security" target="_blank" rel="noopener"&gt;RLS&lt;/A&gt;/&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/fabric/security/service-admin-object-level-security?tabs=table" target="_blank" rel="noopener"&gt;OLS&lt;/A&gt;/&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/fabric/data-warehouse/tutorial-column-level-security" target="_blank" rel="noopener"&gt;CLS&lt;/A&gt;, and deciding when to use&amp;nbsp;&lt;/SPAN&gt;per-user datasets vs. organizational semantic models&lt;SPAN data-ccp-charstyle="Normal"&gt;). Good governance will ensure your shiny new Power BI environment&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;doesn’t&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;sprawl into chaos over time.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Allow time for adjustment and iteration&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Finally, be patient and iterative. Depending on the scale of your organization and the number of Tableau assets, a full migration can take months or even a year or more. Plan realistic transition periods where both systems might coexist. Continuously refine your approach with each wave of migration. Power BI’s frequent update cadence (monthly releases) means new features may&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;emerge&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;even during your project – stay updated, as new capabilities could simplify your migration (for example, the introduction of&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;field parameters&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;or&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;Copilot&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;might let you modernize certain Tableau features more easily).&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Reimagine (don’t&amp;nbsp;just replicate) the experience&amp;nbsp;(Step&amp;nbsp;5):&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Phase 1: Assessment and Planning&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;1. Audit Your Tableau Estate&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Inventory all workbooks, data sources, and calculated fields&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Identify&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;high-traffic dashboards (prioritize for early migration)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Categorize by complexity (Simple/Medium/Complex/Very Complex)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;2. Design Your Semantic Architecture&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Map Tableau data sources to Power BI data sources (&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;DirectQuery&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;, Import, or Direct Lake)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Plan star schema for fact/dimension tables&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Identify&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;shared calculations that should live in semantic models vs. report-specific logic&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;3. Choose Storage Modes&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-20 lia-border-style-double" border="1" style="width: 60.3704%; height: 249.333px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 38.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Source Type&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Recommended Mode&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Rationale&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Databricks Delta Lake&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Direct Lake&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Real-time analytics, no refresh lag&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Azure SQL Database&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;DirectQuery&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;or Import&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Based on data volume and refresh SLAs&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;On-Premises SQL Server&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Import (via Gateway)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Network latency considerations&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Excel/CSV files&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Import&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 38.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Small reference data&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0,&amp;quot;335572071&amp;quot;:12,&amp;quot;335572072&amp;quot;:0,&amp;quot;335572073&amp;quot;:0,&amp;quot;469789798&amp;quot;:&amp;quot;single&amp;quot;}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Phase 2: Build the Semantic Layer&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="none"&gt;1. Create Star Schema Data Models&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Tableau often relies on flat, denormalized datasets. Power BI performs best with star schemas:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="7" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Fact tables&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: Transactional data (sales, orders, events) with foreign keys to dimensions&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="8" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Dimension tables&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: Descriptive attributes (customers, products, dates) with primary keys&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="9" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Relationships&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: One-to-many from dimension to fact,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;leveraging&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;bidirectional filtering sparingly&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;2. Migrate Calculations to DAX Measures&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Convert Tableau calculated fields to DAX measures in the semantic model:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class="lia-indent-padding-left-180px"&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;--Example of DAX:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-180px"&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;-- Define as measure:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-180px"&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;Total&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;Revenue&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;=&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-180px"&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;SUMX&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;(&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-180px"&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;'Sales'&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;,&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-180px"&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;'Sales'[Quantity]&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;*&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;'Sales'[Unit Price]&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-180px"&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;2.1&amp;nbsp;Use Copilot to Accelerate DAX Development&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-90px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Leverage Copilot in Power BI Desktop to generate and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;validate&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;DAX:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Describe the calculation in natural language&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Copilot suggests DAX syntax&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Review, test, and refine&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;2.2 Document your Semantic Model&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-90px"&gt;Invest in creating an AI-ready foundation for your semantic model. AI systems need to understand unique business contexts in order to prioritize correct information to provide consistent and reliable responses to your end users.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Name Tables and Columns Clearly: &lt;/STRONG&gt;Avoid ambiguity in your semantic model. Use human-readable, business-friendly names. Avoid abbreviations, acronyms, or technical terms. This improves Copilot’s ability to interpret user intent.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Create Meaningful Measures:&lt;/STRONG&gt; Define reusable DAX measures for key business metrics (e.g., Revenue, Profit Margin). AI features rely on these to generate insights and summaries.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Document Semantic Model objects:&lt;/STRONG&gt; Add descriptions and synonyms to your Tables, Columns and measures. This enhances natural language querying and improves Copilot’s contextual understanding.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Build an AI Data Schema:&lt;/STRONG&gt;&amp;nbsp;prepare your semantic model for AI by utilizing tooling features such as Prep data for AI.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Phase 3: &lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Understanding Migration Complexity: Simple to Very Complex Dashboards&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Not all Tableau dashboards are created&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;equal&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;. The migration strategy should align with dashboard complexity, and the semantic layer approach becomes increasingly valuable as complexity grows.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;1. Dashboard Conversion Best Practices&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="none"&gt;Think in "pages" not "sheets"&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: Power BI reports combine multiple visuals per page; group related visuals logically&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="none"&gt;Use slicers for interactivity&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: Replace Tableau filters with Power BI slicers and filter pane&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="none"&gt;Leverage bookmarks for navigation&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: Create dynamic report experiences with show/hide containers&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Simple Complexity Level&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-20 lia-border-style-double" border="2" style="width: 100%; border-width: 2px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Category&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Tableau Feature&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Power BI Equivalent&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Fabric Enhancements&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Best Practice Notes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Data Model&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Single custom SQL&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/power-query/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Power Query&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for data shaping and ETL.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/onelake/onelake-access-api" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;OneLake&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Shortcuts&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for unified data access.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Use star schema for optimized performance; push logic into the semantic layer rather than visuals.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Calculations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Basic IF/ELSE, SUM&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/dax/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Data Analysis Expressions (DAX)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for measures and calculated columns.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/create-reports/copilot-enable-power-bi" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Copilot&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;for Power BI to&amp;nbsp;assist&amp;nbsp;with DAX creation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/introducing-fabric-iq-the-semantic-foundation-for-enterprise-ai" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric IQ&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for natural language queries.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Centralize calculations in semantic models for consistency and governance.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Medium Complexity Level&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-20 lia-border-style-double" border="2" style="border-width: 2px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Category&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Tableau Feature&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Power BI Equivalent&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Fabric Enhancements&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Best Practice Notes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Data Model&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Multiple custom SQL (up to 3)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Connect live to databases (Azure Databricks):&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-directquery-about" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;DirectQuery in Power BI&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Connect with cloud data sources:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/connect-data/service-get-data" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Power BI data sources&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/onelake/onelake-access-api" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;OneLake&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Shortcuts&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for unified access without&amp;nbsp;databricks&amp;nbsp;compute cost.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/connector-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Semantic Models&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;can combine multiple sources.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Optimize&amp;nbsp;with star schema;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Prefer&amp;nbsp;OneLake&amp;nbsp;Shortcuts for performance; avoid heavy transformations in visuals.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Calculations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Nested IFs, CASE&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/dax/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Data Analysis Expressions (DAX)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for measures and calculated columns.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/copilot-fabric-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Copilot for Power BI&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to&amp;nbsp;assist&amp;nbsp;with DAX creation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/concept-data-agent" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric Data Agent&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;for&amp;nbsp;conversational&amp;nbsp;BI.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Fabric IQ for natural language queries:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/introducing-fabric-iq-the-semantic-foundation-for-enterprise-ai" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric IQ&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Centralize logic in semantic models; use Copilot for automation and validation; keep calculations reusable.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Reporting&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Tooltip format in Bar and Map visuals&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Select All/Clear option for&amp;nbsp;Single&amp;nbsp;Select&amp;nbsp;dropdown&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Standard tooltips offer help tooltips, text, and background formatting. Dynamic tooltip will be able to create the Tooltip page and reuse it in multiple visuals&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The customization is so much better than the OOB tooltips&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/create-reports/desktop-tooltips" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Create report tooltip pages in Power BI - Power BI | Microsoft Learn&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Use&amp;nbsp;Clear All Slicers Button.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Disable Single Select, Add Clear All Slicers button, Customize the Button and Use the Button&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Complex Complexity Level&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-20 lia-border-style-double" border="2" style="border-width: 2px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Category&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Tableau Feature&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Power BI Equivalent&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Fabric Enhancements&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Best Practice Notes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Data Model&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Multiple sources&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Create relationship using more than one column&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Composite Models in Power BI (&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-directquery-about" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;DirectQuery&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;+&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-directquery-about#quick-decision-guide" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Import&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;) for combining multiple sources, also connect to&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/connect-data/power-bi-data-sources" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;various cloud services.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/transform-model/dataflows/dataflows-introduction-self-service" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Dataflows&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;for pre-processing.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Power BI allows a relationship between 2 tables based on only one active column.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/onelake/onelake-access-api" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;OneLake&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Shortcuts&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for unified access without Azure Databricks compute cost;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/connector-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Microsoft Fabric Dataflows Gen2&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;offers multiple ways to ingest, transform, and load data efficiently.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Consolidate&amp;nbsp;sources into semantic models; use Direct Lake for performance;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Plan and design data model to&amp;nbsp;comply with&amp;nbsp;star schema supported by Power BI&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Relationship DAX&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;USERELATIONSHIP DAX for activating relationships in Power BI for a specific calculation&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:1,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Calculations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;LOD, window functions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/dax/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Data Analysis Expressions (DAX)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for measures and calculated columns.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/copilot-fabric-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Copilot&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;to&amp;nbsp;assist&amp;nbsp;with complex DAX.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/introducing-fabric-iq-the-semantic-foundation-for-enterprise-ai" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric IQ Ontolog&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;y for semantic alignment.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/create-reports/service-reports-visual-interactions?tabs=powerbi-desktop" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Change how visuals interact&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;in a Power BI report.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Centralize calculations in semantic layer; use variables in DAX for readability and performance.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/concept-data-agent" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric Data Agent&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;for a conversational BI.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Very Complex Complexity Level&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-20 lia-border-style-double" border="2" style="border-width: 2px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Category&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Tableau Feature&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Power BI Equivalent&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Fabric Enhancements&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Best Practice Notes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Data Model&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Multi-source, Excel, SQL&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Composite Models in Power BI (&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-directquery-about" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;DirectQuery&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;+&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-directquery-about#quick-decision-guide" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Import&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;) for combining multiple sources, also connect to&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/connect-data/power-bi-data-sources" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;various cloud services.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/transform-model/dataflows/dataflows-introduction-self-service" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Dataflows&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;for pre-processing.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/onelake/onelake-access-api" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;OneLake&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Shortcuts&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for unified access;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/connector-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Connector overview&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;build-in support.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/mirroring/overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Mirroring&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;for real-time sync.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Combine multiple sources into well-structured semantic models for consistency and optimized performance.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Calculations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Predictive logic&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/dax/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Data Analysis Expressions (DAX)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for measures and calculated columns.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/low-code-automl" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;AutoML,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/machine-learning-model" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;ML models&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/create-reports/insights" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;AI Insights&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;, Python/R,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/how-to-use-notebook?toc=%2Ffabric%2Fdata-science%2Ftoc.json&amp;amp;bc=%2Ffabric%2Fdata-science%2Fbreadcrumb%2Ftoc.json" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Notebook‑based ML&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;(Spark/Scikit‑Learn)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;, Fabric&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/ai-functions/overview?tabs=pandas-pyspark%2Cpandas" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;AI Functions&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://blog.fabric.microsoft.com/en-us/blog/introducing-fabric-iq-the-semantic-foundation-for-enterprise-ai" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric IQ Ontology&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/concept-data-agent" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric Data Agent&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;for a conversational BI.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Centralize logic in semantic models; leverage Copilot for automation and parameter-driven workflows.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Prepare for&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/copilot-fabric-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Copilot.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:0}"&gt;2. &lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;&lt;SPAN data-contrast="none"&gt;Tableau Feature Equivalents&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-20 lia-border-style-double" border="2" style="border-width: 2px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Tableau Feature&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Power BI Equivalent&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Microsoft Learn Link&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Calculated Fields&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;DAX Measures&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/dax/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;DAX Documentation&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Parameters&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Field Parameters / Bookmarks&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/create-reports/power-bi-field-parameters" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Use report readers to change visuals&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Actions&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Drillthrough&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;/ Bookmarks&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/create-reports/desktop-drillthrough" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Drillthrough&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Tableau Prep&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Power Query / Dataflows&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/dataflows-gen2-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Differences between Dataflow Gen1 and Dataflow Gen2&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Tableau Server&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Power BI Service&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="border-width: 2px;"&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/fundamentals/power-bi-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;What is Power BI? Overview of Components and Benefits&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Phase 4: Governance and Deployment&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30); font-size: 24px;"&gt;Workspace Planning (Dev / Test / Prod Separation)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;A proper workspace strategy is essential for&amp;nbsp;governed&amp;nbsp;deployments in Fabric and Power BI.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Fabric supports separate Development, Test, and Production stages using&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://microsoftlearning.github.io/mslearn-fabric/Instructions/Labs/21-implement-cicd.html" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Deployment Pipelines&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;, enabling controlled promotions of semantic models, reports, dataflows, notebooks,&amp;nbsp;lakehouses, and other items.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;You can assign each workspace to a pipeline stage (Dev → Test → Prod) to ensure safe lifecycle management.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Sensitivity Labeling (Microsoft Purview Information Protection)&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Sensitivity labels allow governed classification and protection of data across Fabric items.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/apply-sensitivity-labels" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Sensitivity labels&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;can be applied directly to Fabric items (semantic models, reports, dataflows, etc.) through the item's header flyout or the item settings.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Labels from Microsoft Purview Information Protection enforce data access rules and help organizations meet compliance requirements.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Endorsement &amp;amp; Certification (Promoted, Certified, Master Data)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/governance/endorsement-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Endorsement&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;improves discoverability and trust in shared organizational content.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/endorsement-promote-certify#promote-items" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Promoted&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;: Item creators mark content as recommended for broader use.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/endorsement-promote-certify#certify-items" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Certified&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;: Administrators or authorized reviewers&amp;nbsp;validate&amp;nbsp;content&amp;nbsp;meets organizational quality standards.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/endorsement-promote-certify#request-certification-or-master-data-designation" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Master Data&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Indicates&amp;nbsp;authoritative single‑source‑of‑truth items such as semantic models or&amp;nbsp;lakehouses.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;All Fabric items except dashboards can be promoted or certified; data‑containing items can be&amp;nbsp;designated&amp;nbsp;as Master Data.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://techcommunity.microsoft.com/blog/analyticsonazure/overload-to-optimal-tuning-microsoft-fabric-capacity/4464639" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Monitoring &amp;amp; Capacity &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Planning&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:261,&amp;quot;335559739&amp;quot;:261,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="none"&gt;Determine&amp;nbsp;the&amp;nbsp;appropriate size&amp;nbsp;for fabric capacity when migrating from Tableau to&amp;nbsp;PowerBI.&amp;nbsp;The&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://estimator.fabric.microsoft.com/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Fabric SKU Estimator&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;can generate a SKU recommendation (estimate)&amp;nbsp;for&amp;nbsp;your capacity requirements.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;Ensuring performance and cost efficiency requires ongoing&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/enterprise/optimize-capacity" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;monitoring of your Fabric capacity&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft recommends evaluating workloads using&amp;nbsp;Fabric Capacity Metrics&amp;nbsp;and planning SKU sizes based on real usage.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Fabric uses&amp;nbsp;bursting&amp;nbsp;and&amp;nbsp;smoothing&amp;nbsp;to handle spikes while enforcing capacity limits.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL class="lia-indent-padding-left-60px"&gt;
&lt;LI class="lia-indent-padding-left-60px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Monitoring helps&amp;nbsp;identify&amp;nbsp;high compute usage, background refreshes, and interactive workloads to&amp;nbsp;optimize&amp;nbsp;performance.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-parastyle="heading 2"&gt;Fabric Data Source Connections (&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-parastyle="heading 2"&gt;OneLake&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-parastyle="heading 2"&gt;+ Manage Connections)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Fabric is designed as an&amp;nbsp;end‑to‑end analytics platform&amp;nbsp;that integrates data from&amp;nbsp;many different source systems&amp;nbsp;into a unified environment powered by&amp;nbsp;OneLake,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/connector-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Data Factory&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;Real‑Time Analytics,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/dataflows-gen2-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Dataflows&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;Lakehouses,&amp;nbsp;Warehouses, and&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/mirroring/overview?toc=%2Ffabric%2Fdata-factory%2Ftoc.json&amp;amp;bc=fabric%2Fdata-factory%2Fbreadcrumb%2Ftoc.json" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Mirrored Databases&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;The Strategic Advantage: Semantic Layer + Fabric IQ&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;The semantic layer-first approach sets the foundation for the next evolution in enterprise analytics&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;.&amp;nbsp;&lt;/SPAN&gt;Fabric IQ&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;(announced at Ignite 2025) is Microsoft's semantic intelligence platform that auto-elevates semantic models into&amp;nbsp;&lt;/SPAN&gt;ontologies&lt;SPAN data-ccp-charstyle="Normal"&gt;—structured knowledge graphs that power AI agents, Copilot experiences, and cross-domain data reasoning.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;What this means for your migration:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="22" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Semantic models you build today become the foundation for AI-driven analytics tomorrow&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="23" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Data Agents can reason across multiple semantic models, answering questions that span domains&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="24" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Business users transition from "report consumers" to "data explorers" via natural language interfaces&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Conclusion: Build for the Future, Not Just for Today&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Migrating from Tableau to Power BI is more than a technology swap—&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;it's&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;an opportunity to&amp;nbsp;&lt;/SPAN&gt;re-architect your analytics strategy&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;for the cloud-native, AI-powered era.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;The semantic layer-first approach requires upfront investment in data modeling, DAX&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;expertise&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;, and Fabric platform adoption. But the payoff is transformative:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Consistency&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Single source&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;of truth for all business metrics&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Scalability&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: Semantic models that serve hundreds of reports and thousands of users&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Agility&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;: Changes to business logic propagate instantly across the enterprise&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Future-readiness&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Foundation for Fabric IQ, Data Agents, and AI-driven insights&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;Start your migration with the end in mind:&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;not just convert&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN data-ccp-charstyle="Normal"&gt;dashboards, but a modern, governed, AI-ready analytics platform that scales with your business.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Addressing Key Migration Concerns&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;(1) Why a semantic‑layered model approach is better than recreating Tableau dashboards&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;A semantic‑layered modeling approach is the&amp;nbsp;optimal&amp;nbsp;strategy for migration and is significantly more effective than&amp;nbsp;attempting&amp;nbsp;to recreate Tableau dashboards exactly as they exist. By contrast, Power BI and Fabric encourage a semantic model–first architecture, where all business rules, relationships, calculations, and transformations are centralized in a governed model that serves many dashboards.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;The approach not only provides consistency and reuse across the enterprise but also ensures that report authors build on a single certified version of the truth.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;(2) How semantic-layered model approach reduces the constant redesign caused by changing data needs.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;A semantic‑layered modeling approach directly addresses concern about constant changes and frequent redesigns of dashboards when data evolves. With a semantic layer, changes are absorbed in the model layer—so the logic is updated once and flows automatically into all dependent reports. Combined with Fabric features like&amp;nbsp;OneLake&amp;nbsp;shortcuts, Direct Lake mode, and centralized governance, the semantic layer drastically reduces breakage, minimizes rework, and ensures scalability as data continues to grow and shift.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Normal"&gt;Additional Resources&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="25" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Direct Lake in Microsoft Fabric&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="26" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/how-to-create-data-agent" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Create Fabric Data Agents&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="26" data-aria-level="1"&gt;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://learn.microsoft.com/en-us/fabric/onelake/onelake-shortcuts" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;OneLake Shortcuts&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="28" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/dax/dax-copilot" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Write DAX queries with Copilot - DAX&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="28" data-aria-level="1"&gt;&lt;SPAN data-ccp-props="{}"&gt;&lt;A href="https://learn.microsoft.com/en-us/power-bi/create-reports/copilot-prepare-data-ai" target="_blank" rel="noopener"&gt;Prepare Your Data for AI - Power BI | Microsoft Learn&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 07 May 2026 18:15:11 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/tableau-to-power-bi-migration-semantic-layer-first-approach-for/ba-p/4481009</guid>
      <dc:creator>Rafia_Aqil</dc:creator>
      <dc:date>2026-05-07T18:15:11Z</dc:date>
    </item>
    <item>
      <title>From Bronze to Gold: Data Quality Strategies for ETL in Microsoft Fabric</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/from-bronze-to-gold-data-quality-strategies-for-etl-in-microsoft/ba-p/4476303</link>
      <description>&lt;H2 data-start="612" data-end="633"&gt;&lt;STRONG data-start="615" data-end="631"&gt;Introduction&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="727" data-end="970"&gt;Data fuels analytics, machine learning, and AI&amp;nbsp; but only if it’s trustworthy. Most organizations struggle with inconsistent schemas, nulls, data drift, or unexpected upstream changes that silently break dashboards, models, and business logic.&lt;/P&gt;
&lt;P data-start="972" data-end="1252"&gt;&lt;STRONG data-start="972" data-end="992"&gt;Microsoft Fabric&lt;/STRONG&gt; provides a unified analytics platform with OneLake, pipelines, notebooks, and governance capabilities. When combined with &lt;STRONG data-start="1115" data-end="1137"&gt;Great Expectations&lt;/STRONG&gt;, an open-source data quality framework, Fabric becomes a powerful environment for enforcing data quality at scale.&lt;/P&gt;
&lt;P data-start="1254" data-end="1511"&gt;In this article, we explore how to implement &lt;STRONG data-start="1299" data-end="1350"&gt;enterprise-ready, parameterized data validation&lt;/STRONG&gt; inside Fabric notebooks using Great Expectations&amp;nbsp; including row-count drift detection, schema checks, primary-key uniqueness, and time-series batch validation.&lt;/P&gt;
&lt;P data-start="1513" data-end="1894"&gt;A quick reminder: &lt;STRONG data-start="1531" data-end="1565"&gt;ETL (Extract, Transform, Load)&lt;/STRONG&gt; is the process of pulling raw data from source systems, applying business logic and quality validations, and delivering clean, curated datasets for analytics and AI. While ETL spans the full Medallion architecture, this guide focuses specifically on &lt;STRONG data-start="1816" data-end="1859"&gt;data quality checks in the Bronze layer&lt;/STRONG&gt; using the NYC Taxi sample dataset.&lt;/P&gt;
&lt;P data-start="1898" data-end="2022"&gt;🔗 &lt;STRONG data-start="1901" data-end="1962"&gt;Full implementation is available in my GitHub repository:&lt;/STRONG&gt;&lt;BR data-start="1962" data-end="1965" /&gt;&lt;A href="https://github.com/sallydabbahmsft/Data-Quality-Checks-in-Microsoft-Fabric" target="_blank" rel="noopener"&gt;sallydabbahmsft/Data-Quality-Checks-in-Microsoft-Fabric: Data Quality Checks in Microsoft Fabric&lt;/A&gt;&lt;/P&gt;
&lt;H2 data-start="1576" data-end="1627"&gt;&lt;STRONG data-start="1579" data-end="1625"&gt;Why Data Quality Matters More Than Ever?&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="1628" data-end="1817"&gt;AI and analytics initiatives fail not because of model quality but because the underlying data is inaccurate, incomplete, or inconsistent. Organizations adopting Microsoft Fabric often ask:&lt;/P&gt;
&lt;UL data-start="1819" data-end="2089"&gt;
&lt;LI data-start="1819" data-end="1870"&gt;How can we validate data as it lands in Bronze?&lt;/LI&gt;
&lt;LI data-start="1871" data-end="1946"&gt;How do we detect schema changes before they break downstream pipelines?&lt;/LI&gt;
&lt;LI data-start="1947" data-end="2007"&gt;How do we prevent silent failures, anomalies, and drift?&lt;/LI&gt;
&lt;LI data-start="2008" data-end="2089"&gt;How do we standardize data quality checks across multiple tables and pipelines?&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="2091" data-end="2190"&gt;Great Expectations provides a unified, testable, automation-friendly way to answer these questions.&lt;/P&gt;
&lt;H2 data-start="2197" data-end="2249"&gt;&lt;STRONG data-start="2200" data-end="2247"&gt;Great Expectations in Fabric&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="2250" data-end="2304"&gt;Great Expectations (GX) is an open-source library for:&lt;/P&gt;
&lt;P data-start="2306" data-end="2557"&gt;✔ Declarative data quality rules ("expectations")&lt;BR data-start="2355" data-end="2358" /&gt;✔ Automated validation during ETL&lt;BR data-start="2391" data-end="2394" /&gt;✔ Rich documentation and reporting&lt;BR data-start="2428" data-end="2431" /&gt;✔ Batch-based validation for time-series or large datasets&lt;BR data-start="2489" data-end="2492" /&gt;✔ Integration with Python, Spark, SQL, and cloud data platforms&lt;/P&gt;
&lt;P data-start="2559" data-end="2661"&gt;Fabric notebooks now support Great Expectations natively (via PySpark), enabling engineering teams to:&lt;/P&gt;
&lt;UL data-start="2663" data-end="2838"&gt;
&lt;LI data-start="2663" data-end="2691"&gt;Build reusable DQ suites&lt;/LI&gt;
&lt;LI data-start="2692" data-end="2733"&gt;Parameterize expectations by pipeline&lt;/LI&gt;
&lt;LI data-start="2734" data-end="2780"&gt;Validate full datasets or daily partitions&lt;/LI&gt;
&lt;LI data-start="2781" data-end="2838"&gt;Integrate validation into Fabric pipelines and alerting&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1 data-start="3260" data-end="3312"&gt;&lt;STRONG data-start="3262" data-end="3312"&gt;Data Quality Across the Medallion Architecture&lt;/STRONG&gt;&lt;/H1&gt;
&lt;P data-start="3314" data-end="3399"&gt;This solution follows the &lt;STRONG data-start="3340" data-end="3366"&gt;Medallion Architecture&lt;/STRONG&gt;, with validation at every layer.&lt;/P&gt;
&lt;P data-start="3314" data-end="3399"&gt;This pipeline follows a Medallion Architecture, moving data through the Bronze, Silver, and Gold layers while enforcing data quality checks at every stage.&lt;/P&gt;
&lt;P data-start="3401" data-end="3530"&gt;📘 &lt;EM data-start="3404" data-end="3471"&gt;P.S. Fabric also supports this via built-in Medallion task flows:&lt;/EM&gt;&lt;BR data-start="3471" data-end="3474" /&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/task-flow-overview" target="_blank" rel="noopener"&gt;Task flows overview - Microsoft Fabric | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P data-start="47" data-end="202"&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H3 data-start="3537" data-end="3585"&gt;&lt;STRONG data-start="3544" data-end="3585"&gt;🥉Bronze Layer: Ingestion &amp;amp; Validation&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL data-start="3587" data-end="3711"&gt;
&lt;LI data-start="3587" data-end="3650"&gt;Ingest raw source data into Bronze without transformations.&lt;/LI&gt;
&lt;LI data-start="3651" data-end="3711"&gt;Run foundational DQ checks to ensure structural integrity.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="3713" data-end="3772"&gt;&lt;STRONG data-start="3713" data-end="3735"&gt;Bronze DQ answers:&lt;/STRONG&gt;&lt;BR data-start="3735" data-end="3738" /&gt;➡ &lt;EM data-start="3740" data-end="3772"&gt;Did the data arrive correctly?&lt;/EM&gt;&lt;/P&gt;
&lt;H3 data-start="3779" data-end="3832"&gt;&lt;STRONG data-start="3786" data-end="3832"&gt;🥈Silver Layer: Transformation &amp;amp; Validation&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL data-start="3834" data-end="3956"&gt;
&lt;LI data-start="3834" data-end="3881"&gt;Clean, standardize, and enrich Bronze data.&lt;/LI&gt;
&lt;LI data-start="3882" data-end="3956"&gt;Validate business rules, schema consistency, reference values, and more.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="3958" data-end="4030"&gt;&lt;STRONG data-start="3958" data-end="3980"&gt;Silver DQ answers:&lt;/STRONG&gt;&lt;BR data-start="3980" data-end="3983" /&gt;➡ &lt;EM data-start="3985" data-end="4030"&gt;Is the data accurate and logically correct?&lt;/EM&gt;&lt;/P&gt;
&lt;H3 data-start="4037" data-end="4085"&gt;🥇 &lt;STRONG data-start="4044" data-end="4085"&gt;Gold Layer: Enrichment &amp;amp; Consumption&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL data-start="4087" data-end="4184"&gt;
&lt;LI data-start="4087" data-end="4133"&gt;Produce curated, analytics-ready datasets.&lt;/LI&gt;
&lt;LI data-start="4134" data-end="4184"&gt;Validate metrics, aggregates, and business KPIs.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="4186" data-end="4246"&gt;&lt;STRONG data-start="4186" data-end="4206"&gt;Gold DQ answers:&lt;/STRONG&gt;&lt;BR data-start="4206" data-end="4209" /&gt;➡ &lt;EM data-start="4211" data-end="4246"&gt;Can executives trust the numbers?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 data-start="100" data-end="144"&gt;&lt;STRONG data-start="104" data-end="144"&gt;Recommended Data Quality Validations:&lt;/STRONG&gt;&lt;/H3&gt;
&lt;H4 data-start="146" data-end="183"&gt;&lt;STRONG data-start="151" data-end="183"&gt;Bronze Layer (Raw Ingestion)&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL data-start="184" data-end="606"&gt;
&lt;LI data-start="184" data-end="294"&gt;&lt;STRONG data-start="187" data-end="219"&gt;Ingestion Volume &amp;amp; Row Drift&lt;/STRONG&gt; – Validate total row count and detect unexpected volume drops or spikes.&lt;/LI&gt;
&lt;LI data-start="295" data-end="411"&gt;&lt;STRONG data-start="298" data-end="331"&gt;Schema &amp;amp; Data Type Compliance&lt;/STRONG&gt; – Ensure the table structure and column data types match the expected schema.&lt;/LI&gt;
&lt;LI data-start="412" data-end="502"&gt;&lt;STRONG data-start="415" data-end="445"&gt;Null / Empty Column Checks&lt;/STRONG&gt; – Identify missing or empty values in required fields.&lt;/LI&gt;
&lt;LI data-start="503" data-end="606"&gt;&lt;STRONG data-start="506" data-end="532"&gt;Primary Key Uniqueness&lt;/STRONG&gt; – Detect duplicate records based on the defined composite or natural key.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4 data-start="613" data-end="664"&gt;&lt;STRONG data-start="618" data-end="664"&gt;Silver Layer (Cleaned &amp;amp; Standardized Data)&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL data-start="665" data-end="1134"&gt;
&lt;LI data-start="665" data-end="786"&gt;&lt;STRONG data-start="667" data-end="706"&gt;Reference &amp;amp; Domain Value Validation&lt;/STRONG&gt; – Confirm that values match valid categories, lookups, or reference datasets.&lt;/LI&gt;
&lt;LI data-start="787" data-end="907"&gt;&lt;STRONG data-start="789" data-end="818"&gt;Business Rule Enforcement&lt;/STRONG&gt; – Validate logic constraints (e.g., StartDate &amp;lt;= EndDate, percentages within range).&lt;/LI&gt;
&lt;LI data-start="908" data-end="1020"&gt;&lt;STRONG data-start="910" data-end="941"&gt;Anomaly / Outlier Detection&lt;/STRONG&gt; – Identify unusual patterns or values that deviate from historical behavior.&lt;/LI&gt;
&lt;LI data-start="1021" data-end="1134"&gt;&lt;STRONG data-start="1023" data-end="1061"&gt;Post-Standardization Deduplication&lt;/STRONG&gt; – Ensure standardized and enriched records no longer contain duplicates.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4 data-start="1141" data-end="1191"&gt;&lt;STRONG data-start="1146" data-end="1191"&gt;Gold Layer (Curated, Business-Ready Data)&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL data-start="1192" data-end="1591"&gt;
&lt;LI data-start="1192" data-end="1298"&gt;&lt;STRONG data-start="1194" data-end="1230"&gt;Metric &amp;amp; Aggregation Consistency&lt;/STRONG&gt; – Validate totals, ratios, rollups, and other aggregated metrics.&lt;/LI&gt;
&lt;LI data-start="1299" data-end="1385"&gt;&lt;STRONG data-start="1301" data-end="1329"&gt;KPI Threshold Monitoring&lt;/STRONG&gt; – Trigger alerts when KPIs exceed defined thresholds.&lt;/LI&gt;
&lt;LI data-start="1386" data-end="1481"&gt;&lt;STRONG data-start="1388" data-end="1431"&gt;Data / Feature Drift Detection (for ML)&lt;/STRONG&gt; – Monitor changes in distributions across time.&lt;/LI&gt;
&lt;LI data-start="1482" data-end="1591"&gt;&lt;STRONG data-start="1484" data-end="1519"&gt;Cross-System Consistency Checks&lt;/STRONG&gt; – Compare business metrics across internal systems to ensure alignment.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Implementing Data Quality with Great Expectations in Fabric&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Step 1 - Read data from Lakehouse (parametrized):&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;lakehouse_name = "Bronze"
table_name = "NYC Taxi - Green"

query = f"SELECT * FROM {lakehouse_name}.`{table_name}`"
df = spark.sql(query)
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Step 2 - Create and Register a Suite:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;context = gx.get_context()
suite = context.suites.add(
    gx.ExpectationSuite(name="nyc_bronze_suite")
)
&lt;/LI-CODE&gt;
&lt;H5 data-start="3911" data-end="3979"&gt;&lt;STRONG data-start="3915" data-end="3977"&gt;Step 3 - Add Bronze Layer Expectations (Reusable Function):&lt;/STRONG&gt;&lt;/H5&gt;
&lt;LI-CODE lang="python"&gt;import great_expectations as gx

def add_bronze_expectations(
    suite: gx.ExpectationSuite,
    primary_key_columns: list[str],
    required_columns: list[str],
    expected_schema: list[str],
    expected_row_count: int | None = None,
    max_row_drift_pct: float = 0.2,
) -&amp;gt; gx.ExpectationSuite:
    # 1. Ingestion Count &amp;amp; Row Drift
    if expected_row_count is not None:
        min_rows = int(expected_row_count * (1 - max_row_drift_pct))
        max_rows = int(expected_row_count * (1 + max_row_drift_pct))

        row_count_expectation = gx.expectations.ExpectTableRowCountToBeBetween(
            min_value=min_rows,
            max_value=max_rows,
        )
        suite.add_expectation(expectation=row_count_expectation)

    # 2. Schema Compliance
    schema_expectation = gx.expectations.ExpectTableColumnsToMatchSet(
        column_set=expected_schema,
        exact_match=True,
    )
    suite.add_expectation(expectation=schema_expectation)

    # 3. Required columns: NOT NULL
    for col in required_columns:
        not_null_expectation = gx.expectations.ExpectColumnValuesToNotBeNull(
            column=col
        )
        suite.add_expectation(expectation=not_null_expectation)

    # 4. Primary key uniqueness (if provided)
    if primary_key_columns:
        unique_pk_expectation = gx.expectations.ExpectCompoundColumnsToBeUnique(
            column_list=primary_key_columns
        )
        suite.add_expectation(expectation=unique_pk_expectation)

    return suite&lt;/LI-CODE&gt;
&lt;H5 data-start="4766" data-end="4819"&gt;&lt;STRONG data-start="4770" data-end="4819"&gt;Step 4 - Attach Data Asset &amp;amp; Batch Definition:&lt;/STRONG&gt;&lt;/H5&gt;
&lt;LI-CODE lang="python"&gt;data_source = context.data_sources.add_spark(name="bronze_datasource")
data_asset = data_source.add_dataframe_asset(name="nyc_bronze_data")
batch_definition = data_asset.add_batch_definition_whole_dataframe("full_bronze_batch")
&lt;/LI-CODE&gt;
&lt;H5 data-start="5069" data-end="5100"&gt;&lt;STRONG data-start="5073" data-end="5100"&gt;Step 5 - Run Validation:&lt;/STRONG&gt;&lt;/H5&gt;
&lt;LI-CODE lang="python"&gt;validation_definition = gx.ValidationDefinition(
    data=batch_definition,
    suite=suite,
    name="Bronze_DQ_Validation"
)

results = validation_definition.run(
    batch_parameters={"dataframe": df}
)
print(results)
&lt;/LI-CODE&gt;
&lt;H5 data-start="5343" data-end="5398"&gt;&lt;STRONG data-start="5346" data-end="5396"&gt;7. Optional: Time-Series Batch Validation (Daily Slices)&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;STRONG data-start="5346" data-end="5396"&gt;Fabric does not yet support add_batch_definition_timeseries, so your notebook implements custom logic to validate each day independently:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;dates_df = df.select(F.to_date("lpepPickupDatetime").alias("dt")).distinct()

for d in dates:
    df_day = df.filter(F.to_date("lpepPickupDatetime") == d)
    results = validation_definition.run(batch_parameters={"dataframe": df_day})
&lt;/LI-CODE&gt;
&lt;P data-start="7687" data-end="7700"&gt;This enables:&lt;/P&gt;
&lt;OL data-start="7702" data-end="7805"&gt;
&lt;LI data-start="7702" data-end="7730"&gt;Daily anomaly detection&lt;/LI&gt;
&lt;LI data-start="7731" data-end="7771"&gt;Partition-level completeness checks&lt;/LI&gt;
&lt;LI data-start="7772" data-end="7805"&gt;Early schema drift detection&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2 data-start="6397" data-end="6444"&gt;&lt;STRONG data-start="6400" data-end="6442"&gt;Automating DQ with Fabric Pipelines&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="7855" data-end="7915"&gt;Fabric pipelines can orchestrate your data quality workflow:&lt;/P&gt;
&lt;UL data-start="7917" data-end="8092"&gt;
&lt;LI data-start="7917" data-end="7953"&gt;Trigger notebook after ingestion&lt;/LI&gt;
&lt;LI data-start="7954" data-end="8000"&gt;Pass parameters (table, layer, suite name)&lt;/LI&gt;
&lt;LI data-start="8001" data-end="8053"&gt;Persist DQ results to Lakehouse or Log Analytics&lt;/LI&gt;
&lt;LI data-start="8054" data-end="8092"&gt;Configure alerts in Fabric Monitor&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 data-start="8094" data-end="8121"&gt;&lt;STRONG data-start="8098" data-end="8121"&gt;Production workflow&lt;/STRONG&gt;&lt;/H3&gt;
&lt;OL data-start="8123" data-end="8277"&gt;
&lt;LI data-start="8123" data-end="8144"&gt;Run the notebook&lt;/LI&gt;
&lt;LI data-start="8145" data-end="8174"&gt;Check validation results&lt;/LI&gt;
&lt;LI data-start="8175" data-end="8277"&gt;If failures exist:
&lt;UL data-start="8200" data-end="8277"&gt;
&lt;LI data-start="8200" data-end="8219"&gt;Raise an incident&lt;/LI&gt;
&lt;LI data-start="8223" data-end="8242"&gt;Fail the pipeline&lt;/LI&gt;
&lt;LI data-start="8246" data-end="8277"&gt;Notify the on-call engineer&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-start="8279" data-end="8360"&gt;This creates a &lt;STRONG data-start="8294" data-end="8359"&gt;closed loop of ingestion → validation → monitoring → alerting&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P data-start="6704" data-end="6777"&gt;An example of DQ pipeline:&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Results:&amp;nbsp;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;H2 data-start="7246" data-end="7280"&gt;&lt;STRONG data-start="7249" data-end="7280"&gt; How Enterprises Benefit&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="44" data-end="618" data-is-last-node="" data-is-only-node=""&gt;By standardizing data quality rules across all domains, organizations ensure consistent expectations and uniform validation practices , improved observability makes data quality issues visible and actionable, enabling teams to detect and resolve failures early.&amp;nbsp;&lt;/P&gt;
&lt;P data-start="44" data-end="618" data-is-last-node="" data-is-only-node=""&gt;This, in turn, enhances overall reliability, ensuring downstream transformations and Power BI reports operate on clean, trustworthy data.&lt;/P&gt;
&lt;P data-start="44" data-end="618" data-is-last-node="" data-is-only-node=""&gt;Ultimately, stronger data quality directly contributes to AI readiness high-quality, well-validated data produces significantly better analytics and machine learning outcomes.&lt;/P&gt;
&lt;H2 data-start="7663" data-end="7686"&gt;&lt;STRONG data-start="7666" data-end="7684"&gt;Conclusion&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P data-start="7687" data-end="8046"&gt;Great Expectations + Microsoft Fabric creates a scalable, modular, enterprise-ready approach for ensuring data quality across the entire medallion architecture. Whether you're validating raw ingested data, transformed datasets, or business-ready tables, the approach demonstrated here enables consistency, observability, and automation across all pipelines.&lt;/P&gt;
&lt;P data-start="8048" data-end="8182"&gt;With Fabric’s unified compute, orchestration, and monitoring, teams can now integrate DQ as a first-class citizen not an afterthought.&lt;/P&gt;
&lt;P data-start="8048" data-end="8182"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="8048" data-end="8182"&gt;&lt;STRONG&gt;Links:&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI data-start="8048" data-end="8182"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/onelake/onelake-medallion-lakehouse-architecture" target="_blank" rel="noopener"&gt;Implement medallion lakehouse architecture in Fabric - Microsoft Fabric | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-start="8048" data-end="8182"&gt;&lt;A href="https://greatexpectations.io/expectations/" target="_blank" rel="noopener"&gt;GX Expectations Gallery • Great Expectations&lt;/A&gt;&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Tue, 09 Dec 2025 08:12:15 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/from-bronze-to-gold-data-quality-strategies-for-etl-in-microsoft/ba-p/4476303</guid>
      <dc:creator>Sally_Dabbah</dc:creator>
      <dc:date>2025-12-09T08:12:15Z</dc:date>
    </item>
    <item>
      <title>End-to-End Observability for Azure Databricks: From Infrastructure to Internal Application Logging</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/end-to-end-observability-for-azure-databricks-from/ba-p/4475692</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Author's&lt;/STRONG&gt;&lt;EM&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; &lt;/EM&gt;&lt;SPAN data-contrast="auto"&gt;Peter Lo &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="2085522" data-lia-user-login="PeterLo" class="lia-mention lia-mention-user"&gt;PeterLo​&lt;/a&gt;,&lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt; ​&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN data-contrast="auto"&gt;Amudha Palani &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3298387" data-lia-user-login="amudhapalani" class="lia-mention lia-mention-user"&gt;amudhapalani​&lt;/a&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Geoffrey Rathinapandi &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3120716" data-lia-user-login="geofegeo" class="lia-mention lia-mention-user"&gt;geofegeo​&lt;/a&gt; and Rafia Aqil &amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3072440" data-lia-user-login="Rafia_Aqil" class="lia-mention lia-mention-user"&gt;Rafia_Aqil​&lt;/a&gt;&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Observability in Azure Databricks is the ability to continuously&amp;nbsp;monitor&amp;nbsp;and troubleshoot the health, performance, and usage of data workloads by capturing metrics, logs, and traces.&amp;nbsp;In a structured observability approach, we consider two broad categories of logging: Internal Databricks Logging (within the Databricks environment) and External Databricks Logging (leveraging&amp;nbsp;Azure services). Each plays a distinct role in providing insights.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;By combining internal and external observability mechanisms, organizations can achieve a comprehensive view:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;internal logs&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;enable detailed analysis of Spark jobs and data quality, while&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;external logs&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;ensure global visibility, auditing, and integration with broader monitoring dashboards and alerting systems. &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;The article is organized into two main sections:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="70" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Infrastructure Logging for Azure Databricks&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(external observability)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="70" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Internal Databricks Logging&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&amp;nbsp;(in-platform observability)&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Considerations&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-21"&gt;Addressing key questions upfront ensures your observability strategy is tailored to your organization’s unique workloads, risk profile, and operational needs. By proactively evaluating what to monitor, where to store logs, and who needs access, you can avoid blind spots, streamline incident response, and align monitoring investments with business priorities.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: bold;" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt; What types of workloads are running in Databricks?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why it matters&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Different workloads (e.g., batch ETL, streaming pipelines, ML training, interactive notebooks) have distinct performance profiles and failure modes.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Business impact&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Understanding workload types helps prioritize monitoring for mission-critical processes like real-time fraud detection or daily financial reporting.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="2"&gt;
&lt;LI style="font-weight: bold;" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt; What failure scenarios need to be &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;monitored&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Examples&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Job failures, cluster provisioning errors, quota limits, authentication issues.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="14" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Business impact&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Early detection of failures reduces downtime, improves SLA adherence, and prevents data pipeline disruptions that could affect reporting or customer-facing analytics.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="3"&gt;
&lt;LI style="font-weight: bold;" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt; Where should logs be stored and analyzed?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Options&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Centralized Log Analytics workspace, Azure Storage for archival, Event Hub for streaming analysis.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Business impact&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Centralized logging enables unified dashboards, cross-team visibility, and faster incident response across data engineering, operations, and compliance teams.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="4"&gt;
&lt;LI style="font-weight: bold;" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt; Who needs access to logs and alerts?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Stakeholders&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Data engineers, platform administrators, security analysts, compliance officers.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Business impact&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Role-based access ensures that the right teams can act on insights while&amp;nbsp;maintaining&amp;nbsp;data governance and privacy controls.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Infrastructure Logging&amp;nbsp;for&amp;nbsp;Azure Databricks&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;H4 aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Approach 1: Diagnostic Settings for Azure Databricks&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:246,&amp;quot;335559739&amp;quot;:246,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-monitor/platform/diagnostic-settings?WT.mc_id=Portal-Microsoft_Azure_Monitoring&amp;amp;tabs=portal#create-a-diagnostic-setting" target="_blank" rel="noopener"&gt;Diagnostic settings &lt;/A&gt;in Azure Monitor allow you to capture detailed logs and metrics from your Azure Databricks workspace, supporting operational monitoring, troubleshooting, and compliance. By configuring diagnostic settings at the workspace level, administrators can route Databricks logs—including cluster events, job statuses, and audit logs—to destinations such as Log Analytics, Azure Storage, or Event Hub. This enables unified analysis, alerting, and long-term retention of critical operational data.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Configuration Overview&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:279,&amp;quot;335559739&amp;quot;:279,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="66" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;A class="lia-external-url" href="https://docs.azure.cn/en-us/databricks/admin/account-settings/audit-log-delivery" target="_blank" rel="noopener"&gt;Enable&amp;nbsp;Diagnostic Settings&amp;nbsp;&lt;/A&gt;on the Databricks workspace to route logs to&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-monitor/logs/log-analytics-tutorial" target="_blank" rel="noopener"&gt;Log Analytics Workspace&lt;/A&gt;.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="66" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Logs can also be combined with other logs mentioned below for full Azure Databricks observability.&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="66" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;Here is a Guide to Azure Databricks Diagnostic Settings Log Reference: &lt;A class="lia-external-url" href="https://docs.azure.cn/en-us/databricks/admin/account-settings/audit-log-delivery" target="_blank" rel="noopener"&gt;Configure diagnostic log delivery&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="66" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://docs.azure.cn/en-us/databricks/admin/account-settings/usage-detail-tags" target="_blank" rel="noopener"&gt;Implement tagging strategy&lt;/A&gt;-organizations can gain granular visibility into resource consumption and align spending with business priorities.&amp;nbsp;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="66" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;Default tags: &lt;/STRONG&gt;Automatically applied by Databricks to cloud-deployed resources.&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="66" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;Custom tags: &lt;/STRONG&gt;User-defined tags that you can add to compute resources and serverless workloads.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Use Cases&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:279,&amp;quot;335559739&amp;quot;:279,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="68" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Operational Monitoring&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: Detect job or resource bottlenecks.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="68" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Security &amp;amp; Compliance&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Audit user actions and enforce governance policies.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="68" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Incident Response&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Correlate Databricks logs with infrastructure events for faster troubleshooting.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Best Practices&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:279,&amp;quot;335559739&amp;quot;:279,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="69" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enable only relevant log categories to&amp;nbsp;optimize&amp;nbsp;cost and performance.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="69" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Use role-based access control (RBAC) to secure access to logs.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4 aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Approach 2: Azure Databricks Compute Log Delivery&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Compute log delivery in Azure Databricks enables you to automatically collect and archive logs from Spark driver nodes, worker nodes, and cluster events for both all-purpose and job compute resources. When you create a cluster, you can specify a log delivery location—such as DBFS, Azure Storage, or a Unity Catalog volume—where logs are delivered every five minutes and archived hourly. All logs generated up until the compute resource is terminated are guaranteed to be delivered, supporting troubleshooting, auditing, and compliance.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Configure&lt;/STRONG&gt;: To configure the log delivery location:&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;OL&gt;
&lt;LI&gt;On the compute page, click the&amp;nbsp;Advanced&amp;nbsp;toggle.&lt;/LI&gt;
&lt;LI&gt;Click the&amp;nbsp;Logging&amp;nbsp;tab.&lt;/LI&gt;
&lt;LI&gt;Select a destination type: DBFS or Volumes (&lt;EM&gt;Preview&lt;/EM&gt;).&lt;/LI&gt;
&lt;LI&gt;Enter the&amp;nbsp;Log path.&lt;/LI&gt;
&lt;LI&gt;To store the logs, Databricks creates a subfolder in your chosen log path named after the compute's &lt;STRONG&gt;cluster_id&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Approach 3: Azure Activity Logs&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Whenever you create, update, or delete Databricks resources (such as provisioning a new workspace, scaling a cluster, or modifying network settings), these actions are captured in the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-monitor/platform/activity-log?tabs=log-analytics" target="_blank" rel="noopener"&gt;Activity Log&lt;/A&gt;. This enables teams to track who made changes, when, and what impact those changes had on the environment. Each event in the Activity Log has a particular category that is described in the following document: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-monitor/platform/activity-log-schema#categories" target="_blank" rel="noopener"&gt;Azure Activity Log event schema&lt;/A&gt;.&amp;nbsp;For Databricks, this is especially valuable for:&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;Auditing resource deployments and configuration changes&lt;/LI&gt;
&lt;LI&gt;Investigating failed provisioning or quota errors&lt;/LI&gt;
&lt;LI&gt;Monitoring compliance with organizational policies&lt;/LI&gt;
&lt;LI&gt;Responding to incidents or unauthorized actions&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Use Cases&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:319,&amp;quot;335559739&amp;quot;:319,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Auditing infrastructure-level changes outside the Databricks workspace.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Monitoring provisioning delays or resource availability.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Best Practices&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:319,&amp;quot;335559739&amp;quot;:319,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use Activity Logs in conjunction with other logs for full-stack visibility.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Set up alerts for critical infrastructure events.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Review logs regularly to ensure compliance and operational health.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approach 4: Azure Monitor VM Insights&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Azure Databricks cluster nodes run on Azure virtual machines (VMs), and their infrastructure-level performance can be&amp;nbsp;monitored&amp;nbsp;using&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-monitor/vm/vminsights-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Azure Monitor VM Insights&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(formerly OMS). This approach provides visibility into resource&amp;nbsp;utilization&amp;nbsp;across individual cluster VMs, helping&amp;nbsp;identify&amp;nbsp;bottlenecks that may affect Spark job performance or overall workload efficiency.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Configuration Overview:&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;To enable VM performance monitoring:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-monitor/vm/vminsights-enable?tabs=portal" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Enable VM Insights&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;on the Databricks&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;cluster for&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;VMs.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Monitored Metrics:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Once enabled, VM Insights collects:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-monitor/vm/vminsights-performance" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;CPU usage, Memory consumption, Disk I/O, Network throughput, Process-level statistics.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;These metrics help assess whether Spark workloads are constrained by infrastructure limits, such as insufficient memory or high disk latency.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Considerations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="23" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;This is a&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;standard Azure VM&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;monitoring&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;technique&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;and is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;not specific to Databricks&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="23" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Use &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;role-based access control (RBAC)&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;to secure access to performance data.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approach 5: Virtual Network Flow Logs &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="4"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;For Azure Databricks workspaces deployed in a custom Azure Virtual Network (&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;-injected mode), enabling&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/network-watcher/vnet-flow-logs-overview?tabs=Americas" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Virtual Network Flow Logs&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;&amp;nbsp;provides deep visibility into IP traffic flowing through the virtual network. These logs help&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;monitor&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt; and o&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:279,&amp;quot;335559739&amp;quot;:279,&amp;quot;335559740&amp;quot;:300}"&gt;ptimize resources or support large enterprises that are trying to detect intrusion, flow logs can help. Review common use cases here: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/network-watcher/vnet-flow-logs-overview?tabs=Americas#common-use-cases" target="_blank" rel="noopener"&gt;Vnet Flow Logs Common Usecases&lt;/A&gt; and how logging works here: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/network-watcher/vnet-flow-logs-overview?tabs=Americas#how-logging-works" target="_blank" rel="noopener"&gt;Key properties of virtual network flow logs.&lt;/A&gt; Follow these steps to setup Vnet Flow Logs: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/network-watcher/vnet-flow-logs-manage?tabs=portal#create-a-flow-log" target="_blank" rel="noopener"&gt;Create a flow log&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Configuration Overview&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:279,&amp;quot;335559739&amp;quot;:279,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="61" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Virtual Network Flow Logs are a feature of&amp;nbsp;Azure Network Watcher.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="61" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Optionally, logs can be analyzed using Traffic Analytics for deeper insights.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;These logs help&amp;nbsp;identify:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="63" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Unexpected or unauthorized traffic&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="63" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Bandwidth usage patterns&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="63" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Effectiveness of NSG rules and network segmentation&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="4"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Considerations&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:279,&amp;quot;335559739&amp;quot;:279,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="64" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;NSG flow logging is only available for VNet-injected deployment modes.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="64" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Ensure Network Watcher is enabled in the region where the Databricks workspace is deployed.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="64" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Use Traffic Analytics to visualize trends and detect anomalies in network flows.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approach 6: Spark Monitoring Logging &amp;amp; Metrics&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;The &lt;STRONG&gt;spark-monitoring&lt;/STRONG&gt; library is a Python toolkit designed to interact with the Spark History Server REST API. Its main purpose is to help users programmatically access, analyze, and visualize Spark application metrics and job details after execution. Here’s what it offers:&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;
&lt;P&gt;&lt;STRONG&gt;Application Listing: &lt;/STRONG&gt;Retrieve a list of all Spark applications available on the History Server, including metadata such as application ID, name, start/end time, and status.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;
&lt;P&gt;&lt;STRONG&gt;Job and Stage Details: &lt;/STRONG&gt;Access detailed information about jobs and stages within each application, including execution times, status, and resource usage.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;
&lt;P&gt;&lt;STRONG&gt;Task&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Metrics: &lt;/STRONG&gt;Extract metrics for individual tasks, such as duration, input/output size, and shuffle statistics, supporting performance analysis and bottleneck identification.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Considerations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;The Spark Monitoring Library must be installed, see&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/bliseng/spark-monitoring" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Git Repository here.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Metrics can be exported to external observability platforms for long-term retention and alerting.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;Use cases&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Automated reporting of Spark job performance and resource usage&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;
&lt;P&gt;Batch analysis of completed Spark applications&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;
&lt;P&gt;Integration of Spark metrics into external dashboards or monitoring systems&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;
&lt;P&gt;Post-execution troubleshooting and optimization&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P aria-level="2"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Internal Databricks Logging&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approach 7: Databricks System Tables (Unity Catalog)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;A href="https://docs.databricks.com/aws/en/admin/system-tables/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Databricks System Tables&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;are&amp;nbsp;a recent addition to Azure Databricks observability, offering structured, SQL-accessible insights into workspace usage, performance, and cost. These tables&amp;nbsp;reside&amp;nbsp;in the&amp;nbsp;Unity Catalog&amp;nbsp;and are organized into schemas such as&amp;nbsp;system.billing,&amp;nbsp;system.lakeflow, and&amp;nbsp;system.compute.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt; You can enable System Tables through these steps: &lt;A href="https://notebooks.databricks.com/demos/uc-04-system-tables/_enable_system_tables.html" target="_blank" rel="noopener"&gt;_enable_system_tables - Databricks&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Overview and Capabilities&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;When enabled by an administrator, system tables allow users to query operational metadata directly using SQL. Examples include:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="41" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A href="https://docs.databricks.com/aws/en/admin/system-tables/billing" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;system.billing.usage&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;: Tracks&amp;nbsp;compute&amp;nbsp;usage (CPU&amp;nbsp;core-hours, memory) per job.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="41" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://docs.databricks.com/aws/en/admin/system-tables/compute" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;system.compute.clusters&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Captures cluster lifecycle events.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="41" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://docs.databricks.com/aws/en/admin/system-tables/jobs" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;system.lakeflow.job_run&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&amp;nbsp;Provides job execution details.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Use Cases&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="42" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;A class="lia-external-url" href="https://docs.databricks.com/aws/en/admin/usage/system-tables" target="_blank" rel="noopener"&gt;Cost Monitoring:&lt;/A&gt; Aggregate usage records to&amp;nbsp;identify&amp;nbsp;high-cost jobs or users.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="42" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Import pre-built usage dashboards to your workspaces to monitor account- and workspace-level usage: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/admin/account-settings/usage" target="_blank" rel="noopener"&gt;Usage dashboards &lt;/A&gt;&amp;nbsp;and &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/admin/account-settings/budgets" target="_blank" rel="noopener"&gt;Create and monitor budgets&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="42" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Operational Efficiency: Track job durations, cluster concurrency, and resource utilization.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="42" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;In-Platform BI: Build dashboards in Databricks SQL to visualize usage trends without relying on external billing tools.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Best Practices&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Schedule regular queries to track&amp;nbsp;cost trends,&amp;nbsp;job performance, and&amp;nbsp;resource usage.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;Apply role-based access control to restrict sensitive usage data.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;Integrate system table insights into Databricks SQL dashboards for real-time visibility.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approach 8: Data Quality Monitoring&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;A class="lia-external-url" href="https://www.databricks.com/product/machine-learning/lakehouse-monitoring" target="_blank" rel="noopener"&gt;Data Quality &lt;/A&gt;Monitoring is&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;a native Azure Databricks feature designed to track data quality and machine learning model performance over time. It enables automated monitoring of Delta tables and ML inference outputs, helping teams detect anomalies, data drift, and reliability issues directly within the Databricks environment. Follow these steps to &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/data-profiling/create-monitor-ui" target="_blank" rel="noopener"&gt;enable Data Quality Monitoring&lt;/A&gt;. Data Quality Monitoring supports three profile types:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="45" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Time Series&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Monitors time-partitioned data, computing metrics per time window.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="45" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;Inference&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Tracks prediction drift and anomalies in model request/response logs.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="45" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;Snapshot&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Performs full-table scans to compute metrics across the entire dataset.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="45" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;From the enabling Lakehouse Monitoring, on step 5 you can also enable data profiling to view &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/data-quality-monitoring/data-profiling/monitor-dashboard" target="_blank" rel="noopener"&gt;Data Profiling Dashboards&lt;/A&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Use Cases&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="47" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Data Quality Monitoring: Track null values, column distributions, and schema changes.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="47" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Model Performance Monitoring: Detect concept drift, prediction anomalies, and accuracy degradation.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="47" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Operational Reliability: Ensure consistent data pipelines and ML inference behavior.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approach 9: Databricks SQL Dashboards and Alerts&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Databricks SQL&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/dashboards/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Dashboards&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;and&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/sql/user/alerts/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Alerts&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;provide in-platform observability for operational monitoring, enabling teams to visualize metrics and receive notifications based on SQL query results. This approach complements infrastructure-level monitoring by focusing on application-level conditions, data correctness, and workflow health. Users can build dashboards using Databricks SQL or SQL Warehouses by querying: System tables (e.g., job runs, billing usage), Data Quality Monitoring metric tables, Custom operational datasets. You can create alerts through these steps: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/sql/user/alerts/#create-alert" target="_blank" rel="noopener"&gt;Databricks SQL alerts. &lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Alerting Features&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&amp;nbsp;Databricks SQL supports&amp;nbsp;alerting on query results, allowing users to define conditions that trigger notifications via:&amp;nbsp;Email,&amp;nbsp;Slack (via webhook integration).&amp;nbsp;Alerts can be configured for scenarios such as:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="52" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Job failure counts exceeding thresholds&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="52" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Row count drops in critical tables&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="52" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Cost/Workload spikes or resource usage anomalies&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Considerations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="54" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Alerts are&amp;nbsp;query-driven&amp;nbsp;and run on a schedule; ensure queries are&amp;nbsp;optimized&amp;nbsp;for performance.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="54" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Dashboards and alerts are workspace-specific and require appropriate permissions.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Best Practices&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="55" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use system tables and Data Quality Monitoring metrics as data sources for dashboards.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="55" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Schedule alerts to run at appropriate intervals (e.g., hourly for job failures).&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="55" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Combine internal alerts with external monitoring for full-stack coverage.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134233279&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approach 10: Custom Tags for Workspace-Level Assets&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/admin/account-settings/usage-detail-tags#custom-tags" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Custom tags&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;allow&amp;nbsp;organizations to classify and organize Databricks resources (clusters, jobs, pools, notebooks) for better governance, cost tracking, and observability. Tags are key-value pairs applied at the resource level and can be propagated to Azure for billing and monitoring.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Why Use Custom Tags?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:246,&amp;quot;335559739&amp;quot;:246,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="56" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Cost Attribution&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: Assign tags like&amp;nbsp;Environment=Prod,&amp;nbsp;Project=HealthcareAnalytics&amp;nbsp;to track costs in Azure Cost Management.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="56" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Governance&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Enforce policies based on tags (e.g., restrict high-cost clusters to&amp;nbsp;Environment=Dev).&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="56" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Observability&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Filter logs and metrics by tags for dashboards and alerts.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Taggable Assets&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:246,&amp;quot;335559739&amp;quot;:246,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="57" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Clusters&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: Apply tags during cluster creation via the Databricks UI or REST API.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="57" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Jobs&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Include tags in job configurations for workload-level tracking.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="57" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Instance Pools&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Tag pools to manage shared&amp;nbsp;compute&amp;nbsp;resources.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="57" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Notebooks &amp;amp; Workflows&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;: Use tags in metadata for classification and reporting.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Best Practices&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:246,&amp;quot;335559739&amp;quot;:246,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="59" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Define a&amp;nbsp;standard tag taxonomy&amp;nbsp;(e.g.,&amp;nbsp;Environment,&amp;nbsp;Owner,&amp;nbsp;CostCenter,&amp;nbsp;Compliance).&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="59" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Validate tags regularly to ensure consistency across workspaces.&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="59" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;Use tags in Log Analytics queries for cost and performance dashboards.&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 09 Dec 2025 16:56:23 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/end-to-end-observability-for-azure-databricks-from/ba-p/4475692</guid>
      <dc:creator>Rafia_Aqil</dc:creator>
      <dc:date>2025-12-09T16:56:23Z</dc:date>
    </item>
    <item>
      <title>Architecting the Next-Generation Customer Tiering System</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/architecting-the-next-generation-customer-tiering-system/ba-p/4475326</link>
      <description>&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-background-color-16 lia-border-color-21" border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P data-start="131" data-end="239"&gt;&lt;STRONG&gt;Authors&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="131" data-end="239"&gt;&lt;A href="https://www.linkedin.com/in/sailing-ni-b5ab76180/" target="_blank" rel="noopener"&gt;Sailing Ni&lt;/A&gt;*,&amp;nbsp;&lt;A href="https://www.linkedin.com/in/joy-yu-hi/" target="_blank" rel="noopener"&gt;Joy Yu&lt;/A&gt;*, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/yangpeng1014/" target="_blank"&gt;Peng Yang&lt;/A&gt;*,&amp;nbsp;&lt;A href="https://www.linkedin.com/in/richard-sie/" target="_blank" rel="noopener"&gt;Richard Sie&lt;/A&gt;*,&amp;nbsp;&lt;A href="https://www.linkedin.com/in/russell-yifeiwang/" target="_blank" rel="noopener"&gt;Yifei Wang&lt;/A&gt;*&lt;BR data-start="200" data-end="203" /&gt;&lt;EM data-start="203" data-end="239"&gt;*These authors contributed equally.&lt;/EM&gt;&lt;/P&gt;
&lt;P data-start="241" data-end="420"&gt;&lt;STRONG data-start="241" data-end="257"&gt;Affiliation&lt;/STRONG&gt;&lt;BR data-start="257" data-end="260" /&gt;Master of Science in Business Analytics (MSBA),&lt;BR data-start="307" data-end="310" /&gt;UCLA Anderson School of Management,&lt;BR data-start="345" data-end="348" /&gt;Los Angeles, California 90095, United States&lt;BR data-start="392" data-end="395" /&gt;&lt;EM&gt;(Conducted December 2025)&lt;/EM&gt;&lt;/P&gt;
&lt;P data-start="422" data-end="605"&gt;&lt;STRONG data-start="422" data-end="441"&gt;Acknowledgment&lt;/STRONG&gt;&lt;BR data-start="441" data-end="444" /&gt;This research was conducted as part of a Microsoft-sponsored Capstone Project, led by&amp;nbsp;&lt;A href="https://www.linkedin.com/in/singhj73/" target="_blank" rel="noopener"&gt;Juhi Singh&lt;/A&gt;&amp;nbsp;and&amp;nbsp;&lt;A href="https://www.linkedin.com/in/bonnie-ao-5360b518b/" target="_blank" rel="noopener"&gt;Bonnie Ao&lt;/A&gt; from the Microsoft MCAPS AI Transformation Office.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Microsoft’s global B2B software business classifies customers into four tiers to guide coverage, investment, and sales strategy. However, the legacy tiering framework mixes historical rules with manual heuristics, causing several issues:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Tiers do not consistently reflect customer potential or revenue importance.&lt;/LI&gt;
&lt;LI&gt;Statistical coherence and business KPIs (TPA, TCI, SFI) are not optimized or enforced.&lt;/LI&gt;
&lt;LI&gt;Tier distributions are imbalanced due to legacy ±1 movement and capacity rules.&lt;/LI&gt;
&lt;LI&gt;Sales coverage planning depends on a tier structure not grounded in data.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;To address these limitations, we, UCLA Anderson MSBA class of Dec'25, designed a&amp;nbsp;next-generation KPI-driven tiering architecture. Our objective was to move from a heuristic, static system toward a scalable, transparent, and business-aligned framework.&lt;BR /&gt;Our redesigned tiering system follows five complementary analytical layers, each addressing a specific gap in the legacy process:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Natural Segmentation (Unsupervised Baseline):&amp;nbsp;Identify the intrinsic structure of the customer base using clustering to understand how customers naturally group&lt;/LI&gt;
&lt;LI&gt;Pure KPI-Based Tiering (Upper-Bound Benchmark): Show what tiers would look like if aligned&amp;nbsp;&lt;EM&gt;only&lt;/EM&gt;&amp;nbsp;to business KPIs, quantifying the maximum potential lift and exposing trade-offs.&lt;/LI&gt;
&lt;LI&gt;Hybrid KPI-Aware Segmentation (Our Contribution): Integrate clustering geometry with KPI optimization and business constraints to produce a realistic, interpretable, and deployable tiering system.&lt;/LI&gt;
&lt;LI&gt;Dynamic Tiering (Longitudinal Diagnostics): Analyze historical patterns to understand how companies evolve over time, separating structural tier drift from noise.&lt;/LI&gt;
&lt;LI&gt;Optimization &amp;amp; Resource Allocation (Proof of Concept):&amp;nbsp;Demonstrate how the new tiers could feed into downstream coverage and whitespace prioritization through MIP- and heuristic-based approaches.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Together, these components answer a core strategic question:&lt;/P&gt;
&lt;P&gt;“How should Microsoft tier its global customer base so that investment, coverage, and growth strategy directly reflect business value?”&lt;/P&gt;
&lt;P&gt;Our final architecture transforms tiering from a static classification exercise into a KPI-driven, interpretable, and operationally grounded decision framework suitable for Microsoft’s future AI and data strategy.&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;Solution Architecture Diagram&lt;/STRONG&gt;&lt;/H6&gt;
&lt;img&gt;&lt;SPAN data-image-alt=""&gt;Fig 1. Solution Architecture Diagram&lt;/SPAN&gt;&lt;/img&gt;
&lt;H6&gt;&lt;STRONG&gt;1. Success Metrics Definition&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;Before designing any segmentation system, the first step is to establish success metrics that define what “good” looks like. Without these metrics, models can easily produce clusters that are statistically neat but misaligned with business needs. A clear KPI framework ensures that every model—regardless of method or complexity—is evaluated consistently on both analytical quality and real business impact.&lt;/P&gt;
&lt;P&gt;We define success across two complementary dimensions:&lt;/P&gt;
&lt;P&gt;1.1 Alignment &amp;amp; Segmentation Quality:&lt;/P&gt;
&lt;P&gt;These metrics evaluate whether the segmentation meaningfully separates customers based on business potential.&lt;/P&gt;
&lt;P&gt;1.1.1 Tier Potential Alignment (TPA)&lt;/P&gt;
&lt;P&gt;Measures how well assigned tiers follow the rank order of&amp;nbsp;&lt;EM&gt;PI_acct&lt;/EM&gt;, our composite indicator of future growth potential. Implemented as a Spearman rank correlation, TPA tests whether higher-potential accounts systematically land in higher tiers.&lt;/P&gt;
&lt;P&gt;Step 1 - Formula for PI_acct (Potential Index per Account)&lt;/P&gt;
&lt;img /&gt;&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Step 2 - Formula for TPA (Tier Potential Alignment)&lt;/P&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;𝜌_𝑠 = Spearman rank correlation&lt;/LI&gt;
&lt;LI&gt;Tier Rank = ordinal tier number (Tier A = highest → Tier D = lowest)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Interpretation:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;TPA=1 ⇒ Perfect alignment (higher potential → higher tier)&lt;/LI&gt;
&lt;LI&gt;TPA=0 ⇒ No statistical relationship&lt;/LI&gt;
&lt;LI&gt;TPA&amp;lt;0 ⇒ Misalignment (tiers contradict potential)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;1.1.2 Tier Compactness Index (TCI)&lt;/P&gt;
&lt;P&gt;Measures how homogeneous each tier is. Low within-tier variance on&amp;nbsp;&lt;EM&gt;PI_acct&lt;/EM&gt;&amp;nbsp;or Revenue indicates that customers grouped together truly share similar characteristics, improving interpretability and resource planning.&lt;/P&gt;
&lt;P&gt;(1) Potential-based Compactness - TCI_PI&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;(2) Revenue-based Compactness - TCI_REV&lt;/P&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;TCI=1 ⇒ tiers are tight and well-separated&lt;/LI&gt;
&lt;LI&gt;TCI=0 ⇒ tiers are random or overlapping&lt;/LI&gt;
&lt;LI&gt;TCI&amp;lt;0 ⇒ within-tier variance exceeds total variance (poor grouping)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;1.2 Business Impact&lt;/P&gt;
&lt;P&gt;These metrics test whether the segmentation supports strategic goals, not just statistical structure.&lt;/P&gt;
&lt;P&gt;1.2.1 Strategic Focus Index (SFI)&lt;/P&gt;
&lt;P&gt;Quantifies how much revenue comes from the company’s most strategically important tiers. High SFI means segmentation helps focus investments—sales coverage, specialist time, programs—on the customers that matter most.&lt;/P&gt;
&lt;P&gt;Under the Tier Policy framework, the definition of “strategic” automatically adapts to the number of tiers K - for example, taking the top L tiers (e.g., top 2) or top x % of tiers ranked by mean potential or revenue.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;High SFI: strong emphasis on top strategic segments (potentially efficient but watch concentration risk).&lt;/LI&gt;
&lt;LI&gt;Moderate SFI: balanced focus across tiers.&lt;/LI&gt;
&lt;LI&gt;Low SFI: diffuse portfolio, limited emphasis on priority segment&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;2. Static Segmentation&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;2.1 Pure Unsupervised Clustering&lt;/P&gt;
&lt;P&gt;2.1.1 Model Conclusions at a Glance&lt;/P&gt;
&lt;P&gt;Across all unsupervised models evaluated—Ward, Weighted Ward, K-Medoids, K-Means / K-Means++, and HDBSCAN — only the Ward model (K=4, Policy v2) provides a segmentation that is simultaneously:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;statistically coherent,&lt;/LI&gt;
&lt;LI&gt;business-aligned (high SFI),&lt;/LI&gt;
&lt;LI&gt;geometrically stable (clean Silhouette), and&lt;/LI&gt;
&lt;LI&gt;operationally interpretable.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;All alternative models either distort cluster geometry, collapse SFI, or produce unstable/illogical tier structures.&lt;BR /&gt;Final Recommendation&lt;STRONG&gt;:&lt;/STRONG&gt;&amp;nbsp;Use Ward (K=4, Policy v2) as the natural segmentation baseline.&lt;/P&gt;
&lt;P&gt;2.1.2 High-Level Algorithm Comparison&lt;/P&gt;
&lt;BR /&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;caption&gt;Table 1. Algorithm Comparison&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Model&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Algorithm Summary&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Strengths&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Weaknesses&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Business Use&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Ward&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Variance-minimizing hierarchical merges&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Best balance of TPA/TCI/SFI; stable geometry&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Sensitive to correlated features&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Primary model for segmentation&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Weighted Ward&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Distance reweighted by PI + revenue&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Higher TPA&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Silhouette collapse; unstable&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Not recommended&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;K-Medoids&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Medoid-based dissimilarity minimization&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Robust to outliers&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Cluster compression; weak SFI&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Diagnostic only&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;K-Means / K-Means++&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Squared-distance minimization&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Fast baseline&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;SFI collapse; over-tight clusters&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Numeric benchmark only&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;HDBSCAN&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Density-based clustering with noise&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Good for anomaly detection&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;TPA collapse; noisy tiers; broken PI ordering&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Not suitable for tiering&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2.1.3 Modeling Results&lt;/P&gt;
&lt;BR /&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;caption&gt;Table 2. Unsupervised Clustering Model Results&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;FY26 Baseline (Legacy A+B)&lt;/th&gt;&lt;th&gt;Ward K=4 (Policy v2)&lt;/th&gt;&lt;th&gt;Weighted Ward2-B (α=4, β=0.8, s=0.7, K=5)&lt;/th&gt;&lt;th&gt;Unweighted Ward (Policy v2, K=4)&lt;/th&gt;&lt;th&gt;Unweighted Ward (Policy v2, K=3)&lt;/th&gt;&lt;th&gt;K-Medoids B4 Behavior-only (K=3)&lt;/th&gt;&lt;th&gt;K-means K=4 (Policy v2)&lt;/th&gt;&lt;th&gt;K-means++ K=4 (Policy v2)&lt;/th&gt;&lt;th&gt;HDBSCAN (baseline settings)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;STRONG&gt;TPA&lt;/STRONG&gt;&lt;/th&gt;&lt;td&gt;0.260&lt;/td&gt;&lt;td&gt;0.260&lt;/td&gt;&lt;td&gt;0.860&lt;/td&gt;&lt;td&gt;0.260&lt;/td&gt;&lt;td&gt;0.300&lt;/td&gt;&lt;td&gt;0.520&lt;/td&gt;&lt;td&gt;0.310&lt;/td&gt;&lt;td&gt;0.310&lt;/td&gt;&lt;td&gt;0.040&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;STRONG&gt;TCI_PI&lt;/STRONG&gt;&lt;/th&gt;&lt;td&gt;0.222&lt;/td&gt;&lt;td&gt;0.461&lt;/td&gt;&lt;td&gt;0.772&lt;/td&gt;&lt;td&gt;0.461&lt;/td&gt;&lt;td&gt;0.405&lt;/td&gt;&lt;td&gt;0.173&lt;/td&gt;&lt;td&gt;0.476&lt;/td&gt;&lt;td&gt;0.476&lt;/td&gt;&lt;td&gt;0.004&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;STRONG&gt;TCI_REV&lt;/STRONG&gt;&lt;/th&gt;&lt;td&gt;0.469&lt;/td&gt;&lt;td&gt;0.801&lt;/td&gt;&lt;td&gt;0.640&lt;/td&gt;&lt;td&gt;0.801&lt;/td&gt;&lt;td&gt;0.672&lt;/td&gt;&lt;td&gt;0.002&lt;/td&gt;&lt;td&gt;0.831&lt;/td&gt;&lt;td&gt;0.831&lt;/td&gt;&lt;td&gt;0.062&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;STRONG&gt;SFI&lt;/STRONG&gt;&lt;/th&gt;&lt;td&gt;0.807&lt;/td&gt;&lt;td&gt;0.868&lt;/td&gt;&lt;td&gt;0.817&lt;/td&gt;&lt;td&gt;0.868&lt;/td&gt;&lt;td&gt;0.960&lt;/td&gt;&lt;td&gt;0.656&lt;/td&gt;&lt;td&gt;0.332&lt;/td&gt;&lt;td&gt;0.332&lt;/td&gt;&lt;td&gt;0.719&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;STRONG&gt;Silhouette&lt;/STRONG&gt;&lt;/th&gt;&lt;td&gt;nan&lt;/td&gt;&lt;td&gt;0.560&lt;/td&gt;&lt;td&gt;0.145&lt;/td&gt;&lt;td&gt;0.560&lt;/td&gt;&lt;td&gt;0.604&lt;/td&gt;&lt;td&gt;0.466&lt;/td&gt;&lt;td&gt;0.523&lt;/td&gt;&lt;td&gt;0.523&lt;/td&gt;&lt;td&gt;0.186&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;UL&gt;
&lt;LI&gt;Ward (K=4, Policy v2) remains the strongest performer: SFI ≈ 0.87, Silhouette ≈ 0.56, stable geometric structure.&lt;/LI&gt;
&lt;LI&gt;Weighted Ward raises TPA/PI slightly but Silhouette collapses (~0.15) → structural instability → not viable.&lt;/LI&gt;
&lt;LI&gt;K-Medoids consistently compresses clusters; TPA/TCI gain is offset by TCI_REV collapse and low SFI.&lt;/LI&gt;
&lt;LI&gt;K-Means / K-Means++ tighten numeric clusters but SFI drops to ~0.33 → tiers lose strategic meaning.&lt;/LI&gt;
&lt;LI&gt;HDBSCAN generates large noisy segments; TPA = 0.044, TCI_PI = 0.004, Silhouette = 0.186, and Tier A/B contain negative PI → fundamentally unsuitable.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Conclusion: Only Ward (K=4) produces segmentation with both statistical integrity and business relevance.&lt;/P&gt;
&lt;P&gt;2.1.4 Implications, Limitations, Next Steps&lt;/P&gt;
&lt;P&gt;Implications&lt;/P&gt;
&lt;P&gt;Our current unsupervised segmentation delivers statistically coherent and operationally usable tiers, but several structural findings emerged:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Unsupervised methods reveal the data’s natural shape, not business priorities:&amp;nbsp;Ward/K-means/HDBSCAN can discover separations in the feature space but cannot move clusters toward preferred PI or revenue patterns.&lt;/LI&gt;
&lt;LI&gt;Cluster outcomes cannot guarantee business-desired constraints.
&lt;P&gt;For example:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If Tier A’s PI mean is too low, the model cannot raise it.&lt;/LI&gt;
&lt;LI&gt;If Tier C becomes too large, clustering cannot rebalance it.&lt;/LI&gt;
&lt;LI&gt;If the business wants stronger SFI, clustering alone cannot optimize that objective&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;Some business-critical metrics are only evaluated &lt;EM&gt;after&lt;/EM&gt;&amp;nbsp;clustering, not optimized&amp;nbsp;&lt;EM&gt;within&lt;/EM&gt; clustering: Tier size distributions, average PI per tier, and revenue share are structurally important but not part of the unsupervised objective.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Hence,&lt;/P&gt;
&lt;P&gt;Unsupervised clustering provides a statistically coherent view of the data’s natural structure, but it cannot guarantee business-preferred tier outcomes. The models cannot enforce hard constraints (e.g., desired A/B/C distribution, monotonic PI means, revenue share targets), nor can they adjust tiers when PI is too low or clusters become imbalanced. Additionally, key tier-level KPIs—such as average PI per tier, tier size stability, and revenue distribution—are only evaluated&amp;nbsp;&lt;EM&gt;after&lt;/EM&gt;&amp;nbsp;clustering rather than optimized during it, limiting their influence on the final tier design.&lt;/P&gt;
&lt;P&gt;To overcome these structural limitations, the next stage of the system must incorporate semi-supervised guidance and policy-based optimization, where business KPIs directly shape tier boundaries and ranking. Future iterations will expand the policy beyond PI and revenue to include behavioral and market signals and bring tier-level metrics into the objective function to better align the segmentation with real-world operational priorities.&lt;/P&gt;
&lt;P&gt;2.2 Semi-supervised KPI-Driven Learning&lt;/P&gt;
&lt;P&gt;Composite Score — KPI-Driven Objective for Tiering&lt;/P&gt;
&lt;P&gt;To guide our semi-supervised and hybrid methods, we define a Composite Score that unifies Microsoft’s key business KPIs into a single optimization target. It ensures that all modeling layers—Pure KPI-Based Tiering and Hybrid KPI-Aware Segmentation—optimize toward the same business priorities. Unsupervised clustering cannot optimize business outcomes. A composite objective is needed to consistently evaluate and improve tiering performance across:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Potential uplift (TPA)&lt;/LI&gt;
&lt;LI&gt;Stability of tier structure (SFI)&lt;/LI&gt;
&lt;LI&gt;Within-tier improvement (TCI_PI)&lt;/LI&gt;
&lt;LI&gt;Revenue scale (TCI_REV)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;To align tiering with business priorities, we summarize four key KPIs—TPA, SFI, TCI_PI, and TCI_REV—into one normalized measure:&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;STRONG&gt;Composite Score = 0.35×TPA + 0.35×SFI + 0.30×(TCI_PI + TCI_REV)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This score provides a single benchmark for comparing methods and serves as the optimization target in our semi-supervised and hybrid approaches.&lt;/P&gt;
&lt;P&gt;How It Is Used&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Benchmarking: Compare all methods on a unified scale.&lt;/LI&gt;
&lt;LI&gt;Optimization: Serves as the objective in constrained local search (Method 3).&lt;/LI&gt;
&lt;LI&gt;Rule Learning: Guides the decision-tree logic extracted after optimization.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Why It Matters&lt;/P&gt;
&lt;P&gt;The Composite Score centers the analysis around a single question:&lt;BR /&gt;&amp;nbsp;“Which tiering structure creates the strongest balance of growth potential, stability, and revenue impact?”&lt;/P&gt;
&lt;P&gt;2.3 Pure KPI-Based Tiering&lt;/P&gt;
&lt;P&gt;2.3.1 Model Conclusions at a Glance&lt;/P&gt;
&lt;P&gt;Pure KPI-based tiering shows what the tiers would look like if Microsoft prioritized business KPIs above all else. It achieves the&amp;nbsp;largest KPI improvements, but causes major distribution shifts and violates movement rules, making it operationally unrealistic.&lt;/P&gt;
&lt;P&gt;Final takeaway: Pure KPI tiering is a valuable benchmark for understanding KPI potential, but cannot be operationalized.&lt;/P&gt;
&lt;P&gt;2.3.2 High-Level Algorithm Summary&lt;/P&gt;
&lt;BR /&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;caption&gt;Table 3. Methods of KPI-Based Tiering&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Method&lt;/th&gt;&lt;th&gt;Algorithm Summary&lt;/th&gt;&lt;th&gt;Strengths&lt;/th&gt;&lt;th&gt;Weaknesses&lt;/th&gt;&lt;th&gt;Business Use&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;STRONG&gt;New_Tier_Direct&lt;/STRONG&gt;&amp;nbsp;(PI ranking only)&lt;/th&gt;&lt;td&gt;Rank accounts by PI/KPI score and assign tiers directly&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Highest KPI gains&lt;/STRONG&gt;; preserves overall tier distribution&lt;/td&gt;&lt;td&gt;Moves&amp;nbsp;&lt;STRONG&gt;~20–40%&amp;nbsp;&lt;/STRONG&gt;companies; violates ±1 rule; disrupts continuity&lt;/td&gt;&lt;td&gt;KPI upper-bound benchmark&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;STRONG&gt;Tier_PI_Constrained&lt;/STRONG&gt;&amp;nbsp;(PI ranking + ±1 rule)&lt;/th&gt;&lt;td&gt;Same as above but restrict movement to adjacent tiers&lt;/td&gt;&lt;td&gt;KPI lift + respects movement constraint&lt;/td&gt;&lt;td&gt;Still moves&amp;nbsp;&lt;STRONG&gt;~20–40%;&lt;/STRONG&gt;&amp;nbsp;breaks tier distribution (Tier C inflation)&lt;/td&gt;&lt;td&gt;Diagnostic only&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;2.3.3 Modeling Results&lt;/P&gt;
&lt;BR /&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;caption&gt;Table 4. Modeling Results for KPI-Based Tiering&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;KPI&lt;/th&gt;&lt;th&gt;FY26 Baseline&lt;/th&gt;&lt;th&gt;New_Tier_Direct&lt;/th&gt;&lt;th&gt;Tier_PI_Constrained&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Composite Score&lt;/td&gt;&lt;td&gt;0.5804&lt;/td&gt;&lt;td&gt;0.8105&lt;/td&gt;&lt;td&gt;0.763&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TPA&lt;/td&gt;&lt;td&gt;0.2590&lt;/td&gt;&lt;td&gt;0.8300&lt;/td&gt;&lt;td&gt;0.721&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TCI_PI&lt;/td&gt;&lt;td&gt;0.2220&lt;/td&gt;&lt;td&gt;0.5360&lt;/td&gt;&lt;td&gt;0.492&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TCI_REV&lt;/td&gt;&lt;td&gt;0.4690&lt;/td&gt;&lt;td&gt;0.3970&lt;/td&gt;&lt;td&gt;0.452&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SFI&lt;/td&gt;&lt;td&gt;0.8070&lt;/td&gt;&lt;td&gt;0.6860&lt;/td&gt;&lt;td&gt;0.650&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;New_Tier_Direct&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Composite Score: 0.5804 → 0.8105&lt;/LI&gt;
&lt;LI&gt;TPA increases sharply (0.259 → 0.830)&lt;/LI&gt;
&lt;LI&gt;Violates ±1 rule; major reassignments (~20%–40%)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Tier_PI_Constrained&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Respects ±1 movement&lt;/LI&gt;
&lt;LI&gt;KPI still improves (Composite 0.763)&lt;/LI&gt;
&lt;LI&gt;But tier distribution collapses (Tier C over-expands)&lt;/LI&gt;
&lt;LI&gt;Still ~20–40% movement → not feasible&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Hence:&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&amp;nbsp;No PI-only method balances KPI lift with operational feasibility.&lt;/P&gt;
&lt;P&gt;2.3.4 Limitations &amp;amp; Next Steps&lt;/P&gt;
&lt;P&gt;Pure KPI tiering cannot simultaneously:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;preserve tier distribution,&lt;/LI&gt;
&lt;LI&gt;respect ±1 movement rule, and&lt;/LI&gt;
&lt;LI&gt;deliver consistent KPI improvements.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This creates the need for a hybrid model that combines clustering structure with KPI-aligned tier ordering.&lt;/P&gt;
&lt;P&gt;2.4 Hybrid KPI-Aware Segmentation (Our Contribution)&lt;/P&gt;
&lt;P&gt;2.4.1 Model Conclusions at a Glance&lt;/P&gt;
&lt;P&gt;Our hybrid method blends clustering geometry with KPI-driven optimization, achieving a practical balance between:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;statistical structure,&lt;/LI&gt;
&lt;LI&gt;business constraints, and&lt;/LI&gt;
&lt;LI&gt;KPI improvement.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Final Recommendation:&lt;BR /&gt;This is the segmentation framework we recommend Microsoft to adopt.&lt;/P&gt;
&lt;P&gt;➔&amp;nbsp;&amp;nbsp;&amp;nbsp; It produces the most deployable segmentation by balancing KPI lift with stability and interpretability.&lt;/P&gt;
&lt;P&gt;➔&amp;nbsp;&amp;nbsp;&amp;nbsp; Delivers meaningful KPI improvement while changing only ~5% of accounts, compared to Model B’s 20–40%.&lt;/P&gt;
&lt;P&gt;2.4.2 High-Level Algorithm Summary&lt;/P&gt;
&lt;table border="1" style="width: 99.9978%; height: 306.688px; border-width: 1px;"&gt;&lt;caption&gt;Table 5. Algorithm Comparison&lt;/caption&gt;&lt;tbody&gt;&lt;tr style="height: 38.9311px;"&gt;&lt;td style="height: 38.9311px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Component&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 38.9311px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Purpose&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 38.9311px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Strengths&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 38.9311px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Notes&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.9392px;"&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Constrained Local Search&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Optimize composite KPI score starting from FY26 tiers&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;KPI uplift with strict constraints&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Only small movements allowed (~5%)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.9392px;"&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Tier Movement Constraint (+1/–1)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Ensure realistic transitions&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Guarantees business rules; keeps structure stable&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Limits improvement ceiling&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.9392px;"&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Decision Tree&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Learn interpretable rules from optimized tiers&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Deployable, explainable, reusable&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Accuracy ~80%; tunable with weighting&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.9392px;"&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Closed Loop Optimization&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Improve both rules and allocation iteratively&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Stable + interpretable&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 66.9392px;"&gt;
&lt;P&gt;Future extension&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;2.4.3 Modeling Results&lt;/P&gt;
&lt;BR /&gt;&lt;table border="1" style="width: 60.0913%; height: 220.564px; border-width: 1px;"&gt;&lt;caption&gt;Table 6. Modeling Results for Hybrid Segmentation&lt;/caption&gt;&lt;tbody&gt;&lt;tr style="height: 58.9369px;"&gt;&lt;th style="height: 58.9369px;"&gt;KPI&lt;/th&gt;&lt;th style="height: 58.9369px;"&gt;FY26 Baseline&lt;/th&gt;&lt;th style="height: 58.9369px;"&gt;New_Tier_Direct&lt;/th&gt;&lt;th style="height: 58.9369px;"&gt;Tier_PI_Constrained&lt;/th&gt;&lt;th style="height: 58.9369px;"&gt;ImprovedTier&lt;/th&gt;&lt;/tr&gt;&lt;tr style="height: 21.9077px;"&gt;&lt;td style="height: 21.9077px;"&gt;Composite Score&lt;/td&gt;&lt;td style="height: 21.9077px;"&gt;0.5804&lt;/td&gt;&lt;td style="height: 21.9077px;"&gt;0.8105&lt;/td&gt;&lt;td style="height: 21.9077px;"&gt;0.763&lt;/td&gt;&lt;td style="height: 21.9077px;"&gt;0.6512&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.9299px;"&gt;&lt;td style="height: 34.9299px;"&gt;TPA&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.2590&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.8300&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.721&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.2990&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.9299px;"&gt;&lt;td style="height: 34.9299px;"&gt;TCI_PI&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.2220&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.5360&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.492&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.3450&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.9299px;"&gt;&lt;td style="height: 34.9299px;"&gt;TCI_REV&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.4690&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.3970&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.452&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.5250&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.9299px;"&gt;&lt;td style="height: 34.9299px;"&gt;SFI&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.8070&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.6860&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.650&lt;/td&gt;&lt;td style="height: 34.9299px;"&gt;0.8160&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Fig 2. Visualization of Decision Tree&lt;/img&gt;&lt;img&gt;&lt;U&gt;Fig 3. Explanation of Decision Tree&lt;/U&gt;&lt;/img&gt;
&lt;P&gt;Interpretation of Hybrid Model (Improved Tier)&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Composite Score: 0.5804 → 0.6512&lt;/LI&gt;
&lt;LI&gt;TPA improvement (0.259 → 0.299)&lt;/LI&gt;
&lt;LI&gt;TCI_PI and TCI_REV both rise&lt;/LI&gt;
&lt;LI&gt;SFI improves compared to constrained PI method&lt;/LI&gt;
&lt;LI&gt;Only ~5% of companies move tiers, versus Method 2’s 20–40%&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This makes Method 3 the only method that simultaneously satisfies:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;KPI improvement&lt;/LI&gt;
&lt;LI&gt;original tier distribution&lt;/LI&gt;
&lt;LI&gt;±1 movement rule&lt;/LI&gt;
&lt;LI&gt;low operational disruption&lt;/LI&gt;
&lt;LI&gt;interpretability (via decision tree)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;2.4.4 Conclusion&lt;/P&gt;
&lt;P&gt;Model C offers a pragmatic middle ground:&amp;nbsp;KPI lift close to pure PI tiering, operational impact close to clustering, and full interpretability.&lt;/P&gt;
&lt;P&gt;For Microsoft, this hybrid framework is the most realistic and sustainable segmentation approach&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;3. Dynamic Tier Progression&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;3.1 Model Conclusions at a Glance&lt;/P&gt;
&lt;P&gt;Our benchmarking shows that CatBoost and XGBoost consistently deliver the strongest overall performance, achieving the highest macro-F1 (~0.76) across all tested methods. However, despite these gains, the underlying business pattern remains dominant: tier changes are extremely rare (≈5.4%), and Microsoft’s one-step movement rule severely limits model learnability.&lt;/P&gt;
&lt;P&gt;Dynamic tiering is far more valuable as a diagnostic signal generator than a strict forecasting engine. While models cannot reliably predict future tier transitions, they can surface atypical account patterns, signals of risk, and emerging opportunities that support earlier sales intervention and more proactive account planning.&lt;/P&gt;
&lt;P&gt;3.2 Models&lt;/P&gt;
&lt;P&gt;To predict future model upgrades and downgrades, we tested the following models:&lt;/P&gt;
&lt;BR /&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;caption&gt;Table 7. Models Used for Dynamic Prediction&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Model&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Strengths&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Weaknesses&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;When to Use&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;MLR&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Simple; interpretable; fast baseline&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Weak on imbalanced data&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;When transparency and explainability are needed&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Neural Network&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Captures nonlinear patterns; stronger recall than MLR&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Requires tuning; sensitive to imbalance data&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;When exploring richer behavioral signals&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;CatBoost (baseline, weighted, oversampled)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Strongest overall balance; robust with categorical data; best macro-F1&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Still limited by rarity of tier changes; weighted/oversampled versions risk overfitting&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Default diagnostic model for surfacing atypical account patterns&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;XGBoost (baseline, weighted)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;High performance; scalable; production-ready&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Limited by structural imbalance; weighted versions increase false positives&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;When deploying a stable scoring layer to sales teams&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;Performance was then measured using accuracy, but more importantly, macro recall, precision, and F1, since upgrades and downgrades are much rarer and require balanced evaluation.&lt;/P&gt;
&lt;P&gt;3.3 Model Results&lt;/P&gt;
&lt;P&gt;Across all models, overall accuracy appears high (0.95–0.97), but this metric is dominated by the fact that Tier transitions are extremely rare — only 808 of 15,000 cases (5.4%) moved tiers, while 95% stayed unchanged. According to macro metrics such as recall, precision, and F1, every model struggles to reliably detect upgrades and downgrades.&lt;/P&gt;
&lt;P&gt;CatBoost and XGBoost deliver the strongest balanced results, achieving the highest macro F1 scores (~0.76). However, even these advanced methods only capture half or fewer of the true upgrade and downgrade events. This reinforces that the challenge is not algorithmic performance, but the underlying business pattern: tier movements are infrequent, policy-driven, and weakly connected to observable account features.&lt;/P&gt;
&lt;BR /&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;caption&gt;Table 8. Results for Dynamic Prediction&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td rowspan="2"&gt;
&lt;P&gt;&lt;STRONG&gt;Model&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td rowspan="2"&gt;
&lt;P&gt;&lt;STRONG&gt;Accuracy&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="3"&gt;
&lt;P&gt;&lt;STRONG&gt;Macro&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Recall&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Precision&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;F1 Score&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;MLR&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.95&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.36&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.70&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.37&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Neural Network&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.95&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.58&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.71&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.63&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;CatBoost&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.97&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.94&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.67&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.76&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;CatBoost (Weighted)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.82&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.49&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.82&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.54&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;CatBoost (Oversampling)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.69&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.42&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.75&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.42&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;XGBoost&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.97&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.93&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.67&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.76&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;XGBoost (Weighted)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.97&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.85&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.70&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;0.76&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;3.4 Dynamic Tiering Implications&lt;/P&gt;
&lt;P&gt;Based on the results, our dynamic tiering will have the following implications to Microsoft:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Tier changes are not reliably forecastable under current rules.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;Year-over-year stability is so dominant that even strong ML models cannot surface consistent upgrade or downgrade signals. This suggests that transitions are driven more by sales judgment and tier policy than by measurable account behavior.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The dynamic model is still valuable: just not as a predictor of future tiers.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;Rather than serving as a forecasting engine, this pipeline should be viewed as a diagnostic tool that helps identify accounts with unusual patterns, emerging risks, or outlier behavior worth reviewing.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Dynamic progression complements, rather than replaces, the core segmentation.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;It provides an additional layer of insight alongside clustering and KPI-optimized segmentation, helping Microsoft maintain both structural clarity (static segmentation) and forward-looking awareness (dynamic progression).&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;4. Optimization in Practice&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;To understand how segmentation could support downstream coverage planning, we developed a small optimization proof-of-concept using Microsoft’s seller–tier capacity guidelines (e.g., max accounts per role × tier, geo-entity restrictions, in-person vs remote coverage rules).&lt;/P&gt;
&lt;P&gt;4.1 What We Explored&lt;/P&gt;
&lt;P&gt;Using our final hybrid segmentation (Method 3), we tested a simplified workflow:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Formulate a coverage optimization problem&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;○&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Assign sellers to accounts under constraints such as:&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&amp;nbsp;role × tier capacity limits,&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;single-geo assignment,&lt;/LI&gt;
&lt;LI&gt;±1 tier movement rules,&lt;/LI&gt;
&lt;LI&gt;domain restrictions for Tier C/D.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;○&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This naturally forms a mixed-integer optimization problem (MIP).&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Prototype with standard optimization tools&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;○&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Linear and integer programming formulations using Gurobi, OR-Tools, and Pyomo.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;○&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Heuristic solvers (e.g., local search, greedy reallocation, hill climbing) as faster alternatives.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Simulate coverage scenarios&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;○&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Estimate changes in workload balance and whitespace prioritization under different seller–tier mixes.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;○&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Validate feasibility of the optimization with respect to Microsoft’s operational rules.&lt;/P&gt;
&lt;P&gt;4.2 What We Learned&lt;/P&gt;
&lt;P&gt;Due to limited operational metrics (detailed whitespace values, upgrade probabilities, territory boundaries) and time constraints, we did not build a fully deployable engine. However, the PoC confirmed that:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The segmentation integrates cleanly into a prescriptive segmentation → optimization → coverage pipeline.&lt;/LI&gt;
&lt;LI&gt;A full solver could feasibly allocate sellers under realistic business constraints.&lt;/LI&gt;
&lt;LI&gt;Gurobi-style MIP formulations and simulation-based heuristics are both valid paths for future development.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;In short: the optimization layer is technically viable and aligns naturally with our segmentation design, but its full implementation exceeds the scope of this capstone.&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;5. AI &amp;amp; LLM Integration&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;To make segmentation accessible to a broad set of stakeholders like sales leaders, strategists, and business analysts, we built a conversational tiering assistant powered by LLM-based interpretation of strategic priorities. The assistant allows users to describe their intended segmentation direction in natural language, which the system translates into numerical weights and a refreshed set of tier assignments.&lt;/P&gt;
&lt;P&gt;5.1 LLM Workflow Architecture&lt;/P&gt;
&lt;P&gt;The following flowchart demonstrates how the LLM work:&lt;/P&gt;
&lt;img&gt;Fig 4. End-to-End LM Workflow&lt;/img&gt;
&lt;OL&gt;
&lt;LI&gt;Users communicate their goals using intuitive, high-level language (e.g. “prioritize runway growth”, “reward high-potential emerging accounts”). Front end collects the user’s tiering preference through a chat interface.&lt;/LI&gt;
&lt;LI&gt;The frontend sends this prompt to our cloud FastAPI service on Render.&lt;/LI&gt;
&lt;LI&gt;The LLM interprets the prompt and infers the relative strategic weights and which clustering method to use (KPI-based or Hybrid Approach).&lt;/LI&gt;
&lt;LI&gt;The server applies these weights in the tiering code to generate updated tiers based on the selected approach.&lt;/LI&gt;
&lt;LI&gt;The server returns a refreshed CSV with new tier assignments which can be exported through the chat interface.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;5.2 Why LLMs Matter&lt;/P&gt;
&lt;P&gt;LLMs enhanced the project in three ways:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Interpretation Layer: Helps business users articulate strategy in plain English and convert it to quantifiable modeling inputs.&lt;/LI&gt;
&lt;LI&gt;Explainability Layer: Surfaces cluster drivers, feature differences, and trade-offs across segments in natural language.&lt;/LI&gt;
&lt;LI&gt;Acceleration Layer: Enables real-time exploration of “what-if” tiering scenarios without engineering support.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;This integration transforms segmentation from a static analytical artifact into a dynamic, interactive decision-support tool, aligned with how Microsoft teams actually work.&lt;/P&gt;
&lt;P&gt;5.3 Backend Architecture and LLM Integration Pipeline&lt;/P&gt;
&lt;P&gt;The conversational tiering system is supported by a cloud-based backend designed to translate natural-language instructions into structured model parameters. The service is deployed on Render and implemented with FastAPI, providing a lightweight, high-performance gateway for managing requests, validating inputs, and coordinating LLM interactions.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;FastAPI as the Orchestration Layer - User instructions are submitted through the chat interface and delivered to a FastAPI endpoint as JSON. FastAPI validates this payload using Pydantic, ensuring the request is well-formed before any processing occurs. The framework manages routing, serialization, and error handling, isolating request management from the downstream LLM and computation layers.&lt;/LI&gt;
&lt;LI&gt;LLM Invocation Through the OpenAI API - Once a validated prompt is received, the backend invokes the OpenAI API using a structured system prompt engineered to enforce strict JSON output. The LLM returns four normalized weights reflecting the user’s strategic intent, along with metadata used to determine whether the user explicitly prefers a KPI-based method or the default Hybrid approach. If no method is specified, the system automatically defaults to Hybrid. Low-temperature decoding is used to minimize stochastic variation and ensure repeatability across identical user prompts. All OpenAI keys are securely stored as Render environment variables.&lt;/LI&gt;
&lt;LI&gt;Schema Enforcement and Robust Parsing -To maintain reliability, the backend enforces strict schema validation on LLM responses. The service checks both JSON structure and numeric constraints, ensuring values fall within valid ranges and sum to one. If parsing fails or constraints are violated, the backend automatically reissues a constrained correction prompt. This design prevents malformed outputs and guards against conversational drift.&lt;/LI&gt;
&lt;LI&gt;Render Hosting and Operational Considerations - The backend runs in a stateless containerized environment on Render, which handles service orchestration, HTTPS termination, and environment-variable management. Data required for computation is loaded into memory at startup to reduce latency, and the lightweight tiering pipeline ensures that the system remains responsive even under shared compute resources.&lt;/LI&gt;
&lt;LI&gt;Response Assembly and Delivery - After LLM interpretation and schema validation, the backend applies the resulting weights and streams the recalculated results back to the user as a downloadable CSV. FastAPI’s Streaming Response enables direct transmission from memory without temporary filesystem storage, supporting rapid interactive workflows.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Together, these components form a tightly integrated, cloud-native pipeline: FastAPI handles orchestration, the LLM provides semantic interpretation, Render ensures secure and reliable hosting, and the default Hybrid method ensures consistent behavior unless the user explicitly requests the KPI approach.&lt;/P&gt;
&lt;P&gt;DEMO:&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;A href="https://youtu.be/5F8M3T-bMwA" target="_blank" rel="noopener" data-lia-auto-title-active="0" data-lia-auto-title="Microsoft x UCLA Anderson MSBA - AI-Driven KPI Segmentation Project (LLM demo)"&gt;Microsoft x UCLA Anderson MSBA - AI-Driven KPI Segmentation Project (LLM demo)&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;6. Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Our work delivers a strategic, KPI-driven tiering architecture that resolves the limitations of Microsoft’s legacy system and sets a scalable foundation for future segmentation and coverage strategy. Across all analyses, five differentiators stand out:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Clear separation of natural structure vs. business intent: We diagnose where the legacy system diverges from true customer potential and revenue—establishing the analytical ground truth Microsoft never previously had.&lt;/LI&gt;
&lt;LI&gt;A precise map of strategic trade-offs: By comparing unsupervised, KPI-only, and hybrid approaches, we reveal the operational and business implications behind every tiering philosophy—making the framework decision-ready for leadership.&lt;/LI&gt;
&lt;LI&gt;A business-aligned segmentation ready for deployment: Our hybrid KPI-aware model uniquely satisfies KPI lift, distribution stability, ±1 movement rules, and interpretability—providing a reliable go-forward tiering backbone.&lt;/LI&gt;
&lt;LI&gt;A future-proof architecture that extends beyond static tiers: Dynamic progression modeling and optimization PoC show how tiering can evolve into forecasting, prioritization, whitespace planning, and resource optimization.&lt;/LI&gt;
&lt;LI&gt;A blueprint for Microsoft’s next-generation tiering ecosystem: The system integrates data science, business KPIs, optimization, and LLM interpretability into one cohesive workflow—positioning Microsoft for an AI-enabled tiering strategy.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;In essence, this work transforms customer tiering into a strategic, explainable, and scalable system—ready to support Microsoft’s growth ambitions and future AI initiatives.&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Thu, 04 Dec 2025 21:17:55 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/architecting-the-next-generation-customer-tiering-system/ba-p/4475326</guid>
      <dc:creator>BonnieAo</dc:creator>
      <dc:date>2025-12-04T21:17:55Z</dc:date>
    </item>
    <item>
      <title>Guide for Architecting Azure-Databricks: Design to Deployment</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/guide-for-architecting-azure-databricks-design-to-deployment/ba-p/4473095</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Author's:&lt;/STRONG&gt; Chris Walk &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3072436" data-lia-user-login="cwalk" class="lia-mention lia-mention-user"&gt;cwalk​&lt;/a&gt;, Dan Johnson &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3159849" data-lia-user-login="danjohn1234" class="lia-mention lia-mention-user"&gt;danjohn1234​&lt;/a&gt;, Eduardo dos Santos &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="739078" data-lia-user-login="eduardomdossantos" class="lia-mention lia-mention-user"&gt;eduardomdossantos​&lt;/a&gt;, Ted Kim &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="922564" data-lia-user-login="tekim" class="lia-mention lia-mention-user"&gt;tekim​&lt;/a&gt;, Eric Kwashie &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3283946" data-lia-user-login="ekwashie" class="lia-mention lia-mention-user"&gt;ekwashie​&lt;/a&gt;, Chris Haynes &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3278496" data-lia-user-login="Chris_Haynes" class="lia-mention lia-mention-user"&gt;Chris_Haynes​&lt;/a&gt;, Tayo&amp;nbsp;&lt;SPAN data-contrast="auto"&gt;Akigbogun &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3275282" data-lia-user-login="takigbogun" class="lia-mention lia-mention-user"&gt;takigbogun​&lt;/a&gt; and Rafia Aqil &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3072440" data-lia-user-login="Rafia_Aqil" class="lia-mention lia-mention-user"&gt;Rafia_Aqil​&lt;/a&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Peer Reviewed: Mohamed Sharaf &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="1874288" data-lia-user-login="mohamedsharaf" class="lia-mention lia-mention-user"&gt;mohamedsharaf​&lt;/a&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Note&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;We are currently updating this article to add: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/admin/workspace/serverless-workspaces" target="_blank"&gt;Serverless Workspace&lt;/A&gt; option&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. Also, w&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;hile Terraform is the recommended method for production deployments due to its automation and repeatability, for simplicity in this article we will demonstrate deployment through the Azure portal.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Introduction Video to Databricks:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://www.youtube.com/watch?v=GGqQqjLrJYI" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;what is databricks | introduction - databricks for dummies&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;DESIGN: Architecting a Secure&amp;nbsp;Azure&amp;nbsp;Databricks Environment&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 1: Plan Workspace,&amp;nbsp;Subscription&amp;nbsp;Organization, Analytics&amp;nbsp;Architecture&amp;nbsp;and Compute&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Planning your Azure Databricks environment can follow various arrangements depending on your organization’s structure, governance model, and workload requirements. The following guidance outlines key considerations to help you design a well-architected foundation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;1.1&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Align Workspaces with Business Units&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;A recommended best practice is to align each&amp;nbsp;Azure&amp;nbsp;Databricks workspace with a specific business unit. This approach—often referred to as the “Business Unit Subscription” design pattern—offers several operational and governance advantages.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="27" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Streamlined Access Control&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: Each unit manages its own workspace, simplifying permissions and reducing cross-team access risks. For example, Sales can securely access only their data and notebooks.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="19" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Cost Transparency&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: Mapping workspaces to business units enables&amp;nbsp;accurate&amp;nbsp;cost attribution and supports internal chargeback models. Each workspace can be tagged to a cost center for visibility and accountability.&amp;nbsp;Even within the same workspace,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/admin/usage/?utm_source=chatgpt.com" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;costs can be controlled using system tables&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;that&amp;nbsp;provide&amp;nbsp;detailed&amp;nbsp;usage&amp;nbsp;metrics and resource consumption insights.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Challenges to keep-in-mind:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;While per-BU workspaces have high impact, be mindful of workspace sprawl. If every small team&amp;nbsp;spins up&amp;nbsp;its own workspace, you might end up with dozens or hundreds of workspaces, which introduces management overhead. Databricks recommends a reasonable upper limit (on Azure,&amp;nbsp;roughly&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;20–50 workspaces per account/subscription&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;) because managing “collaboration, access, and security across hundreds of workspaces can become extremely difficult, even with good automation”&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://www.databricks.com/blog/2022/03/10/functional-workspace-organization-on-databricks.html" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;[1]&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;. Each workspace will need governance (user provisioning, monitoring, compliance checks), so there is a balance to strike.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/data-governance/unity-catalog/best-practices" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;1.2 Workspace Alignment and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Shared&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Metastore&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Strategy&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;As you align workspaces with business units,&amp;nbsp;it's&amp;nbsp;essential to understand how Unity Catalog and the&amp;nbsp;metastore&amp;nbsp;fit into your architecture.&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/data-governance/unity-catalog/#metastore" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Unity Catalog is Databricks’&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;unified governance layer that centralizes access control, auditing, and data lineage across workspaces. Each Unity Catalog is backed by a&amp;nbsp;metastore, which acts as the central metadata repository for tables, views, volumes, and other data assets. In Azure Databricks, you can have one&amp;nbsp;metastore&amp;nbsp;per region, and all workspaces within that region share it. This enables consistent governance and simplifies data sharing across teams. If your organization spans multiple regions,&amp;nbsp;you’ll&amp;nbsp;need to plan for&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/data-governance/unity-catalog/best-practices#x-region" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;cross-region sharing&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;, which Unity Catalog supports through&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/delta-sharing/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Delta Sharing&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;By aligning workspaces with business units and connecting them to a shared&amp;nbsp;metastore, you ensure that governance policies are enforced uniformly, while still allowing each team to manage its own data assets securely and independently.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:570,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://github.com/Azure/AzureDatabricksBestPractices/blob/master/toc.md#deploy-workspaces-in-multiple-subscriptions-to-honor-azure-capacity-limits" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;1.&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;3&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;Distribute Workspaces Across Subscriptions&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN data-contrast="auto"&gt;When scaling Azure Databricks, consider not just the number of workspaces, but also how to distribute them across Azure subscriptions. Using multiple Azure subscriptions can serve both organizational needs and technical requirements:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="31" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Environment Segmentation (Dev/Test/Prod):&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;A common pattern is to put production workspaces in a separate Azure subscription from development or test workspaces. This provides an extra layer of isolation.&amp;nbsp;&amp;nbsp;Microsoft highly recommends separating workspaces into prod and dev, in separate subscriptions. This way, you can apply stricter Azure policies or network rules to the prod subscription and keep the dev subscription a bit more open for experimentation without risking prod resources.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="23" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Honor&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Azure Resource Limits&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Azure subscriptions come with certain capacity&amp;nbsp;limits and&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/resources/limits" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Azure Databricks workspaces&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;have their own limits (since&amp;nbsp;it’s&amp;nbsp;a multi-tenant PaaS). If you put all workspaces in one subscription, or all teams in one workspace, you might hit those limits.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Most enterprises naturally end up with multiple subscriptions as they grow – planning this early avoids later migration headaches. If you currently have everything in one subscription, evaluate usage and consider splitting off heavy workloads or prod workloads into a new one to adhere to best practices.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/assessments/21765fea-dfe6-4bc4-8bb7-db9df5a6f6c0/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;1.&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;4&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;Consider Completing&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;Azure Landing Zone Assessment&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;When evaluating and planning your next deployment,&amp;nbsp;it’s&amp;nbsp;essential to ensure that your current landing zone aligns with&amp;nbsp;Microsoft&amp;nbsp;best practices. This helps&amp;nbsp;establish&amp;nbsp;a robust Databricks architecture and minimizes the risk of avoidable issues. Additionally, customers who are early&amp;nbsp;in&amp;nbsp;their cloud journey can&amp;nbsp;benefit&amp;nbsp;from Cloud Assessments—such as an Azure Landing Zone Review and a review of the&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;“Prepare for Cloud Adoption” documentation&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;—to build&amp;nbsp;a strong foundation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;1.5&amp;nbsp;Planning Your Azure Databricks Workspace Architecture&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Your workspace architecture should reflect the operational model of your organization and support the workloads you intend to run, from exploratory notebooks to production-grade ETL pipelines. To support your planning, Microsoft provides several reference architectures that illustrate well-architected patterns for Databricks deployments. These solution ideas can serve as starting points for designing maintainable environments:&amp;nbsp;Simplified Architecture:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/architecture/solution-ideas/articles/small-medium-modern-data-platform" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Modern Data Platform Architecture&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;ETL-Intensive Workload Reference Architecture:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/architecture/solution-ideas/articles/ingest-etl-stream-with-adb" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Building ETL&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Intensive Architecture&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;End-to-End Analytics Architecture:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/architecture/solution-ideas/articles/azure-databricks-modern-analytics-architecture" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Create a Modern Analytics Architecture&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;1.6&amp;nbsp;Planning for that&amp;nbsp;“Right”&amp;nbsp;Compute&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Choosing the right&amp;nbsp;compute&amp;nbsp;setup in Azure Databricks is crucial for&amp;nbsp;optimizing&amp;nbsp;performance and controlling costs, as&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://azure.microsoft.com/en-us/pricing/details/databricks/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;billing is based on Databricks Units (DBUs)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;using a per-second pricing model.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1080,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Classic Compute:&lt;/STRONG&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/compute/cluster-config-best-practices" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;You can fine-tune your own compute&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;by enabling auto-termination and autoscaling, using Photon acceleration, leveraging spot instances, selecting the right VM type and node count for your workload, and choosing SSDs for performance or HDDs for archival storage.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:1,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1800,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Preferred by mature internal teams and developers who need&amp;nbsp;advanced control&amp;nbsp;over clusters—such as custom VM&amp;nbsp;selection, tuning, and specialized configurations.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1080,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Serverless Compute:&lt;/STRONG&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Alternatively,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/compute/serverless/best-practices" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;managed services&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;can simplify operations with built-in optimizations.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:1,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1800,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Removes infrastructure management and offers instant scaling without cluster warm-up, making it ideal for agility and simplicity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;2:&amp;nbsp;Plan the “Right” CIDR Range&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;(Classic Compute)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Note&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: You can skip this step if you plan to use serverless&amp;nbsp;compute&amp;nbsp;for all your resources, as CIDR range planning is not&amp;nbsp;required&amp;nbsp;in serverless deployments.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;When planning CIDR ranges for your Azure Databricks workspace,&amp;nbsp;it's&amp;nbsp;important to ensure your virtual network has enough IP address capacity to support cluster scaling.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Why this matters:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;If you choose a small&amp;nbsp;VNet&amp;nbsp;address space and your analytics workloads grow, you might hit a ceiling where you simply cannot launch more clusters or scale-out because there are no free IPs in the subnet. The subnet sizes—and by extension, the&amp;nbsp;VNet&amp;nbsp;CIDR—determine&amp;nbsp;how many nodes you can. Databricks recommends using a CIDR block between /16 and /24 for the&amp;nbsp;VNet, and up to /26 for the two required subnets: the container subnet and the host subnet.&amp;nbsp;&amp;nbsp;Here’s a&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/vnet-inject#address-space-and-maximum-cluster-nodes" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;reference Microsoft provides&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;If your current workspace’s VNet lacks sufficient IP space for active cluster nodes, you can request a CIDR range update through your Azure Databricks account team as noted in the&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/vnet-inject#address-space-and-maximum-cluster-nodes:~:text=/26.-,Important,-You%20can%27t%20replace" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Microsoft documentation&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;2.1 Considerations for CIDR Range&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="38" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:360,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Workload Type &amp;amp; Concurrency:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Consider what kinds of workloads will run (ETL Pipelines, Machine Learning Notebooks, BI Dashboards, etc.) and how many jobs or clusters may need to run in parallel. High concurrency (e.g.&amp;nbsp;multiple ETL jobs or&amp;nbsp;many interactive clusters) means more nodes running at the same time, requiring a larger pool of IP addresses.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:360,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Data Volume (Historical vs. Incremental):&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;Are you doing a one-time historical data load or only processing new incremental data? A large backfill of terabytes of data may require spinning up&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;a very large&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;&amp;nbsp;cluster (hundreds of nodes) to process in a reasonable time. Ongoing smaller loads might get by with fewer nodes. Estimate how much data needs&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;processing&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 4"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:120,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="32" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:360,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Transformation Complexity:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;The complexity of data transformations or machine learning workloads matters. Heavy transformations (joins, aggregations on big data) or complex model training can&amp;nbsp;benefit&amp;nbsp;more workers. If your use cases include these, you may need larger clusters (more nodes) to meet performance SLAs, which in turn demands more IP addresses available in the subnet.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:360,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Data Sources and Integration:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Consider how your Databricks environment will connect to data. If you have multiple data sources or sinks (e.g.&amp;nbsp;ingest from many event hubs, databases, or IoT streams), you might design multiple dedicated clusters or workflows, potentially all active at once. Also, if using separate job clusters per job (Databricks Jobs), multiple clusters might launch concurrently. All these scenarios increase concurrent node count.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/vnet-inject" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;2&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;.2&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Configuring a Dedicated&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Network (VNet)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;per&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;Workspace&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;with Egress Control&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;By default, Azure Databricks deploys its classic&amp;nbsp;compute&amp;nbsp;resources into a&amp;nbsp;Microsoft-managed virtual&amp;nbsp;network (VNet) within your Azure subscription. While this simplifies setup, it limits control over network configuration. For enhanced security and flexibility,&amp;nbsp;it's&amp;nbsp;recommended to use&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/vnet-inject" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;VNet Injection&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;, which allows you to deploy the&amp;nbsp;compute&amp;nbsp;plane into your own customer-managed&amp;nbsp;VNet. This approach enables secure integration with other Azure services using service endpoints or private endpoints, supports user-defined routes for accessing on-premises data sources, allows traffic inspection via network virtual appliances or firewalls, and&amp;nbsp;provides&amp;nbsp;the ability to configure custom DNS and enforce egress restrictions through network security group (NSG) rules.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Within this&amp;nbsp;VNet&amp;nbsp;(which must&amp;nbsp;reside&amp;nbsp;in the same region and subscription as the Azure Databricks workspace),&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;two&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;subnets are&amp;nbsp;required&amp;nbsp;for Azure Databricks: a container subnet (referred&amp;nbsp;to&amp;nbsp;as private subnet) and a host subnet (referred&amp;nbsp;to&amp;nbsp;as public subnet). To implement front-end Private Link, back-end Private Link, or both, your workspace&amp;nbsp;VNet&amp;nbsp;needs a third subnet that will&amp;nbsp;contain&amp;nbsp;the private endpoint (PrivateLink&amp;nbsp;subnet).&amp;nbsp;It is recommended to&amp;nbsp;also deploy an Azure Firewall for egress control.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;3:&amp;nbsp;Plan&amp;nbsp;Network&amp;nbsp;Architecture&amp;nbsp;for&amp;nbsp;Securing&amp;nbsp;Azure-Databricks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/secure-cluster-connectivity#secure-cluster-connectivity-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;3&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;1&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;Secure Cluster Connectivity&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Secure Cluster Connectivity, also known as No Public IP (NPIP), is a foundational security feature for Azure Databricks deployments. When enabled, it ensures that&amp;nbsp;compute&amp;nbsp;resources within the customer-managed virtual network (VNet) do not have public IP addresses,&amp;nbsp;and no inbound ports are exposed. Instead, each cluster&amp;nbsp;initiates&amp;nbsp;a secure outbound connection to the Databricks control plane using port 443 (HTTPS), through a dedicated relay. This tunnel is used exclusively for administrative tasks, separate from the web application and REST API traffic, significantly reducing the attack surface. For the most secure deployment, Microsoft and Databricks strongly recommend enabling Secure Cluster Connectivity, especially in environments with strict compliance or regulatory requirements. When Secure Cluster Connectivity is enabled, both workspace subnets become private, as cluster nodes&amp;nbsp;don’t&amp;nbsp;have public IP addresses.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;3.2&amp;nbsp;Egress with&amp;nbsp;VNet&amp;nbsp;Injection (NVA)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;For Databricks traffic,&amp;nbsp;you’ll&amp;nbsp;need to assign a UDR to the Databricks-managed&amp;nbsp;VNet&amp;nbsp;with a next hop type of Network Virtual Appliance (NVA)—this could be an Azure Firewall, NAT Gateway, or another routing device. For&amp;nbsp;control&amp;nbsp;plane traffic, Databricks recommends using Azure service tags, which are logical groupings of IP addresses for Azure services and should be routed with the next hop type of internet. This is important because Azure IP ranges can change&amp;nbsp;frequently&amp;nbsp;as&amp;nbsp;new resources&amp;nbsp;are provisioned, and manually&amp;nbsp;maintaining&amp;nbsp;IP lists is not practical. Using service tags ensures that your routing rules automatically stay up to date.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/private-link-standard#introduction-to-front-end-connections-in-a-standard-deployment" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;3&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;3&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;Front-End Connectivity with Azure Private Link&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;(&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Standard Deployment&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;To further enhance security, Azure Databricks supports Private Link for front-end connections. In a standard deployment, Private Link enables users to access the Databricks web application, REST API, and JDBC/ODBC endpoints over a private&amp;nbsp;VNet&amp;nbsp;interface, bypassing the public internet.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;For organizations with no public internet access from user networks, a browser authentication private endpoint is&amp;nbsp;required. This endpoint supports SSO login callbacks from Microsoft Entra ID and is shared across all workspaces in a region using the same private DNS zone. It is typically hosted in a transit&amp;nbsp;VNet&amp;nbsp;that bridges on-premises networks and Azure.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Note&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: There are two deployment types:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/private-link-standard#introduction-to-front-end-connections-in-a-standard-deployment" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;standard&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/private-link-simplified#diagrams" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;simplified&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;. To compare these deployment types, see&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/private-link#deployment-type" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Choose standard or simplified deployment&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/serverless-network-security/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;3&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;4&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;Serverless Compute Networking&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;Azure Databricks offers serverless&amp;nbsp;compute&amp;nbsp;options that simplify infrastructure management and accelerate workload execution. These resources run in a Databricks-managed serverless&amp;nbsp;compute&amp;nbsp;plane, isolated from the public&amp;nbsp;internet&amp;nbsp;and connected to the control plane via the Microsoft backbone network.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="none"&gt;To secure outbound traffic from serverless workloads, administrators can configure Serverless Egress Control using network policies that restrict connections by location, FQDN, or Azure resource type. Additionally,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;Network Connectivity Configurations (NCCs)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;allow centralized management of private endpoints and&amp;nbsp;firewall&amp;nbsp;rules. NCCs can be attached to multiple workspaces and are essential for enabling secure access to Azure services like Data Lake Storage from serverless SQL warehouses.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 class=""&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;DEPLOYMENT: Step-to-Step Implementation using Azure Portal&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;1: Create an Azure Resource Group&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;For each new workspace, create a dedicated Resource Group (to&amp;nbsp;contain&amp;nbsp;the Databricks workspace resource and associated resources). Ensure that&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;all resources are deployed in the same&amp;nbsp;Region&amp;nbsp;and Resource Group&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;(i.e.&amp;nbsp;workspace, subnets...)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;to&amp;nbsp;optimize&amp;nbsp;data movement performance and enhance security.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;2: Deploy&amp;nbsp;Workspace Specific Virtual Network (VNET)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;From your Resource Group, create a Virtual Network.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Under the Security section, enable Azure Firewall.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Deploying an Azure Firewall is recommended for egress control, ensuring that outbound traffic from your Databricks environment is securely managed.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Define address spaces for your Virtual Network (&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Review Step 2 from Design&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/private-link-standard#create-vnet" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;As documented,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;you could create a&amp;nbsp;VNet&amp;nbsp;with these values:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Wingdings&amp;quot;,&amp;quot;469769242&amp;quot;:[9642],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="3"&gt;&lt;SPAN data-contrast="auto"&gt;IP range:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;First remove the default IP&amp;nbsp;range, and&amp;nbsp;then add&amp;nbsp;IP&amp;nbsp;range 10.28.0.0/23.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Wingdings&amp;quot;,&amp;quot;469769242&amp;quot;:[9642],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="3"&gt;&lt;SPAN data-contrast="auto"&gt;Create&amp;nbsp;subnet&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;public-subnet&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;with&amp;nbsp;range&amp;nbsp;10.28.0.0/25.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Wingdings&amp;quot;,&amp;quot;469769242&amp;quot;:[9642],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="3"&gt;&lt;SPAN data-contrast="auto"&gt;Create subnet&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;private-subnet&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;with&amp;nbsp;range&amp;nbsp;10.28.0.128/25.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Wingdings&amp;quot;,&amp;quot;469769242&amp;quot;:[9642],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="3"&gt;&lt;SPAN data-contrast="auto"&gt;Create subnet&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;private-link&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;with range 10.28.1.0/27.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Please note: &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;your IP values can be different depending on your IPAM and available scopes.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Review + Create your Virtual Network.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;3: Deploy&amp;nbsp;Azure-Databricks&amp;nbsp;Workspace&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Now that networking is in place, create the Databricks workspace.&amp;nbsp;Below are&amp;nbsp;detailed steps your organization should review while creating&amp;nbsp;workspace creation:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:360,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;In Azure Portal, search for Azure Databricks and click Create.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Choose the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Subscription&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;RG&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Region&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, select&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Premium,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;enter in&amp;nbsp;“&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Managed Resource Group name&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;”&amp;nbsp;and click Next.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Managed Resource Group-&amp;nbsp;will be created after&amp;nbsp;your Databrick workspace is deployed and&amp;nbsp;contains&amp;nbsp;infrastructure resources for the workspace&amp;nbsp;i.e.&amp;nbsp;VNets, DBFS.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Required&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;Enable&amp;nbsp;“Secure Cluster Connectivity” (No Public IP for clusters), to ensure that Databricks clusters are deployed without public IP addresses&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;(&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Review&amp;nbsp;Section&amp;nbsp;3.1&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Required&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;Enable&amp;nbsp;the&amp;nbsp;option&amp;nbsp;to deploy into your Virtual Network (VNet&amp;nbsp;Injection), also known as “Bring Your Own&amp;nbsp;VNet”&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;(Review&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Section&amp;nbsp;3.2&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;)&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select the Virtual Network created in&amp;nbsp;Step 2.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enter&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Private, Public Subnet&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Names.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="7" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enable or Disable “Deploying&amp;nbsp;Nat Gateway”,&amp;nbsp;according to your workspace&amp;nbsp;requirement.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="8" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Disable “Allow Public Network Access”.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="9" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select “No Azure Databricks Rules” for Required NSG Rules.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="43" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select “Click&amp;nbsp;on&amp;nbsp;add&amp;nbsp;to&amp;nbsp;create a private endpoint”,&amp;nbsp;this will open a panel for private endpoint setup.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="43" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Click “Add” to&amp;nbsp;enter&amp;nbsp;your Private&amp;nbsp;Link&amp;nbsp;details&amp;nbsp;created in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;2&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="43" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Also, ensure that Private DNS zone integration is set to “&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Yes&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;” and that a new Private DNS Zone is created,&amp;nbsp;indicated&amp;nbsp;by (New)privatelink.azuredatabricks.net. Unless an existing DNS zone for this purpose already exists.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="43" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;(Optional)&amp;nbsp;Under Encryption Tab,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/keys/double-encryption?WT.mc_id=Portal-Microsoft_Azure_Databricks" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Enable Infrastructure Encryption&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;if you have&amp;nbsp;requirement&amp;nbsp;for FIPS 140-2. It comes at a&amp;nbsp;cost,&amp;nbsp;it takes time to encrypt and decrypt. By&amp;nbsp;default&amp;nbsp;your data is already encrypted. If you have a standard regulatory requirement (ex.&amp;nbsp;HIPAA).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="43" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;(Optional)&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/security/privacy/security-profile" target="_blank" rel="noopener"&gt;Compliance&amp;nbsp;security profile&lt;/A&gt;-&amp;nbsp;for HIPAA.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="43" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;(Optional)&amp;nbsp;Automatic cluster updates, First Sunday of every Month.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="43" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="7" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Review +&amp;nbsp;Create&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;the workspace and wait for it to deploy.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Step&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;4&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;: Create a private endpoint to support SSO for web browser access&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Note&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: This step is&amp;nbsp;required&amp;nbsp;when front-end Private Link is enabled, and client networks cannot access the&amp;nbsp;public&amp;nbsp;internet.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;After creating your Azure Databricks workspace, if you try to launch it without the proper Private Link configuration, you will see an error&amp;nbsp;like&amp;nbsp;the image below:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;This happens because the workspace is configured to block public network access, and the necessary Private Endpoints (including the&amp;nbsp;browser_authentication&amp;nbsp;endpoint for SSO) are not yet in place.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Create Web-Auth Workspace&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Note&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;Deploy a&amp;nbsp;“dummy”:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;WEB_AUTH_DO_NOT_DELETE_&amp;lt;region&amp;gt; workspace&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;in the same region as your production&amp;nbsp;workspace.&amp;nbsp;Purpose: Host the&amp;nbsp;browser_authentication&amp;nbsp;private endpoint&amp;nbsp;(one&amp;nbsp;required&amp;nbsp;per region).&amp;nbsp;Lock the workspace (Delete lock) to prevent accidental removal.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Follow step 2&amp;nbsp;to create Virtual Network (Vnet)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Follow&amp;nbsp;step 3 and create a&amp;nbsp;VNet&amp;nbsp;injected&amp;nbsp;“dummy”&amp;nbsp;workspace.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;Create Browser Authentication Private Endpoint&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;In Azure Portal, Databricks workspace (dummy), Networking, Private endpoint connections, +&amp;nbsp;Private endpoint.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Resource step:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Target sub-resource:&amp;nbsp;browser_authentication&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Virtual Network step:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;VNet&lt;/STRONG&gt;: Transit/Hub&amp;nbsp;VNet&amp;nbsp;(central network for Private Link)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Subnet&lt;/STRONG&gt;: Private Endpoint subnet in that&amp;nbsp;VNet&amp;nbsp;(not Databricks host subnets)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;DNS step:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Integrate with Private DNS zone: Yes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Zone: privatelink.azuredatabricks.net&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Ensure DNS zone is linked to the Transit&amp;nbsp;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;After creation:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;A-records for *.pl-auth.azuredatabricks.net are auto-created in the DNS zone.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Workspace Connectivity Testing &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;If you have&amp;nbsp;VPN&amp;nbsp;or ExpressRoute,&amp;nbsp;Bastion&amp;nbsp;is not&amp;nbsp;required.&amp;nbsp;However, for the purposes of this article we will be testing our&amp;nbsp;workpace&amp;nbsp;connectivity through Bastion.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;If you&amp;nbsp;don’t&amp;nbsp;have private connectivity and need to test from inside the&amp;nbsp;VNet, Azure Bastion is a convenient&amp;nbsp;option.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;5:&amp;nbsp;Create&amp;nbsp;Storage Account&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;From&amp;nbsp;your Resource Group, click Create and select&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Storage account&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;On the configuration page:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Select Preferred Storage type as: Azure Blob Storage or Azure Data Lake Storage Gen 2.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Choose Performance and Redundancy options based on your business requirements.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Click Next to&amp;nbsp;proceed.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Under the Advanced tab:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Enable Hierarchical namespace&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;under Data Lake Storage Gen2.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Wingdings" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Wingdings&amp;quot;,&amp;quot;469769242&amp;quot;:[9642],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="3"&gt;&lt;SPAN data-contrast="auto"&gt;This is critical for: Directory and file-level operations,&amp;nbsp;Access Control Lists (ACLs).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Under the Networking tab:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Set Public Network Access to Disabled.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Complete the creation process and then create&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;container&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;(s) inside the storage account.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;6:&amp;nbsp;Create Private Endpoints for Workspace Storage Account&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Pre-requisite:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You need to create&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/storage/firewall-support#create-private-endpoints-main" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;two private endpoints&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;from the&amp;nbsp;VNet&amp;nbsp;used for&amp;nbsp;VNet&amp;nbsp;injection to your workspace storage&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;account&amp;nbsp;for the following&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Target sub-resources&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;dfs&amp;nbsp;and blob.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="37" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Navigate&amp;nbsp;to your&amp;nbsp;Storage Account.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="37" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to&amp;nbsp;Networking,&amp;nbsp;Private Endpoints&amp;nbsp;tab&amp;nbsp;and&amp;nbsp;click&amp;nbsp;on&amp;nbsp;to&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;+ Create&amp;nbsp;Private Endpoint.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;In the&amp;nbsp;Create Private Endpoint&amp;nbsp;wizard:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Resource&amp;nbsp;tab:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1800,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Select your&amp;nbsp;Storage Account.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1800,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Set&amp;nbsp;Target sub-resource&amp;nbsp;to&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;dfs&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;for the first endpoint.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Virtual Network tab:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1800,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Choose the&amp;nbsp;VNet&amp;nbsp;you used for&amp;nbsp;VNet&amp;nbsp;injection.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1800,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Select the&amp;nbsp;appropriate&amp;nbsp;subnet.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="37" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Complete the creation process. The private endpoint will be&amp;nbsp;auto&amp;nbsp;approved&amp;nbsp;and visible under&amp;nbsp;Private Endpoints.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="37" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Repeat the process&amp;nbsp;for the second private endpoint:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1800,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;This&amp;nbsp;time&amp;nbsp;set&amp;nbsp;Target sub-resource&amp;nbsp;to&amp;nbsp;blob.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;7: Link Storage and Databricks Workspace:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Create Access Connector&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;In your Resource Group, create an Access Connector for Azure Databricks.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;No&amp;nbsp;additional&amp;nbsp;configuration is required during creation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Assign Role to Access Connector&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to your&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Storage Account&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;Access Control (IAM),&amp;nbsp;Add role assignment.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Role:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Storage Blob Data Contributor&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Assign access to:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Managed Identity&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Under Members:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Click Select members.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Find and select your newly created Access Connector for Azure Databricks.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Save the role assignment.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Copy Resource ID&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="7" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to the Access Connector Overview page.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Copy the Resource ID for later use in Databricks configuration.&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;img /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step&amp;nbsp;8:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/connect/unity-catalog/cloud-storage/external-locations#-option-1-create-an-external-location-using-catalog-explorer" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Link Storage and Databricks Workspace&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to Unity Catalog&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="34" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;In your&amp;nbsp;Databricks Workspace, go to&amp;nbsp;Unity Catalog,&amp;nbsp;External Data&amp;nbsp;and select&amp;nbsp;“Create&amp;nbsp;external&amp;nbsp;Location”&amp;nbsp;button.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Configure External Location&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="30" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select&amp;nbsp;ADLS&amp;nbsp;as the storage type.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="30" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enter the&amp;nbsp;ADLS storage URL&amp;nbsp;in the following format:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="30" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;A href="mailto:abfss://%3ccontainer_name%3e@%3cstorage_account_name%3e.dfs.core.windows.net/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;abfss://&amp;lt;container_name&amp;gt;@&amp;lt;storage_account_name&amp;gt;.dfs.core.windows.net&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;/&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="30" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Update&amp;nbsp;these two&amp;nbsp;parameters: &amp;lt;container_name&amp;gt;&amp;nbsp;and&amp;nbsp;&amp;lt;storage_name&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Provide Access Connector&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="41" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select “Create new storage credential” from&amp;nbsp;Storage&amp;nbsp;credential field.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="41" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Paste the&amp;nbsp;Resource ID&amp;nbsp;of the&amp;nbsp;Access Connector for Azure Databricks&amp;nbsp;(from Step 10) into the&amp;nbsp;Access Connector ID&amp;nbsp;field.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Validate Connection&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Click&amp;nbsp;Submit.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;You should see a&amp;nbsp;“Successful”&amp;nbsp;message confirming the connection.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1080,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Click&amp;nbsp;submit&amp;nbsp;and you should receive a&amp;nbsp;“Successful” message,&amp;nbsp;indicating&amp;nbsp;your connection&amp;nbsp;has succeeded.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="15" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1080,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;You can now create Catalogs&amp;nbsp;and&amp;nbsp;link&amp;nbsp;your secure storage.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/serverless-network-security/serverless-firewall#requirements" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Step &lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;9:&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;Configuring Serverless Compute Networking&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;If your organization plans to use Serverless SQL Warehouses or Serverless Jobs&amp;nbsp;Compute, you must configure Serverless Networking.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Add Network Connectivity Configuration (NCC)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to the&amp;nbsp;Databricks Account Console:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://accounts.azuredatabricks.net/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://accounts.azuredatabricks.net/&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Navigate to Cloud resources,&amp;nbsp;click&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Add Network Connectivity Configuration.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Fill in the required fields and create a new NCC.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Associate NCC with Workspace&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;In the Account Console, go to Workspaces.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select your workspace,&amp;nbsp;click Update Workspace.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;From the Network Connectivity Configuration dropdown, select the NCC you just created.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:2880,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Add Private Endpoint Rule&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="39" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;In Cloud resources, select&amp;nbsp;your NCC,&amp;nbsp;select&amp;nbsp;Private Endpoint Rules&amp;nbsp;and&amp;nbsp;click Add Private Endpoint Rule.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="Times New Roman" data-listid="39" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Provide:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="39" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Resource ID: Enter your&amp;nbsp;Storage Account Resource ID.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Note&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;: this can be found&amp;nbsp;from&amp;nbsp;your storage account, click on “JSON View” top right.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%2." data-font="Times New Roman" data-listid="39" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,4],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%2.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Azure&amp;nbsp;Subresource&amp;nbsp;type:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;dfs&amp;nbsp;&amp;amp; blob.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Approve Pending Connection&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Go to your Storage Account,&amp;nbsp;Networking,&amp;nbsp;Private&amp;nbsp;Endpoints.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;You will see a&amp;nbsp;Pending connection&amp;nbsp;from Databricks.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Approve the connection&amp;nbsp;and you will see the Connection status in your Account Console as ESTABLISHED.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H5&gt;&amp;nbsp;&lt;/H5&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Step 10: Test Your Workspace&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Launch a small test cluster&amp;nbsp;and verify&amp;nbsp;the following:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:360,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;It can start (which means it can talk to the control plane).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;It can read/write from the storage, following the following code to confirm read/write to storage:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/connect/storage/azure-storage#set-spark-properties-to-configure-azure-credentials-to-access-azure-storage" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Set Spark properties to configure Azure credentials to access Azure storage.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Check&amp;nbsp;Private DNS&amp;nbsp;Record&amp;nbsp;has been created.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;(Optional)&amp;nbsp;If on-prem data is needed: try connecting to an on-prem database (using the ExpressRoute path):&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/on-prem-network" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Connect your Azure Databricks workspace to your on-premises network - Azure Databricks | Microsoft Learn.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/getting-started/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Step &lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;11&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Account Console,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Planning Workspace Access Controls&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;and Getting Started&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Once your Azure Databricks workspace is deployed,&amp;nbsp;it's&amp;nbsp;essential to configure access controls and begin onboarding users with the right permissions.&amp;nbsp;From your account console:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://accounts.azuredatabricks.net/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://accounts.azuredatabricks.net/&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;you can centrally manage your environment: add users and groups, enable preview features, and view or configure all your workspaces.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Azure Databricks supports fine-grained access management through Unity Catalog, cluster policies, and workspace-level roles. Start by defining who needs access to what—whether it's notebooks, tables, jobs, or clusters—&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/admin/users-groups/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;and apply least-privilege principles to minimize risk&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;DBFS Limitation:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;DBFS is automatically created upon Databricks Workspace creation. DBFS can be found in your Managed Resource Group. Databricks cannot secure DBFS (see reference image below). If there is a business need to avoid DBFS then you can disable DBFS access following instructions here:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/dbfs/disable-dbfs-root-mounts#disable-dbfs-root-and-mounts" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Disable access to DBFS root and mounts in your existing Azure Databricks workspace.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Use Unity Catalog to manage data access across catalogs, schemas, and tables, and consider implementing cluster policies to standardize compute configurations across teams. To help your teams get started,&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/getting-started/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Microsoft provides a range of tutorials&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and best practice guides:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/getting-started/best-practices" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Best practice articles - Azure Databricks | Microsoft Learn&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azuremigrationblog/introducing-cloud-accelerate-factory-unlock-zero-cost-deployment-assistance-for-/4409779" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Step&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;12&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;: Planning Data Migration&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559740&amp;quot;:276}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;As you prepare to move data into your Azure Databricks environment,&amp;nbsp;it's&amp;nbsp;important to assess your migration strategy early. This includes&amp;nbsp;identifying&amp;nbsp;source systems, estimating data volumes, and&amp;nbsp;determining&amp;nbsp;the&amp;nbsp;appropriate ingestion&amp;nbsp;methods—whether batch, streaming, or hybrid. For organizations with complex migration needs or legacy systems, Microsoft offers specialized support through its internal&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Azure Cloud&amp;nbsp;Accelerated&amp;nbsp;Factory&amp;nbsp;program&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;Reach out to your Microsoft account team to explore&amp;nbsp;nomination&amp;nbsp;for&amp;nbsp;Azure Cloud Accelerated Factory, which&amp;nbsp;provides&amp;nbsp;hands-on guidance, tooling, and best practices to accelerate and streamline your data migration journey.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Summary&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Regular maintenance and governance are as important as the&amp;nbsp;initial&amp;nbsp;design. Continuously review the environment and update configurations as needed to address evolving requirements and threats. For example, tag all resources (workspaces,&amp;nbsp;VNets, clusters, etc.) with clear identifiers (workspace name, environment, department) to track costs and ownership effectively. Additionally, enforce least privilege across the platform: ensure that only necessary users are given admin privileges, and use cluster-level access control to restrict who can create or start clusters.&amp;nbsp;By following the above steps, an organization will have an Azure Databricks architecture that is securely isolated, well-governed, and scalable.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559731&amp;quot;:720,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;References&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="40" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;[1]&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://www.databricks.com/blog/2022/03/10/functional-workspace-organization-on-databricks.html" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;5 Best Practices for Databricks Workspaces&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="40" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;A href="https://github.com/Azure/AzureDatabricksBestPractices/blob/master/toc.md" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;AzureDatabricksBestPractices/toc.md at master · Azure ... - GitHub&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="40" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/admin/workspace/create-workspace" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Deploy a workspace using the Azure Portal&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Additional Links:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Quick Introduction to Databricks:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://www.youtube.com/watch?v=GGqQqjLrJYI" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;what is databricks | introduction - databricks for dummies&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Connect Purview with Azure Databricks:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft-security-blog/step-by-step-guide-integrating-microsoft-purview-with-azure-databricks-and-micro/4459549" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Integrating Microsoft Purview with Azure Databricks&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Secure Databricks Delta Share between Workspaces:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/analyticsonazure/secure-delta-sharing-between-databricks-workspaces-using-ncc-and-private-endpoin/4462428" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Secure Databricks Delta Share for Serverless Compute&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Azure-Databricks Cost Optimization Guide:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/analyticsonazure/azure-databricks-cost-optimization-a-practical-guide/4470235" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Databricks Cost Optimization: A Practical Guide&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Integrate Azure Databricks with Microsoft Fabric&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/blog/analyticsonazure/approaches-to-integrating-azure-databricks-with-microsoft-fabric-the-better-toge/4453643" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Integrating Azure Databricks with Microsoft Fabric&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="6" data-aria-level="1"&gt;&lt;A href="https://www.databricks.com/solutions/accelerators" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Databricks Solution Accelerators for Data &amp;amp; AI&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="7" data-aria-level="1"&gt;&lt;A href="https://azure.microsoft.com/en-us/updates?id=default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Azure updates&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Appendix&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;3.&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;5&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;Understanding Data Transfer (Express Route vs. Public Internet)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class=""&gt;&amp;nbsp;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;For data transfers, your organization must decide to use ExpressRoute or Internet Egress. There are&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;several considerations that can help you&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;determine&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;your choice:&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;BR /&gt;&amp;nbsp;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;3.&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;5&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;.1. Connectivity Model&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;• ExpressRoute: Provides a private, dedicated connection between your on-premises infrastructure and&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Microsoft Azure. It bypasses the public internet entirely and connects through a network service&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;provider.&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;• Internet Egress: Refers to outbound data traffic from Azure to the public internet. This is the default&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;path for most Azure services unless configured otherwise.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;3.6&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;Planning for User-Defined Routes (UDRs)&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;When working with Databricks deployments—especially in&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;-injected workspaces—setting up User&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Defined Routes (UDRs) is a smart move.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;It’s&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;a best&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;practice that helps manage and secure network traffic more effectively. By using UDRs, teams can steer traffic between Databricks components and external services in a controlled way, which not only boosts security but also supports compliance efforts.&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;BR /&gt;&amp;nbsp;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;3.6.1&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;UDRs and Hub and Spoke Topology&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;If your Databricks workspace is deployed into your own virtual network (&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;),&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;you’ll&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;need to&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;configure standard user-defined routes (UDRs) to manage traffic flow. In a typical hub-and-spoke architecture,&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;UDRs are used to route all traffic from the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;spoke&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;VNets&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;to the hub&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;3.6.2&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Hub and Spoke with VWANHUB&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;If your Databricks workspace is deployed into your own virtual network (&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;) and is peered to a Virtual WAN (VWAN) hub as the primary connectivity hub into Azure, a user-defined route (UDR) is not required—provided that a private traffic routing policy or internet traffic routing policy is configured in the VWAN hub.&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;3.6.&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;3&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Use of NVAs and Service Tags&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;For Databricks traffic,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;you’ll&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;need to assign a UDR to the Databricks-managed&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;VNet&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;with a next hop type of Network Virtual Appliance (NVA)—this could be an Azure Firewall, NAT Gateway, or another routing device. For&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;control&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;plane traffic, Databricks recommends using Azure service tags, which are logical groupings of IP addresses for Azure services and should be routed with the next hop type of internet. This is important because Azure IP ranges can change&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;frequently&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;as&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;new resources&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;are provisioned, and manually&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;maintaining&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;IP lists is not practical. Using service tags ensures that your routing rules automatically stay up to date.&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;3.6.&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;4&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Default Outbound Access Retirement (Non-Serverless&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Compute) Microsoft&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;is&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;retiring&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;default outbound internet access for new deployments starting September 30,2025. Going forward, outbound&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;connectivity will require an explicit configuration using an NVA, NAT Gateway, Load Balancer, or Public IP address. Also, note that using a Public IP Address in the deployment is discouraged for Security purposes, and it is recommended to deploy the workspace in a ‘Secure Cluster Connectivity ration.”&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;Configure&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;connectivity will require an explicit configuration using an NVA, NAT Gateway, Load Balancer, or Public IP address. Also, note that using a Public IP Address in the deployment is discouraged for Security purposes, and it is recommended to deploy the workspace in a ‘Secure Cluster Connectivity&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;&amp;nbsp;ration.&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="No Spacing"&gt;”&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 04 May 2026 16:07:44 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/guide-for-architecting-azure-databricks-design-to-deployment/ba-p/4473095</guid>
      <dc:creator>Rafia_Aqil</dc:creator>
      <dc:date>2026-05-04T16:07:44Z</dc:date>
    </item>
    <item>
      <title>Azure Databricks Cost Optimization: A Practical Guide</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/azure-databricks-cost-optimization-a-practical-guide/ba-p/4470235</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;&lt;STRONG&gt;Co-Authored by:&lt;/STRONG&gt; Sanjeev Nair &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="220821" data-lia-user-login="Sanjeev Nair" class="lia-mention lia-mention-user"&gt;Sanjeev Nair​&lt;/a&gt; and Rafia Aqil &lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="3072440" data-lia-user-login="Rafia_Aqil" class="lia-mention lia-mention-user"&gt;Rafia_Aqil​&lt;/a&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;This guide walks through a proven approach to Databricks cost optimization, structured in three phases: Discovery, Cluster/Data/Code Best Practices, and Team Alignment &amp;amp; Next Steps.&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Phase 1: Discovery&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;H5 class="" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Assessing Your Current State&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;The following&amp;nbsp;questions are designed to guide your&amp;nbsp;initial&amp;nbsp;assessment and help you&amp;nbsp;identify&amp;nbsp;areas for improvement. Documenting answers to each will provide a baseline for optimization and inform the next phases of your cost management strategy.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-10" border="3" style="width: 98.1481%; border-width: 3px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Environment &amp;amp; Organization&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cluster Management&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cost Optimization&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Data Management&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Performance Monitoring&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Future Planning&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What is the current scale of your Databricks environment?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;How many workspaces do you have?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;How are your workspaces organized (e.g., by environment type, region, use case)?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;How many clusters are deployed?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;How many users are active?&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What are the primary use cases for Databricks in your organization?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Data engineering&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Data science&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Machine learning&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Business intelligence&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;How are clusters currently managed?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Manual configuration&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Automated scripts&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Databricks REST API&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Cluster policies&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What is the average cluster uptime?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Hours per day&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Days per week&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What is the average cluster&amp;nbsp;utilization&amp;nbsp;rate?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;CPU usage&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Memory usage&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What is the current monthly spend on Databricks?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Total cost&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Breakdown by workspace&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Breakdown by cluster&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What cost management tools are currently in use?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Azure Cost Management&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Third-party tools&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Are there any existing cost optimization strategies in place?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Reserved instances&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Spot instances&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Cluster auto-scaling&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What is the current data storage strategy?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Data lake&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Data warehouse&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Hybrid&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What is the average data ingestion rate?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;GB per day&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Number of files&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What is the average data processing time?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;ETL jobs&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Machine learning models&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What types of data formats are used in your environment?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Delta Lake&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Parquet&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;JSON&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;CSV&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Other formats relevant to your workloads&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What performance monitoring tools are currently in use?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Databricks Ganglia&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Azure Monitor&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Third-party tools&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What are the key performance metrics tracked?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Job execution time&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Cluster performance&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Data processing speed&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Are there any planned expansions or changes to the Databricks environment?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;New use cases&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Increased data volume&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Additional&amp;nbsp;users&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;What are the long-term goals for Databricks cost optimization?&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Reducing overall spend&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Improving resource utilization &amp;amp; cost attribution&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;Enhancing performance&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:160,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 class=""&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Understanding Databricks Cost Structure&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Total Cost = Cloud Cost + DBU Cost&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cloud Cost:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Compute (VMs, networking, IP addresses), storage (ADLS,&amp;nbsp;MLflow&amp;nbsp;artifacts), other services (firewalls), cluster type (serverless compute, classic compute)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="20" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;DBU Cost:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Workload size, cluster/warehouse size, photon acceleration, compute runtime, workspace tier, SKU type (Jobs, Delta Live Tables, All Purpose Clusters, Serverless), model serving, queries per second, model execution time&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Diagnose Cost and Issues&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:299,&amp;quot;335559739&amp;quot;:299}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Effectively diagnosing cost and performance issues in Databricks requires a structured approach. Use the following steps and metrics to gain visibility into your environment and uncover actionable insights.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;1. &lt;/STRONG&gt;&lt;STRONG&gt;Identify Costly Workloads&lt;/STRONG&gt;&lt;/H6&gt;
&lt;OL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/admin/account-settings/usage" target="_blank" rel="noopener"&gt;Account Console Usage Reports:&lt;/A&gt;&amp;nbsp;&lt;/STRONG&gt;Review usage reports to identify usage breakdowns by product, SKU name, and custom tags.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI style="list-style-type: none;"&gt;&amp;nbsp;&amp;nbsp;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Usage Breakdown by Product and SKU: &lt;/STRONG&gt;Helps you understand which services and compute types (clusters, SQL warehouses, serverless options) are consuming the most resources.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Custom Tags for Attribution: &lt;/STRONG&gt;Tags allow you to attribute costs to teams, projects, or departments, making it easier to identify high-cost areas.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Workflow and Job Analysis: &lt;/STRONG&gt;By correlating usage data with workflows and jobs, you can pinpoint long-running or resource-heavy workloads that drive costs.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI style="list-style-type: none;"&gt;&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Focus on Long-Running Workloads:&amp;nbsp;&lt;/STRONG&gt;Examine workloads with extended runtimes or high resource utilization.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI style="list-style-type: none;"&gt;&lt;img /&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Key Question: &lt;/STRONG&gt;Which pipelines or workloads are driving the majority of your costs?&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Now That You’ve Identified Long-Running Workloads, Review These Key Areas:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;H6 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;2. Review Cluster Metrics&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;CPU Utilization&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Track guest,&amp;nbsp;iowait, idle,&amp;nbsp;irq, nice,&amp;nbsp;softirq, steal, system, and user times to understand how&amp;nbsp;compute&amp;nbsp;resources are being used.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Memory Utilization&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Monitor used, free, buffer, and cached memory to&amp;nbsp;identify&amp;nbsp;over- or under-utilization.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="21" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key Question&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Is your cluster over- or under-utilized? Are resources being wasted or stretched too thin?&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none; font-weight: bold;"&gt;
&lt;H6&gt;&lt;STRONG&gt;&amp;nbsp;3.&amp;nbsp;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Review SQL Warehouse Metrics&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;OL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Live Statistics&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&amp;nbsp;&lt;/STRONG&gt;Monitor&amp;nbsp;warehouse status, running/queued queries, and current cluster count.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Time Scale Filter&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Analyze query and cluster activity over different&amp;nbsp;time frames&amp;nbsp;(8 hours, 24 hours, 7 days, 14 days).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Peak Query Count Chart&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&amp;nbsp;Identify&amp;nbsp;periods of high concurrency.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Completed Query Count Chart&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Track throughput and query success/failure rates.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Running Clusters Chart&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&amp;nbsp;&lt;/STRONG&gt;Observe&amp;nbsp;cluster allocation and recycling events.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Query History Table&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Filter and analyze queries by user, duration, status, and statement type.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Key Question&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Is your SQL Warehouse over- or under-utilized? Are resources being wasted or stretched too thin?&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL&gt;
&lt;LI style="list-style-type: none;"&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H6 class="lia-indent-padding-left-30px"&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;4. Review Spark UI&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="23" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Stages Tab&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Look for skewed data, high input/output, and shuffle times. Uneven task durations may&amp;nbsp;indicate&amp;nbsp;data skew or inefficient data handling.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="23" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Jobs Timeline&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&amp;nbsp;Identify&amp;nbsp;long-running jobs or stages that consume excessive resources.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="23" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Stage Analysis&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&amp;nbsp;Determine&amp;nbsp;if stages are I/O bound or suffering from data skew/spill.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="23" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Executor Metrics&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&amp;nbsp;Monitor&amp;nbsp;memory usage, CPU&amp;nbsp;utilization, and disk I/O. Frequent garbage collection or high memory usage may signal the need for better resource allocation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H6 class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;4.1&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;. Spark UI: Storage &amp;amp; Jobs Tab&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Storage Level&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Check if data is stored in memory, on disk, or both.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Size&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;Assess the size of cached data.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Job Analysis&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Investigate jobs that dominate the timeline or have unusually long durations. Look for gaps caused by complex execution plans, non-Spark code, driver overload, or cluster malfunction.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H6 class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;4.2&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;. Spark UI: Executor Tab&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Storage Memory&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Compare used vs. available memory.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Task Time (Garbage Collection)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Review long tasks and garbage collection times.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Shuffle Read/Write&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;:&lt;/STRONG&gt; Measure data transferred between stages.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H6 class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;5.&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Additional Diagnostic Methods&lt;/STRONG&gt;&lt;/H6&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/admin/system-tables/" target="_blank" rel="noopener"&gt;System Tables in Unity Catalog&lt;/A&gt;:&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Query system tables for cost attribution and resource usage trends.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/admin/system-tables/jobs-cost#cost-observability-queries" target="_blank" rel="noopener"&gt;Cost Observability Queries&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Tagging Analysis:&lt;/STRONG&gt;&lt;BR /&gt;Use tags to identify which teams or projects consume the most resources.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Dashboards &amp;amp; Alerts:&lt;/STRONG&gt;&lt;BR /&gt;Set up cost dashboards and budget alerts for proactive monitoring.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 aria-level="2"&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Phase 2: Cluster/Code/Data Best Practices Alignment&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;H5 aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Cluster UI Configuration and Cost Attribution&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Effectively configuring clusters/workloads in Databricks is essential for balancing performance, scalability, and cost.&amp;nbsp;Tunning&amp;nbsp;settings and features when used&amp;nbsp;strategically&amp;nbsp;can help organizations maximize resource efficiency and minimize unnecessary spending.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;H5 aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Key Configuration Strategies&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;1. Reduce Idle Time:&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;Clusters to incur costs even when not actively processing workloads. To avoid paying for unused resources:&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Enable Auto-Terminate&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Set&amp;nbsp;clusters&amp;nbsp;automatically shut down after a period of inactivity. This simple setting can significantly reduce wasted&amp;nbsp;spending.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;img /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Enable Autoscaling: &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Workloads fluctuate in size and complexity. Autoscaling allows clusters to dynamically adjust the number of nodes based on demand:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="30" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Automatic Resource Adjustment:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Scale up for heavy jobs and scale down for lighter loads, ensuring you only pay for what you use.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;It significantly enhances cost efficiency and overall &lt;/SPAN&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;performance.&lt;/SPAN&gt;​&lt;/LI&gt;
&lt;LI data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;For serverless and streaming, using Delta Live Tables with&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;autoscaling is recommended.&lt;/SPAN&gt;​&lt;/LI&gt;
&lt;LI data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;This approach leads to better resource &lt;/SPAN&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;management and reliability.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Use Spot Instances:&lt;/SPAN&gt;&lt;/STRONG&gt; &lt;SPAN data-contrast="auto"&gt;For batch processing and non-critical workloads, spot instances offer substantial cost savings:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="31" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Lower VM Costs&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Spot instances are typically much cheaper than standard VMs. However, they are not recommended for jobs requiring constant uptime due to potential interruptions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="31" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;
&lt;P&gt;&lt;STRONG&gt;Considerations&lt;/STRONG&gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;Azure Spot VMs are intended for non-&lt;/SPAN&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;critical, fault-tolerant tasks.&lt;/SPAN&gt;​&lt;/LI&gt;
&lt;LI data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;They can be evicted without notice, risking&lt;/SPAN&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;production stability.&lt;/SPAN&gt;​&lt;/LI&gt;
&lt;LI data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;No SLA guarantees mean potential&lt;/SPAN&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;downtime for critical applications.&lt;/SPAN&gt;​&lt;/LI&gt;
&lt;LI data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;Using Spot VMs could lead to reliability &lt;/SPAN&gt;&lt;SPAN data-usefontface="false" data-contrast="none"&gt;issues in production environments.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="4"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Leverage Photon Engine:&lt;/SPAN&gt;&lt;/STRONG&gt; &lt;SPAN data-contrast="auto"&gt;Photon is Databricks’ high-performance, vectorized query engine:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="32" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Accelerate Large Workloads&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Photon can dramatically reduce runtime for&amp;nbsp;compute-intensive tasks, improving both speed and cost efficiency.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="5"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Keep Runtimes Up to Date: &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Using the latest Databricks runtime ensures optimal performance and security:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Benefit from Improvements:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Regular updates include performance enhancements, bug fixes, and new features.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="6"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Apply Cluster Policies: &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cluster policies help standardize configurations and enforce cost controls across teams:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="34" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Governance and Consistency:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Policies can restrict certain settings, enforce tagging, and ensure clusters are created with cost-effective defaults.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="7"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/optimizations/disk-cache#delta-cache-renamed-to-disk-cache" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="auto"&gt;Optimize Storage:&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;type impacts both performance and cost:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Switch from HDDs to SSDs&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;SSDs provide faster caching and shuffle operations, which can improve job efficiency and reduce runtime.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;OL start="8"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Tag Clusters for Cost Attribution: &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Tagging clusters enables granular tracking and reporting:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="36" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Visibility and Accountability:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Use tags to attribute costs to specific teams, projects, or environments, supporting better budgeting and chargeback processes.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL start="9"&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Select the Right Cluster Type:&lt;/SPAN&gt;&lt;/STRONG&gt; &lt;SPAN data-contrast="auto"&gt;Different workloads require different cluster types, see table below for Serverless vs Classic Compute:&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN lia-indent-padding-left-60px"&gt;&lt;table class="lia-indent-margin-left-60px lia-border-color-10 lia-border-style-double" border="3" style="width: 70.6863%; height: 360px; border-width: 3px;"&gt;&lt;tbody&gt;&lt;tr style="height: 40.6667px;"&gt;&lt;td class="lia-border-color-10" style="height: 40.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Feature&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 40.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Classic Compute&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 40.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Serverless Compute&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 68.6667px;"&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Control&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Full control over config &amp;amp; network&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Minimal control, fully managed by Databricks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 68.6667px;"&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Startup Time&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Slower (unless pre-warmed)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Instant&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 50.6667px;"&gt;&lt;td class="lia-border-color-10" style="height: 50.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cost Model&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 50.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Hourly, supports reservations&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 50.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Pay-per-use, elastic scaling&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 62.6667px;"&gt;&lt;td class="lia-border-color-10" style="height: 62.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Security&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 62.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;VNet&amp;nbsp;injection, private endpoints&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 62.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;NCC-based private connectivity&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 68.6667px;"&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Best For&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Heavy ETL, ML, compliance workloads&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 68.6667px; border-width: 3px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Interactive queries, unpredictable demand&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Job Clusters:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Ideal for scheduled jobs and Delta Live Tables.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;All-Purpose Clusters:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Suited for ad-hoc analysis and collaborative work.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Single-Node Clusters:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Efficient for simple exploratory data analysis or pure Python tasks.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Serverless&amp;nbsp;Compute:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Scalable,&amp;nbsp;managed workloads with automatic resource management.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;&lt;SPAN data-contrast="auto"&gt;11. Monitor and Adjust&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Regularly: &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;review cluster metrics and query history:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="38" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Continuous Optimization:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Use built-in dashboards to&amp;nbsp;monitor&amp;nbsp;usage,&amp;nbsp;identify&amp;nbsp;bottlenecks, and adjust cluster size or configuration as needed.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI style="list-style-type: none;"&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Code Best Practices&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;OL&gt;
&lt;LI style="font-weight: bold;"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Avoid Reprocessing Large Tables&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="39" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use a CDC (Change Data Capture) architecture with Delta Live Tables (DLT) to process only new or changed data, minimizing unnecessary computation.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="2"&gt;
&lt;LI style="font-weight: bold;"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Ensure Code Parallelizes Well&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="40" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Write Spark code that&amp;nbsp;leverages&amp;nbsp;parallel processing. Avoid loops, deeply nested structures, and inefficient user-defined functions (UDFs) that can hinder scalability.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="3"&gt;
&lt;LI style="font-weight: bold;"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Reduce Memory Consumption&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="41" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Tweak Spark configurations to minimize memory overhead. Clean out legacy or unnecessary settings that may have&amp;nbsp;carried&amp;nbsp;over from&amp;nbsp;previous&amp;nbsp;Spark versions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="4"&gt;
&lt;LI style="font-weight: bold;"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Prefer SQL Over Complex Python&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="42" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use SQL (declarative language) for Spark jobs whenever possible. SQL queries are typically more efficient and easier to&amp;nbsp;optimize&amp;nbsp;than complex Python logic.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="5"&gt;
&lt;LI style="font-weight: bold;"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Modularize Notebooks&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="43" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;%run&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;to split large notebooks into smaller, reusable modules. This improves maintainability.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="6"&gt;
&lt;LI style="font-weight: bold;"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Use LIMIT in Exploratory Queries&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;When exploring data, always use the&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;LIMIT&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;clause to avoid scanning large datasets unnecessarily.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="7"&gt;
&lt;LI style="font-weight: bold;"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt; Monitor Job Performance&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="45" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Regularly review Spark UI to detect inefficiencies such as high shuffle, input, or output. Review the below table for optimization opportunities:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img&gt;&lt;SPAN data-ccp-props="{}"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240,&amp;quot;335559740&amp;quot;:279}"&gt;For more guidance review: &lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/optimizations/spark-ui-guide/long-spark-stage-io" target="_blank" rel="noopener"&gt;Spark stage high I/O - Azure Databricks | Microsoft Learn&lt;/A&gt;&lt;/SPAN&gt;&lt;/img&gt;
&lt;H5 aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Databricks Code Performance Enhancements &amp;amp; Data Engineering Best Practices&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;By enabling the below features and applying best practices, you can significantly lower costs, accelerate job execution, and build Databricks pipelines that are both scalable and&amp;nbsp;highly reliable.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240,&amp;quot;335559740&amp;quot;:279}"&gt; For more guidance review: &lt;A href="https://www.databricks.com/discover/pages/optimize-data-workloads-guide#intro" target="_blank" rel="noopener"&gt;Comprehensive Guide to Optimize Data Workloads | Databricks&lt;/A&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN lia-indent-padding-left-30px"&gt;&lt;table class="lia-indent-margin-left-30px lia-background-color-22 lia-border-color-10 lia-border-style-double" border="3" style="width: 100%; border-width: 3px;"&gt;&lt;tbody&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Feature / Technique&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Purpose / Benefit&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;How to Use / Enable / Key Notes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/optimizations/disk-cache" target="_blank" rel="noopener"&gt;Disk Caching&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Accelerates repeated reads of Parquet files&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Set&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;spark.databricks.io.cache.enabled&amp;nbsp;= true&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/optimizations/dynamic-file-pruning" target="_blank" rel="noopener"&gt;Dynamic File Pruning (DFP)&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Skips irrelevant data files during queries, improves query performance&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Enabled by default in Databricks&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/optimizations/low-shuffle-merge" target="_blank" rel="noopener"&gt;Low Shuffle Merge&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Reduces data rewriting during MERGE operations, less need to recalculate ZORDER&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Use Databricks runtime with feature enabled&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/optimizations/aqe" target="_blank" rel="noopener"&gt;Adaptive Query Execution (AQE)&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Dynamically&amp;nbsp;optimizes&amp;nbsp;query plans based on runtime statistics&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Available in Spark 3.0+, enabled by default&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/delta/deletion-vectors" target="_blank" rel="noopener"&gt;Deletion Vectors&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Efficient row removal/change without rewriting entire Parquet file&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Enable in workspace settings, use with Delta Lake&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://www.databricks.com/blog/introducing-materialized-views-and-streaming-tables-databricks-sql" target="_blank" rel="noopener"&gt;Materialized Views&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Faster BI queries, reduced compute for&amp;nbsp;frequently&amp;nbsp;accessed data&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Create in Databricks SQL&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/sql/language-manual/delta-optimize" target="_blank" rel="noopener"&gt;Optimize&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Compacts Delta Lake files, improves query performance&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Run regularly, combine with ZORDER on high-cardinality columns&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;ZORDER&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Physically sorts/co-locates data by chosen columns for faster queries&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Use with OPTIMIZE, select columns&amp;nbsp;frequently&amp;nbsp;used in filters/joins&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/delta/tune-file-size#auto-optimize" target="_blank" rel="noopener"&gt;Auto Optimize&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Automatically compacts small files during writes&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Enable&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;optimizeWrite&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;autoCompact&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;table properties&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/delta/clustering" target="_blank" rel="noopener"&gt;Liquid Clustering&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Simplifies data layout, replaces partitioning/ZORDER, flexible clustering keys&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Recommended for new Delta tables, enables easy redefinition of clustering keys&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/delta/tune-file-size" target="_blank" rel="noopener"&gt;File Size Tuning&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Achieve&amp;nbsp;optimal&amp;nbsp;file size for performance and cost&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Set&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;delta.targetFileSize&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;table property&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/sql/language-manual/sql-ref-syntax-qry-select-hints" target="_blank" rel="noopener"&gt;Broadcast Hash Join&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Optimizes&amp;nbsp;joins by broadcasting smaller tables&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Adjust&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;spark.sql.autoBroadcastJoinThreshold&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;spark.databricks.adaptive.autoBroadcastJoinThreshold&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Shuffle Hash Join&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Faster join alternative to sort-merge&amp;nbsp;join&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Prefer over sort-merge join when broadcasting&amp;nbsp;isn’t&amp;nbsp;possible, Photon engine can help&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/optimizations/cbo" target="_blank" rel="noopener"&gt;Cost-Based Optimizer (CBO)&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Improves query plans for complex joins&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Enabled by default, collect column/table statistics with&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;ANALYZE TABLE&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/optimizations/aqe" target="_blank" rel="noopener"&gt;Data Spilling &amp;amp; Skew&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Handles uneven data distribution and excessive shuffle&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Use AQE, set&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;spark.sql.shuffle.partitions=auto&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;,&amp;nbsp;optimize&amp;nbsp;partitioning&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Data Explosion Management&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Controls partition sizes after transformations (e.g., explode, join)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Adjust&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;spark.sql.files.maxPartitionBytes&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;, use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;repartition()&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;after reads&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/delta/merge" target="_blank" rel="noopener"&gt;Delta Merge&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Efficient&amp;nbsp;upserts&amp;nbsp;and CDC (Change Data Capture)&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Use MERGE operation in Delta Lake, combine with CDC architecture&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px"&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/databricks/sql/language-manual/delta-vacuum" target="_blank" rel="noopener"&gt;Data Purging (Vacuum)&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Removes stale data files,&amp;nbsp;maintains&amp;nbsp;storage efficiency&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="border-width: 3px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Run VACUUM regularly based on transaction frequency&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;&amp;nbsp;Phase 3: Team Alignment and Next Steps&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;H5 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Implementing Cost Observability and&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Taking Action&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:299,&amp;quot;335559739&amp;quot;:299}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Effective cost management in Databricks goes beyond configuration and code—it requires robust observability, granular tracking, and proactive measures. Below&amp;nbsp;outlines how your teams can achieve this using system tables, tagging, dashboards, and actionable scripts.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240,&amp;quot;335559740&amp;quot;:279}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: bold;" aria-level="3"&gt;
&lt;H6&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt; Cost Observability with System Tables&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Databricks Unity Catalog provides&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;system tables&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;that store operational data for your account. These tables enable historical cost observability and empower FinOps teams to analyze&amp;nbsp;spend&amp;nbsp;independently.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="50" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;System Tables Location:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Found inside the Unity Catalog under the “system” schema.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="50" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;Key Benefits&lt;/STRONG&gt;:&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&amp;nbsp;Structured data for querying, historical analysis, and cost attribution.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="50" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;Action&lt;/STRONG&gt;:&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&amp;nbsp;Assign permissions to FinOps teams so they can access and analyze dedicated cost tables.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;OL start="2"&gt;
&lt;LI style="font-weight: bold;" aria-level="3"&gt;
&lt;H6&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt; Enable Tags for Granular Tracking&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Tagging is a powerful feature for tracking, reporting, and budgeting at a granular level.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="51" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Classic Compute:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Manually add key/value pairs when creating clusters, jobs, SQL Warehouses, or Model Serving endpoints. Use cluster policies to enforce custom tags.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="51" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Serverless Compute:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Create budget policies and assign permissions to teams or members for serverless workloads.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="51" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Action&lt;/STRONG&gt;:&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Tag all&amp;nbsp;compute&amp;nbsp;resources to enable detailed cost attribution and reporting.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;OL start="3"&gt;
&lt;LI aria-level="3"&gt;
&lt;H6&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt; Track Costs with Dashboards and Alerts&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Databricks offers prebuilt dashboards and queries for cost forecasting and usage analysis.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="52" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A href="https://www.databricks.com/resources/demos/tutorials/governance/system-tables" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Dashboards:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Visualize spend, usage trends, and forecast future costs.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="52" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://community.databricks.com/t5/technical-blog/top-10-queries-to-use-with-system-tables/ba-p/82331" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Prebuilt Queries&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;:&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&amp;nbsp;Use top queries with system tables to answer meaningful cost questions.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="52" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://learn.microsoft.com/en-us/azure/databricks/admin/account-settings/budgets" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Budget Alerts:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&amp;nbsp;Set up alerts in the Account Console (Usage &amp;gt; Budget) to receive notifications when spend approaches defined thresholds.&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;OL start="4"&gt;
&lt;LI style="font-weight: bold;" aria-level="3"&gt;
&lt;H6&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Build Culture of Efficiency&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;To go beyond technical fixes and build a culture of efficiency, by focusing on the below strategic actions:&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Collaborate with Internal Engineers:&lt;/STRONG&gt;&lt;BR /&gt;Spend time with engineering teams to understand workload patterns and optimization opportunities.&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Peer Reviews and Code Audits:&lt;/STRONG&gt;&lt;BR /&gt;Conduct regular code review sessions and peer reviews to ensure best practices are followed for Spark jobs, data pipelines, and cluster configurations.&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Create Internal Best Practice Documentation:&lt;/STRONG&gt;&lt;BR /&gt;Develop clear guidelines for writing optimized code, managing data, and maintaining clusters. Make these resources easily accessible for all teams.&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Implement Observability Dashboards:&lt;/STRONG&gt;&lt;BR /&gt;Use Databricks’ built-in features to create dashboards that track spend, monitor resource utilization, and highlight anomalies.&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;Set Alerts and Budgets:&lt;/STRONG&gt;&lt;BR /&gt;Configure alerts for long-running workloads and establish budgets using prebuilt Databricks capabilities to prevent cost overruns.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H6 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;5. Azure Reservations and Azure Savings Plan&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;When optimizing Databricks costs on Azure, it’s important to understand the two main commitment-based savings options: Azure Reservations and Azure Savings Plans. Both can help you reduce compute costs, but they differ in flexibility and how savings are applied.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/cost-management-billing/savings-plan/decide-between-savings-plan-reservation" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Which Should You Choose?&lt;/STRONG&gt;&lt;/A&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;&lt;STRONG&gt;Reservations&lt;/STRONG&gt; are ideal if you have stable, predictable Databricks workloads and want maximum savings.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;STRONG&gt;Savings Plans&lt;/STRONG&gt; are better if you expect your compute needs to change, or if you want a simpler, more flexible way to save across multiple services.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Pro Tip: &lt;/STRONG&gt;You can combine both options—use Reservations for your baseline, always-on Databricks clusters, and Savings Plans for bursty, variable, or new workloads.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4 aria-level="3"&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Summary Table: Action Steps&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;It’s critical to monitor costs continuously and align your teams with established best practices, while scheduling regular code review sessions to ensure efficiency and consistency.&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:281,&amp;quot;335559739&amp;quot;:281}"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN lia-indent-padding-left-30px"&gt;&lt;table class="lia-indent-margin-left-30px lia-border-color-10 lia-border-style-double" border="2" style="width: 58.4259%; height: 488px; border-width: 2px;"&gt;&lt;tbody&gt;&lt;tr class="lia-indent-padding-left-30px" style="height: 40px;"&gt;&lt;td class="lia-indent-padding-left-30px lia-align-left lia-border-color-10" style="height: 40px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Area&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="height: 40px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Best Practice / Action&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:2,&amp;quot;335551620&amp;quot;:2,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px" style="height: 68px;"&gt;&lt;td class="lia-indent-padding-left-30px lia-align-left lia-border-color-10" style="height: 68px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;System Tables&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="height: 68px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Use for historical cost analysis and attribution&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px" style="height: 68px;"&gt;&lt;td class="lia-indent-padding-left-30px lia-align-left lia-border-color-10" style="height: 68px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Tagging&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="height: 68px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Apply to all compute resources for granular tracking&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px" style="height: 40px;"&gt;&lt;td class="lia-indent-padding-left-30px lia-align-left lia-border-color-10" style="height: 40px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Dashboards&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="height: 40px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Visualize spend, usage, and forecasts&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px" style="height: 68px;"&gt;&lt;td class="lia-indent-padding-left-30px lia-align-left lia-border-color-10" style="height: 68px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Alerts&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="height: 68px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Set budget alerts for proactive cost management&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px" style="height: 68px;"&gt;&lt;td class="lia-indent-padding-left-30px lia-align-left lia-border-color-10" style="height: 68px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Scripts/Queries&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="height: 68px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Build custom analysis tools for deep insights&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr class="lia-indent-padding-left-30px" style="height: 96px;"&gt;&lt;td class="lia-indent-padding-left-30px lia-align-left lia-border-color-10" style="height: 96px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Cluster/Data/Code Review &amp;amp; Align&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-indent-padding-left-30px lia-border-color-10" style="height: 96px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-contrast="auto"&gt;Regularly review best practices, share findings, and align teams on optimization&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 40px;"&gt;&lt;td class="lia-border-color-10" style="height: 40px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Save on your Usage&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-10" style="height: 40px; border-width: 2px;"&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;Consider Azure Reservations and Azure Savings Plan&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 14 Dec 2025 05:43:10 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/azure-databricks-cost-optimization-a-practical-guide/ba-p/4470235</guid>
      <dc:creator>Rafia_Aqil</dc:creator>
      <dc:date>2025-12-14T05:43:10Z</dc:date>
    </item>
    <item>
      <title>Overload to Optimal: Tuning Microsoft Fabric Capacity</title>
      <link>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/overload-to-optimal-tuning-microsoft-fabric-capacity/ba-p/4464639</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P class=""&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Co-Authored by:&lt;/STRONG&gt; Daya Ram, Sr. Cloud Solutions Architect and Rafia Aqil, Could Solutions Architect&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=""&gt;&lt;SPAN data-contrast="auto"&gt;Optimizing Microsoft Fabric capacity is both a performance and cost exercise. By diagnosing workloads, tuning cluster and Spark settings, and applying data best practices, teams can reduce run times, avoid throttling, and lower total cost of ownership—without compromising SLAs. Use Fabric’s built-in observability (Monitoring Hub, Capacity Metrics, Spark UI) to identify hot spots and then apply cluster- and data-level remediations.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4 aria-level="2"&gt;&lt;SPAN class="lia-text-color-11"&gt;&lt;STRONG&gt;Capacity Planning&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P class=""&gt;&lt;SPAN data-contrast="auto"&gt;For capacity planning and sizing guidance, see&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/enterprise/plan-capacity" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Plan your capacity size&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;Selecting the wrong SKU can lead to two major issues:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Over-provisioning:&lt;/STRONG&gt; Paying for resources you don’t need.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Under-provisioning:&lt;/STRONG&gt; Struggling with performance bottlenecks and failed jobs.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class=""&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;To simplify this process, Microsoft provides the &lt;A class="lia-external-url" href="https://www.microsoft.com/en-us/microsoft-fabric/capacity-estimator" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Fabric SKU Estimator&lt;/STRONG&gt;&lt;/A&gt;, a powerful tool designed to help organizations accurately size their capacity based on real-world usage patterns. Run the SKU Estimator before onboarding new workloads or scaling existing ones. Combine its &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/fabric/data-engineering/spark-best-practices-overview" target="_blank" rel="noopener"&gt;recommendations&lt;/A&gt; with monitoring tools like Fabric Capacity Metrics to validate performance and adjust as needed.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4 aria-level="2"&gt;&lt;SPAN class="lia-text-color-11"&gt;&lt;STRONG&gt;Options to Diagnose Capacity Issues&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;H5 class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;1) Monitoring Hub — Start with the Story of the Run&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:246,&amp;quot;335559739&amp;quot;:246,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/spark-monitoring-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;What to use it for&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Browse Spark activity across&amp;nbsp;applications&amp;nbsp;(notebooks, Spark Job Definitions, and pipelines). Quickly surface long‑running or anomalous runs; view read/write bytes, idle time, core allocation, and&amp;nbsp;utilization.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/browse-spark-applications-monitoring-hub" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;How to use it&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;From the Fabric portal, open&amp;nbsp;Monitoring&amp;nbsp;(Monitor Hub).&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Select a Notebook or Spark Job Definition&amp;nbsp;to run&amp;nbsp;and choose Historical Runs.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="25" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Inspect the Run Duration chart;&amp;nbsp;click on&amp;nbsp;a run to see read/write bytes, idle time, core allocation, overall&amp;nbsp;utilization, and other Spark metrics.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What to look for&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="26" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use the&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/spark-detail-monitoring" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;guide: application detail monitoring&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;to review&amp;nbsp;and&amp;nbsp;monitor&amp;nbsp;your application.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;2) Capacity Metrics App — Measure the Whole Environment&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:246,&amp;quot;335559739&amp;quot;:246,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/enterprise/metrics-app" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;What to use it for&lt;/SPAN&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;Review capacity-wide&amp;nbsp;utilization&amp;nbsp;and system events (overloads, queueing); compare&amp;nbsp;utilization&amp;nbsp;across time windows and&amp;nbsp;identify&amp;nbsp;sustained peaks.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/enterprise/metrics-app-install?tabs=1st" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;How to use it&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="27" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Open the&amp;nbsp;Microsoft Fabric Capacity Metrics app&amp;nbsp;for your capacity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="27" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Review the&amp;nbsp;Compute&amp;nbsp;page (ribbon charts, utilization trends) and the&amp;nbsp;System events&amp;nbsp;tab to see overload or throttling windows.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="27" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use the&amp;nbsp;Timepoint&amp;nbsp;page to drill into a 30‑second interval and see which operations consumed the most&amp;nbsp;compute.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/enterprise/metrics-app-compute-page" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;What to look for&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="28" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use the&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/enterprise/capacity-planning-troubleshoot-consumption" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Troubleshooting guide:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;Monitor and&amp;nbsp;identify&amp;nbsp;capacity usage to pinpoint top CU‑consuming items.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;3) Spark UI — Diagnose at D&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;eeper&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt; Level&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:246,&amp;quot;335559739&amp;quot;:246,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Why it matters:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/apache-spark-history-server#open-the-spark-web-ui-from-progress-indicator-notebook" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Spark UI&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;exposes skew, shuffle, memory pressure, and long stages.&amp;nbsp;Use it after Monitoring Hub/Capacity Metrics to pinpoint the problematic job.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://spark.apache.org/docs/latest/web-ui.html" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Key tabs to inspect&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Stages&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: uneven task durations (data skew), heavy shuffle read/write, large input/output volumes.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Executors&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: storage memory, task time (GC), shuffle metrics. High GC or frequent spills&amp;nbsp;indicate&amp;nbsp;memory tuning is needed.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Storage&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: which RDDs/cached tables occupy memory; any disk spill.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="29" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Jobs&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;: long‑running jobs and gaps in the timeline (driver compilation, non‑Spark code, driver overload).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What to look for&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-300px"&gt;&lt;SPAN data-contrast="auto"&gt;Set via&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/create-and-use-environment" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;environment Spark propertie&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;s or session config.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:2160,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="30" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Data skew,&amp;nbsp;Memory&amp;nbsp;usage,&amp;nbsp;High/Low Shuffles:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Adjust&amp;nbsp;Ap&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;ache Spark settings: i.e.&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;spark.ms.autotune.enabled,&amp;nbsp; spark.task.cpus and spark.sql.shuffle.partitions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 aria-level="2"&gt;&lt;SPAN class="lia-text-color-11"&gt;&lt;STRONG&gt;Remediation and Optimization Suggestions&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;A) Cluster &amp;amp; Workspace Settings&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/native-execution-engine-overview?tabs=sparksql" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Runtime &amp;amp; Native Execution Engine (NEE)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;img /&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="31" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Use Fabric Runtime 1.3 (Spark 3.5, Delta 3.2) and enable the Native Execution Engine to boost performance; enable at the environment level under Spark compute → Acceleration.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Starter Pools vs. Custom Pools&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;img /&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="32" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/configure-starter-pools" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Starter Pool&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt; prehydrated, medium‑size pools; fast session starts, good for dev/quick runs.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="32" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/create-custom-spark-pools" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Custom Pools&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;: size nodes, enable autoscale, dynamic executors. Create via workspace Spark Settings (requires capacity admin to enable workspace customization). &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;High Concurrency Session Sharing&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;img /&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="33" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enable&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/high-concurrency-overview" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;High Concurrency&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt; to share Spark Sessions across notebooks (and pipelines) to reduce session startup latency and cost; use session tags in pipelines to group notebooks.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/autotune?tabs=sparksql" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Autotune for Spark&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN data-contrast="auto"&gt;Enable&amp;nbsp;Autotune&amp;nbsp;(&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;spark.ms.autotune.enabled&amp;nbsp;= true&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;) to auto‑adjust per‑query:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:1,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;spark.sql.shuffle.partitions&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:1,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;Spark.sql.autoBroadcastJoinThreshold&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="o" data-font="Courier New" data-listid="35" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:1,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:1440,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Courier New&amp;quot;,&amp;quot;469769242&amp;quot;:[9675],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;spark.sql.files.maxPartitionBytes&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P class="lia-indent-padding-left-240px"&gt;&lt;SPAN data-contrast="auto"&gt;Autotune is&amp;nbsp;disabled by default&amp;nbsp;and is in preview; enable per environment or session.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;B) Data‑level best practices&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&lt;SPAN data-contrast="auto"&gt;Microsoft Fabric offers several approaches to maintain optimal file sizes in Delta tables, review documentation here:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/table-compaction?tabs=sparksql#compaction-methods" target="_blank" rel="noopener"&gt;Table Compaction - Microsoft Fabric&lt;/A&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/intelligent-cache" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Intelligent Cache&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="37" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Enabled by default (Runtime 1.1/1.2) for Spark pools: caches&amp;nbsp;frequently&amp;nbsp;read files at node level for Delta/Parquet/CSV; improves&amp;nbsp;subsequent&amp;nbsp;read performance and TCO.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/table-compaction?tabs=sparksql#optimize-with-z-order" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;OPTIMIZE &amp;amp; Z‑Order&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="38" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Run OPTIMIZE regularly to rewrite files and improve file layout.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/delta-optimization-and-v-order?tabs=sparksql" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;V‑Order&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="39" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;V‑Order&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(disabled by default in new workspaces) can accelerate reads for read‑heavy workloads; enable via&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;spark.sql.parquet.vorder.default = true&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Vacuum&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="40" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Run&amp;nbsp;VACUUM&amp;nbsp;to remove unreferenced files&amp;nbsp;(stale data); default retention is&amp;nbsp;7 days; align retention across&amp;nbsp;OneLake&amp;nbsp;to control storage costs and&amp;nbsp;maintain&amp;nbsp;time travel.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class=""&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 aria-level="2"&gt;&lt;SPAN class="lia-text-color-11"&gt;&lt;STRONG&gt;Collaboration &amp;amp; Next Steps&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;H5 class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Engage Data Engineering Team to Define an Optimization Playbook&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="41" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Start with reviewing &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/fabric/enterprise/plan-capacity" target="_blank" rel="noopener"&gt;capacity&amp;nbsp;sizing guidance,&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:210,&amp;quot;335559739&amp;quot;:210,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;cluster‑level optimizations&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;(runtime/NEE, pools, concurrency, Autotune) and then target&amp;nbsp;data improvements&amp;nbsp;(Z‑order, compaction, caching, query refactors).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:0,&amp;quot;335551620&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="42" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-2,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Triage&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/admin/monitoring-hub" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Monitor Hub&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;→&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/enterprise/metrics-app-compute-page" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Capacity Metrics&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;→&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/spark-detail-monitoring" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Spark UI &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;to map workloads and identify high‑impact jobs, and workloads causing throttling.&amp;nbsp; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Schedule&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/lakehouse-table-maintenance" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Operationalize maintenance:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;OPTIMIZE (full or selective) during off‑peak windows; enable Auto Compaction for micro‑batch/streaming writes; add VACUUM to your cadence with agreed retention.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;&amp;nbsp;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;Add regular&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/fabric/data-engineering/spark-best-practices-basics#udf-best-practices" target="_blank" rel="noopener"&gt;code review sessions&lt;/A&gt; to ensure consistent performance patterns.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Fix&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;:&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/spark-job-concurrency-and-queueing" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Adjust pool sizing&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;or concurrency;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/autotune?tabs=sparksql" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;enable Autotune;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&amp;nbsp;tune shuffle partitions; refactor problematic queries;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/table-compaction?tabs=sparksql" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;re‑run compaction&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" style="list-style-type: none;"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="44" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559683&amp;quot;:0,&amp;quot;335559684&amp;quot;:-1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/spark-detail-monitoring" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;Verify&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;: Re‑run the job and change,&amp;nbsp;i.e.&amp;nbsp;reduced run time, lower shuffle, improved&amp;nbsp;utilization.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300,&amp;quot;335559991&amp;quot;:360}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px" aria-level="3"&gt;&lt;SPAN data-ccp-props="{&amp;quot;134233117&amp;quot;:false,&amp;quot;134233118&amp;quot;:false,&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;201341983&amp;quot;:0,&amp;quot;335551550&amp;quot;:1,&amp;quot;335551620&amp;quot;:1,&amp;quot;335559685&amp;quot;:0,&amp;quot;335559737&amp;quot;:0,&amp;quot;335559738&amp;quot;:0,&amp;quot;335559739&amp;quot;:0,&amp;quot;335559740&amp;quot;:300}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 14 Dec 2025 05:44:40 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/overload-to-optimal-tuning-microsoft-fabric-capacity/ba-p/4464639</guid>
      <dc:creator>Rafia_Aqil</dc:creator>
      <dc:date>2025-12-14T05:44:40Z</dc:date>
    </item>
  </channel>
</rss>

