<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Databricks Community Articles - Medium]]></title>
        <description><![CDATA[Practical Databricks tutorials, architecture guides, AI insights, product updates, and best practices for modern data professionals + Databricks MVPs (Most Valuable Professionals) - Medium]]></description>
        <link>https://medium.com/databrickscommunity?source=rss----8dd843bb8b39---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Databricks Community Articles - Medium</title>
            <link>https://medium.com/databrickscommunity?source=rss----8dd843bb8b39---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 12 Oct 2026 01:37:56 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/databrickscommunity" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Databricks ABAC Now Follows Your Data: External Engines and Views]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/databrickscommunity/databricks-abac-external-engines-views-09557e458889?source=rss----8dd843bb8b39---4"><img src="https://cdn-images-1.medium.com/max/1600/1*JJ4NyFc8Dz7JpzaEKz3e4A.png" width="1600"></a></p><p class="medium-feed-snippet">Databricks ABAC row filters and column masks now reach external Apache Spark (GA) and Unity Catalog views (Beta)</p><p class="medium-feed-link"><a href="https://medium.com/databrickscommunity/databricks-abac-external-engines-views-09557e458889?source=rss----8dd843bb8b39---4">Continue reading on Databricks Community Articles »</a></p></div>]]></description>
            <link>https://medium.com/databrickscommunity/databricks-abac-external-engines-views-09557e458889?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/09557e458889</guid>
            <category><![CDATA[data-governance]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[data-management]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[databricks]]></category>
            <dc:creator><![CDATA[Christian Hansen]]></dc:creator>
            <pubDate>Sun, 11 Oct 2026 14:08:35 GMT</pubDate>
            <atom:updated>2026-10-11T14:00:39.028Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Databricks costs directly within the interface — FinOpsWay extension]]></title>
            <link>https://medium.com/databrickscommunity/databricks-costs-directly-within-the-interface-finopsway-extension-8a75fbdb6886?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/8a75fbdb6886</guid>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[finops]]></category>
            <category><![CDATA[databricks-cost]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[databricks-lakebase]]></category>
            <dc:creator><![CDATA[Maksim Pachkouski Databricks MVP]]></dc:creator>
            <pubDate>Sun, 11 Oct 2026 10:37:54 GMT</pubDate>
            <atom:updated>2026-10-11T13:45:58.325Z</atom:updated>
            <content:encoded><![CDATA[<h3>Databricks costs directly within the interface — FinOpsWay extension</h3><p>I&#39;ve noticed that most modern cloud platforms have an interesting feature: they display costs, but in an overly aggregated and complex manner. Sometimes they hide features behind SKU combinations. Databricks has a standard Dashboard for this, as well as the Governance Hub. The Hub displays costs at a high level, across all workspaces:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AATlbuNRf4GxC4HFPs87HQ.jpeg" /></figure><p>As a result, an entire industry of FinOps tools has grown around cloud spending. At <a href="https://medium.com/databrickscommunity/databricks-data-and-ai-summit-2026-as-it-was-2e146b77912a">DAIS 2026</a>, I counted more than 10 similar products. There are solutions for monitoring, cost allocation, anomaly detection, and infrastructure optimization. But each new tool is another interface that needs to be learned, configured, and regularly accessed. I don&#39;t have time to learn the new features of Databricks, let alone third-party tools...</p><p>I had the idea to try making a widget, but Ilya came up with a more interesting solution. What if we added prices and costs directly to the Databricks interface via a plugin? It sounded crazy, but after a couple of experiments, we got it working.</p><p><a href="https://finopsway.com/">This is how FinOpsWay</a> was born —a free browser extension that displays costs directly alongside Databricks resources. Ultimately, it complements the Databricks Governance Hub.</p><p>Initially, we added a mini-panel with a list of expenses:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*M8ItDahVnejjzz0XIQkMQQ.gif" /></figure><p>Then the ideas started coming one after another. First, we added a display next to the clusters. That was simple. Then, we added the cost when selecting a cluster, which was more interesting because now the engineer could see the actual cost, not just abstract DBUs:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lHtfMl7_-KTCgwgghmRoKA.jpeg" /></figure><p>But I was always interested in how much each launch cost. Copying the ID each time and going to the dashboard was too much. But now I can see it right next to each launch:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bU3hfq-cnBhqIWWMnv0T8Q.jpeg" /></figure><p>We gradually added cost display for various objects. At some point, someone asked to add costs for Notebooks. It wasn&#39;t difficult to implement, but ultimately, <a href="https://lnkd.in/p/dKUeUdbR">the LinkedIn post about this feature</a> got the most likes. I still don&#39;t understand why they need to see it...</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/837/1*Y6fCXmTF1ckOfLGyhDsCBg.jpeg" /></figure><p>What else can you see? We&#39;ve also added a cost display next to Databricks Apps. In the current Dashboard, they&#39;re hidden as a combination of SKU and Billing_SKU and displayed as <strong>All-purpose serverless compute</strong>:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VwZ5Mc28IynhZuI-tCLaSA.jpeg" /></figure><p>Also, for fun, we added this to Lakebase Postgres during setup, as well as to branches and databases:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hG3r3J7A5vRxlAJcAHGoFw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pBj6vjJnjCLFyD5u6ifQ-A.png" /></figure><p>It was a funny effect. Ilya used to think Lakebase was expensive and avoided using it, but after this feature, he changed his mind.</p><p>Before launching this product, we discussed at length whether to release it as a paid product, a free product, or a subscription. Unfortunately, any Chrome extension can be downloaded from the browser and the full code can be viewed. Therefore, we decided to make this product free for everyone by activating <a href="https://github.com/sponsors/aig">sponsorship through GitHub</a> . Currently, we have about 250 active users and no donations, so I&#39;m not sure how long this initiative will last. We&#39;d be interested in your opinions on the idea and what features might be missing.</p><p>This extension also works on Databricks Free Edition, and you can track the latest updates on <a href="https://www.linkedin.com/company/finopsway/">the LinkedIn page</a> .</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jvm3MHNAPAVkrWgfxONnXA.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8a75fbdb6886" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databrickscommunity/databricks-costs-directly-within-the-interface-finopsway-extension-8a75fbdb6886">Databricks costs directly within the interface — FinOpsWay extension</a> was originally published in <a href="https://medium.com/databrickscommunity">Databricks Community Articles</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[op-lake: an enterprise-scale, self-hosted lakehouse with end-to-end Unity Catalog governance on…]]></title>
            <link>https://medium.com/databrickscommunity/op-lake-an-enterprise-scale-self-hosted-lakehouse-with-end-to-end-unity-catalog-governance-on-67991751ca21?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/67991751ca21</guid>
            <category><![CDATA[data-platforms]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[unity-catalog]]></category>
            <category><![CDATA[spark]]></category>
            <category><![CDATA[dbt]]></category>
            <dc:creator><![CDATA[Sathwik B S]]></dc:creator>
            <pubDate>Sun, 11 Oct 2026 10:09:38 GMT</pubDate>
            <atom:updated>2026-10-11T10:09:37.309Z</atom:updated>
            <content:encoded><![CDATA[<h3>op-lake: an enterprise-scale, self-hosted lakehouse with end-to-end Unity Catalog governance on open source tools</h3><h3>Why I built it</h3><p>I wanted to build an enterprise-scale, self-hosted lakehouse platform with end-to-end governance, using open source tools.</p><h3>The picture</h3><blockquote>Six layers, with requests entering at the top and data sitting at the bottom.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h4H4jMgH63dKv7xOtB5Jng.png" /><figcaption>Every tool reaches data the same way, through Spark Connect with a Unity Catalog token on the session. Only Caddy (80, 443) and the Spark Connect proxy (15003) publish ports.</figcaption></figure><h3>The journey, left to right</h3><blockquote>One table travels from raw files to a dashboard in four steps, and at every step Unity Catalog decides who touches it.</blockquote><h3>Step 1 of 4: Dagster starts the run</h3><blockquote>Dagster, the orchestrator, runs analytics_team_job every day at 06:00 UTC, or when an engineer launches it.</blockquote><p>The job carries the tag team: analytics, so each of its steps logs in as one of the analytics team&#39;s service accounts, never as a person. Dagster&#39;s UI sits behind oauth2-proxy, a login gate in front of tools with no login of their own, which lets in the data-engineer and platform-admin roles only, and launching a team-tagged job also needs the team&#39;s own role, team-analytics.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*myZgwP2_mXBVXfS_nzaibA.png" /><figcaption>Dagster’s jobs page, with analytics_team_job on the 06:00 UTC schedule.</figcaption></figure><p><strong>Governance check:</strong> the analyst holds neither role, so the orchestrator stays closed to them.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XzKjcLfdZTedp9nBoqJlCw.png" /><figcaption>The analyst user is refused at Dagster’s gate with a 403.</figcaption></figure><h3>Step 2 of 4: dlt lands raw data in bronze</h3><blockquote>dlt reads the raw CSV files and writes them into bronze as managed Delta tables.</blockquote><p>dlt is a library with no login of its own. The ingest step logs in to Keycloak as sa-team-analytics-ingest, with a secret Dagster reads from Vault, and exchanges the token for a Unity Catalog token. dlt reads orders.csv and customers.csv and hands each batch to uc_managed, a dlt destination I wrote, which writes analytics.bronze.orders and analytics.bronze.customers through Spark Connect, the client-server protocol every tool uses to reach the one Spark server. On released Unity Catalog only Spark writes catalog-managed tables, so the destination goes through Spark. Unity Catalog vends the storage credentials for each write, and no static storage key exists anywhere in the compute plane.</p><p><strong>Governance check:</strong> the ingest account holds the ingestion-bot persona, a named set of grants, so Unity Catalog lets it write bronze and nothing else. op-lake&#39;s test script logs in as each identity against the running stack and tries what it should and should not be able to do. Reading gold as the ingest account fails with:</p><pre>Failed to load table analytics.gold.customer_order_summary (HTTP 403)</pre><h3>Step 3 of 4: dbt builds silver and gold</h3><blockquote>dbt turns bronze into cleaned silver tables and one gold table for reports.</blockquote><p>dbt has no login of its own either. Dagster’s dbt step mints a Unity Catalog token for sa-team-analytics-build, which holds the data-engineer persona, and hands it to dbt as DBT_UC_TOKEN. The dbt-spark profile sets it as the Spark session&#39;s catalog token, so every model runs under the build account&#39;s grants. dbt builds analytics.silver.stg_orders and analytics.silver.stg_customers, then analytics.gold.customer_order_summary. Every table is a managed Delta table, so Unity Catalog owns its storage path under s3://lakehouse/managed, and dbt&#39;s CREATE OR REPLACE works because UC allows it on managed tables.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TygFJZCxeOMl4FNUwCGZfQ.png" /><figcaption>A run of analytics_team_job: bronze_ingest, then dbt_models, ending with RUN_SUCCESS.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TQ80LImI1ePni6n7izpaeA.png" /><figcaption>After the run, all five assets across bronze, silver and gold are materialized.</figcaption></figure><p><strong>Governance check:</strong> in the same test run, the build account read all 10 orders in bronze, and dbt built silver and gold with 14 models and tests passing and no errors.</p><h3>Step 4 of 4: Superset shows gold to the analyst</h3><blockquote>Superset and JupyterLab read gold live, as the person who logged in.</blockquote><p>The analyst signs in once through Keycloak at the launchpad. Superset’s connector exchanges the analyst’s Keycloak token for a Unity Catalog token, and the Spark Connect session carries it, so Unity Catalog checks the analyst’s own grants on every query. No serving copy of gold exists: dashboards and notebooks read the table where dbt wrote it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AldebUM3ODX9HUrO57sQ0A.png" /><figcaption>The launchpad after one Keycloak sign-in.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DH0ZUXq_PROJv2AwtK8aDg.png" /><figcaption>The analyst user reads analytics.gold.customer_order_summary and gets 5 rows.</figcaption></figure><p><strong>Governance check:</strong> the same analyst, in the same session, asks for bronze, and Unity Catalog refuses.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FFtmwEXXxbAsQ7f8CunWCQ.png" /><figcaption>The bronze query comes back 403 PERMISSION_DENIED from Unity Catalog.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8oLg_7_Q0rJOov1tXrliWQ.png" /><figcaption>JupyterLab follows the same path, with each notebook binding the user’s own Unity Catalog token to its Spark session.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZmSUz_CcgLc91e6kVjFP7g.png" /><figcaption>The same notebook asks for bronze, and Unity Catalog answers DENIED with a 403.</figcaption></figure><blockquote>The tools hold no identity of their own. Every step runs under a named identity, and Unity Catalog checks each one against its grants.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OKHuEAJyfZdxlXF5_AvJ5g.png" /><figcaption>Who Unity Catalog allows and denies, by identity</figcaption></figure><h3>Who enforces it</h3><ul><li><strong>Keycloak 26.1</strong>: single sign-on and every token. Users, groups and roles live in Postgres.</li><li><strong>Unity Catalog v0.5.0</strong>: grants, token exchange (RFC 8693) and storage credential vending. Its own metadata sits in an H2 file, because UC 0.5.x issues 1364 and 1385 break managed Delta tables on Postgres.</li><li><strong>iam-reconciler</strong>: turns Keycloak group membership into per-person grants every 60 seconds, and provisions the service accounts declared in personas.yaml.</li><li><strong>Vault 1.18</strong>: every service secret, including the service-account secrets Dagster reads at run time.</li><li><strong>Spark Connect</strong>: starts with no default Unity Catalog token, so a session without its own token is denied. A pre-shared token behind a TLS proxy (nginx 1.27, port 15003) gates the connection itself.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3frue-gtK_mxUJ9VfGBIFg.png" /><figcaption>The Keycloak sign-in page every tool sends you to.</figcaption></figure><p>How a person gets grants</p><ol><li>An admin adds the person to a Keycloak group, in the admin UI or with the reconciler’s add-member command.</li><li>Within 60 seconds, the reconciler reads the group’s members from Keycloak.</li><li>It expands the group’s persona or team grants and writes one grant per person in Unity Catalog.</li><li>When the person leaves the group, or gets disabled, the next pass revokes the grants.</li></ol><p><strong>Result:</strong> nobody edits a grant by hand.</p><h3>Around the data</h3><ul><li><strong>Front door</strong>: Caddy 2.8 terminates HTTPS for every UI, and oauth2-proxy v7.7.1 gates the tools with no login of their own. The launchpad lets in any signed-in user, the admin console only platform-admins.</li><li><strong>Three network tiers</strong>: default for the apps, data for MinIO and Spark, admin for Vault and the socket proxy. Superset and the other UIs never reach MinIO directly.</li><li><strong>Managed tables only</strong>: no persona gets an external location, a storage credential or CREATE EXTERNAL TABLE, so nobody points a new table at another table’s files.</li><li><strong>Three published ports</strong>: 80 and 443 on Caddy, and 15003 on the Spark Connect proxy.</li><li><strong>Fresh storage credentials</strong>: uc-cred-refresher restarts Unity Catalog every 6 days, so it mints a new 7-day storage session, and it reaches Docker only through docker-socket-proxy, which allows restarts and nothing else.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*khHbw3rqKJTR8dJJAFdDFQ.png" /><figcaption>The admin console, gated to the platform-admins group.</figcaption></figure><h3>Reference</h3><h3>Tools and versions</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EXD8wSUlPdA5jKZth0dIwg.png" /><figcaption>Tools and versions</figcaption></figure><h3>Where state lives</h3><blockquote>A crash, a restart or a recreate loses nothing.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HpUMxreCYPrzf6qVfm9Omw.png" /><figcaption>Where state lives</figcaption></figure><p>Only docker compose down --volumes wipes this, and it&#39;s meant to.</p><h3>Moving to a cloud</h3><blockquote>You change .env and server.properties. Models, assets, personas and the catalog layout stay the same.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1u6UtdBV67tmw-ngZKPScg.png" /><figcaption>Moving to a cloud</figcaption></figure><h3>What this build leaves out</h3><ul><li>Lineage and observability (OpenLineage, Marquez), CI/CD for the platform itself, and cloud IaC (Helm, Terraform) are deferred to later phases by design. The test script runs by hand.</li></ul><h3>Read the code</h3><ol><li>docker-compose.yml, 964 lines: every service and its network tier.</li><li>infra/iam/personas.yaml, 198 lines: the catalog layout, personas, groups and teams.</li><li>infra/superset/spark_connect_uc/: the Superset connector.</li><li>dagster/data_platform/uc_managed_destination.py: the dlt destination writing through Spark Connect.</li><li>infra/unitycatalog/uc-entrypoint.sh, 163 lines: the storage session minted at every start.</li></ol><p>Everything is on GitHub at <a href="https://github.com/sathwikbs/op-lake">sathwikbs/op-lake</a>.</p><blockquote><strong>Next:</strong> open docker-compose.yml at line 938 and read the networks block. It&#39;s about 10 lines, and the comments explain all three tiers.</blockquote><h3>Sources</h3><ul><li><a href="https://github.com/sathwikbs/op-lake">op-lake on GitHub (source code)</a></li><li><a href="https://docs.unitycatalog.io/">Unity Catalog (open source) documentation</a></li><li><a href="https://spark.apache.org/docs/latest/spark-connect-overview.html">Apache Spark: Spark Connect overview</a></li><li><a href="https://datatracker.ietf.org/doc/html/rfc8693">RFC 8693: OAuth 2.0 Token Exchange</a></li><li><a href="https://github.com/unitycatalog/unitycatalog/issues/1364">Unity Catalog issue 1364</a> and <a href="https://github.com/unitycatalog/unitycatalog/issues/1385">issue 1385</a></li></ul><p>Built on open source: Unity Catalog, Apache Spark, Delta Lake, Keycloak, Vault, MinIO, Superset, JupyterHub, Dagster, dlt and dbt. Opinions are my own.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=67991751ca21" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databrickscommunity/op-lake-an-enterprise-scale-self-hosted-lakehouse-with-end-to-end-unity-catalog-governance-on-67991751ca21">op-lake: an enterprise-scale, self-hosted lakehouse with end-to-end Unity Catalog governance on…</a> was originally published in <a href="https://medium.com/databrickscommunity">Databricks Community Articles</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Databricks Metric Views]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/databrickscommunity/metric-views-827e1b33c39b?source=rss----8dd843bb8b39---4"><img src="https://cdn-images-1.medium.com/max/925/1*JXbepqy5zzsMdrQ7Ximb2A.png" width="925"></a></p><p class="medium-feed-snippet">Recently, I kept seeing posts about the semantic layer flooding my LinkedIn feed. Then my manager casually dropped the same question: &#x201C;Do&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/databrickscommunity/metric-views-827e1b33c39b?source=rss----8dd843bb8b39---4">Continue reading on Databricks Community Articles »</a></p></div>]]></description>
            <link>https://medium.com/databrickscommunity/metric-views-827e1b33c39b?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/827e1b33c39b</guid>
            <category><![CDATA[women-in-tech]]></category>
            <category><![CDATA[databrucks-ai-bi]]></category>
            <category><![CDATA[women]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Namaste Databricks]]></dc:creator>
            <pubDate>Sat, 10 Oct 2026 08:17:46 GMT</pubDate>
            <atom:updated>2026-08-25T11:26:00.133Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[What Makes Up a Databricks Project?]]></title>
            <link>https://medium.com/databrickscommunity/what-makes-up-a-databricks-project-36a695f393ee?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/36a695f393ee</guid>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[ci-cd-pipeline]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[mlops]]></category>
            <dc:creator><![CDATA[G e o r g i a n]]></dc:creator>
            <pubDate>Mon, 05 Oct 2026 08:16:05 GMT</pubDate>
            <atom:updated>2026-09-04T13:13:47.133Z</atom:updated>
            <content:encoded><![CDATA[<h4>Deploying Databricks Projects Explained Simple</h4><h3>Introduction</h3><p>Deploying a Databricks project reliably comes down to three components: <strong>code, resources and an execution environment</strong>. How well a team manages these three determines whether a project moves from development to production in a controlled, repeatable way, or requires manual intervention at every stage.</p><p>This article defines those three components, outlines how a project is meant to progress through development, staging, and production, and explains how Declarative Automation Bundles (DABs) were built to manage that progression.</p><h3>What’s inside a Databricks project?</h3><p>A Databricks project is built from three kinds assests.</p><p><strong>Code</strong> is the logic itself: <em>notebooks, Python wheels, JARs, dbt models, SQL scripts</em>. This is the part everyone thinks of first because it’s the part you write by hand or nowadays an LLM helps with.</p><p><strong>Resources</strong> are the Databricks objects that let your code run as something managed: <em>Lakeflow Jobs, Spark Declarative Pipelines, the MLflow tracking server and model registry</em>. A notebook by itself is just a file. Attach a job resource to it and Databricks can schedule it, retry it, and alert you when it fails.</p><p><strong>Execution environment</strong> covers the workspace, the Unity Catalog namespace, and the compute configuration the code runs on. The same notebook can behave completely differently depending on whether it’s running on a <strong><em>single-node cluster against dev tables or on serverless compute against production tables</em></strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*a6qzoAPXuh3wMnGj01O9vg.png" /><figcaption>Simple Example Project Components</figcaption></figure><p>How much of each you need depends on what you’re building. A simple report might be one notebook on a small cluster and nothing else. A full MLOps pipeline needs code, several resource types, and a much more deliberate execution environment, because the deliverable is more complex.</p><h3>The path to production</h3><p>Code doesn’t jump straight to production. It moves through <strong>development, staging, and production</strong>, and version control drives that movement: a pull request pushes code from a dev branch into stage, a release pushes it from stage into main. Each branch deploys into its matching environment, and each environment gets its own configuration, not just its own data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pZD99MnCRAKBa8jSmxpocw.png" /><figcaption>CI/CD Journey to Production</figcaption></figure><p>In <strong>development</strong>, you’re running on a s<strong>ingle-node cluster</strong> under your own account, against data that’s fine to break.</p><p>In <strong>staging</strong>, the setup gets closer to the real world: <strong>serverless compute, and a service principal instead of your personal login</strong>, because the job needs to run the way an automated process runs, not the way a person clicking around a UI does.</p><p>In <strong>production</strong>, you’re still on serverless, still under the s<strong>ervice principal </strong>principle, and now the job runs on an actual schedule against real data for real consumers.</p><p>The important is that the same code has to behave correctly under three different sets of rules, and something has to manage that translation every time you deploy.</p><h3>Three ways engineers did this before Declarative Automation Bundles</h3><p>There were three ways to orchestrate this journey, and each one has a real cost:</p><ol><li><strong>Doing it through the UI</strong> is the easiest thing to learn. It’s also slow, easy to get wrong because a human is clicking through every step by hand, and not something you can plug into an automated pipeline.</li><li><strong>Doing it through the REST API or SDK</strong> gives you low-level control. You’re also learning a large set of endpoints and classes, and for writing the deployment logic yourself, which usually ends up looking the same for every project you build.</li><li><strong>Doing it through Terraform is powerful</strong>, and it’s what most Databricks administrators already use for infrastructure. It’s also a separate tool with its own syntax and state management, which most data engineers and data scientists never signed up to learn to deploy a pipeline.</li></ol><p>None of these three were built specifically for the thing data teams actually need: write a project once, then deploy it to dev, staging, and production with the right settings applied automatically in each place.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/772/1*rHDiNLhq1sfznXi3vnBNYw.png" /><figcaption>Before Declarative Automation Bundles</figcaption></figure><h4>What was missing</h4><p>If you laid out what an ideal tool would do, it would look something like this:</p><ul><li>Store code and every environment’s configuration together, in a format people can read and define, like YAML.</li><li>Define Databricks resources using the same parameters the REST API already uses.</li><li>Keep deployments isolated per user during development.</li><li>Let you override specific settings per environment, like compute size, identity, or schedule, without duplicating the whole project.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*oOBnrEP4k-Y5Aaa_DBPIfA.png" /><figcaption>How Can the CI/CD Process Be Simplified?</figcaption></figure><h3>Declarative Automation Bundles (DABs)</h3><p><strong>Declarative Automation Bundles</strong> (formerly known as Databricks Asset Bundles) are a tool to facilitate the adoption of software engineering best practices, including source control, code review, testing, and continuous integration and delivery (CI/CD), for your data and AI projects. Bundles provide a way to include metadata alongside your project’s source files and make it possible to describe Databricks resources such as jobs and pipelines as source files. Ultimately a bundle is an end-to-end definition of a project, including how the project should be structured, tested, and deployed. This makes it easier to collaborate on projects during active development.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/931/1*t-cGka3a9FTLL9j-vHOgQw.png" /><figcaption>High-level view of a development and CI/CD pipeline with bundles</figcaption></figure><p>Bundles are Databricks’ infrastructure-as-code approach to managing projects. The core trigger for using them: <strong>multiple contributors, automation, and a CI/CD requirement</strong>. Because a bundle is just YAML files versioned next to your source code, it fits naturally wherever infrastructure-as-code already fits.</p><p>Four cases stand out:</p><ul><li><strong>Team development.</strong> Bundles keep source files organized across contributors, so collaboration doesn’t turn into chaos.</li><li><strong>Faster ML iteration.</strong> Training jobs, batch inference, and other pipeline resources get managed as part of the project from day one, following production practices instead of bolting them on later.</li><li><strong>Org-wide standards.</strong> Teams can build custom bundle templates with default permissions, service principals, and CI/CD settings baked in, so every new project starts from the same baseline.</li><li><strong>Regulatory compliance.</strong> Because a bundle keeps a versioned history of code and infrastructure together, it supports governance and audit requirements in regulated industries.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/715/1*2G73YZHzPGdvgxmNgGJkxQ.png" /><figcaption>Typical Project Structure</figcaption></figure><p>Files of particular interest include the following:</p><ul><li>databricks.yml: This file specifies the bundle&#39;s programmatic name, includes references to the bundle&#39;s files, defines catalog and schema variables, and specifies settings for target workspaces.</li><li>resources/sample_job.job.yml and resources/&lt;project-name&gt;_etl_pipeline.yml: These files define the job that contains a pipeline refresh task, and the pipeline&#39;s settings. For information about pipeline settings, see <a href="https://docs.databricks.com/aws/en/dev-tools/bundles/resources#pipelines">pipeline</a>.</li><li>src/: This folder contains the sample pipeline&#39;s source files, explorations, and transformations.</li></ul><h3>Conclusion</h3><ul><li>A Databricks project is made of <strong>code</strong>, <strong>resources</strong>, and an <strong>execution environment</strong>. Moving that project into production means running all three correctly across development, staging, and production, with the right configuration applied at each stop.</li><li>The CI/CD journey promotes a project across <strong>development, staging, and production</strong>, driven by version control, with per-environment configuration.</li><li>The UI, REST API/SDK, and Terraform can each orchestrate deployment, but each has real drawbacks for data engineering CI/CD.</li><li><strong>Declarative Automation Bundles (DABs)</strong> co-version code and configuration in YAML and deploy to multiple environments easily.</li></ul><p><em>Useful Links:</em></p><ul><li><a href="https://docs.databricks.com/aws/en/dev-tools/ci-cd/flows">CI/CD workflows on Databricks | Databricks on AWS</a></li><li><a href="https://docs.databricks.com/aws/en/dev-tools/bundles/pipelines-tutorial">Develop pipelines with Declarative Automation Bundles | Databricks on AWS</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=36a695f393ee" width="1" height="1" alt=""><hr><p><a href="https://medium.com/databrickscommunity/what-makes-up-a-databricks-project-36a695f393ee">What Makes Up a Databricks Project?</a> was originally published in <a href="https://medium.com/databrickscommunity">Databricks Community Articles</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Databricks Pipeline Unit Testing Finally Arrives]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/databrickscommunity/databricks-pipeline-unit-testing-beta-05bac4c4f808?source=rss----8dd843bb8b39---4"><img src="https://cdn-images-1.medium.com/max/1600/1*_Q3UpEqm-09aswgUvRBBrw.png" width="1600"></a></p><p class="medium-feed-snippet">Databricks pipeline unit testing hits Beta: pytest-style tests for Lakeflow Declarative Pipelines, with mock data and Auto CDC coverage.</p><p class="medium-feed-link"><a href="https://medium.com/databrickscommunity/databricks-pipeline-unit-testing-beta-05bac4c4f808?source=rss----8dd843bb8b39---4">Continue reading on Databricks Community Articles »</a></p></div>]]></description>
            <link>https://medium.com/databrickscommunity/databricks-pipeline-unit-testing-beta-05bac4c4f808?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/05bac4c4f808</guid>
            <category><![CDATA[big-data]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[databricks-lakeflow]]></category>
            <dc:creator><![CDATA[Christian Hansen]]></dc:creator>
            <pubDate>Sun, 04 Oct 2026 20:36:29 GMT</pubDate>
            <atom:updated>2026-08-25T07:04:12.818Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Masking PII in One Line of SQL: Meet Databricks ai_mask()]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/databrickscommunity/databricks-ai-mask-pii-masking-sql-3fa6f81eb52d?source=rss----8dd843bb8b39---4"><img src="https://cdn-images-1.medium.com/max/1600/1*Fb8czpFyTsXe4atrHIfmXw.png" width="1600"></a></p><p class="medium-feed-snippet">How the new ai_mask() function redacts names, emails, and more from free text, and what you need to run it</p><p class="medium-feed-link"><a href="https://medium.com/databrickscommunity/databricks-ai-mask-pii-masking-sql-3fa6f81eb52d?source=rss----8dd843bb8b39---4">Continue reading on Databricks Community Articles »</a></p></div>]]></description>
            <link>https://medium.com/databrickscommunity/databricks-ai-mask-pii-masking-sql-3fa6f81eb52d?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/3fa6f81eb52d</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[data-governance]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Christian Hansen]]></dc:creator>
            <pubDate>Sun, 04 Oct 2026 20:36:09 GMT</pubDate>
            <atom:updated>2026-09-04T10:26:08.585Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Databricks Lakebase Gets Always-On Pricing: Serverless Flexibility, Provisioned Pricing]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/databrickscommunity/databricks-lakebase-gets-always-on-pricing-serverless-flexibility-provisioned-pricing-fcd85c9e0c01?source=rss----8dd843bb8b39---4"><img src="https://cdn-images-1.medium.com/max/1600/1*SoO0ug_SDwxEN3tnadGMqQ.png" width="1600"></a></p><p class="medium-feed-snippet">Databricks Lakebase Always-On pricing gives serverless autoscaling a 25% lower baseline rate with no long-term commitment.</p><p class="medium-feed-link"><a href="https://medium.com/databrickscommunity/databricks-lakebase-gets-always-on-pricing-serverless-flexibility-provisioned-pricing-fcd85c9e0c01?source=rss----8dd843bb8b39---4">Continue reading on Databricks Community Articles »</a></p></div>]]></description>
            <link>https://medium.com/databrickscommunity/databricks-lakebase-gets-always-on-pricing-serverless-flexibility-provisioned-pricing-fcd85c9e0c01?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/fcd85c9e0c01</guid>
            <category><![CDATA[databricks-lakebase]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[data-analysis]]></category>
            <category><![CDATA[big-data]]></category>
            <dc:creator><![CDATA[Christian Hansen]]></dc:creator>
            <pubDate>Sun, 04 Oct 2026 20:35:33 GMT</pubDate>
            <atom:updated>2026-09-04T10:25:55.299Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Stop Writing Row Filters Table by Table: ABAC Is Now GA in Unity Catalog]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/databrickscommunity/govern-once-protect-everywhere-abac-row-filtering-and-column-masking-is-ga-in-unity-catalog-0cfc1165db70?source=rss----8dd843bb8b39---4"><img src="https://cdn-images-1.medium.com/max/1600/1*yD_cGVxevjE-FKchFinbuw.png" width="1600"></a></p><p class="medium-feed-snippet">How Databricks ABAC replaces per-table row filters and column masks with one governed tag policy across Unity Catalog.</p><p class="medium-feed-link"><a href="https://medium.com/databrickscommunity/govern-once-protect-everywhere-abac-row-filtering-and-column-masking-is-ga-in-unity-catalog-0cfc1165db70?source=rss----8dd843bb8b39---4">Continue reading on Databricks Community Articles »</a></p></div>]]></description>
            <link>https://medium.com/databrickscommunity/govern-once-protect-everywhere-abac-row-filtering-and-column-masking-is-ga-in-unity-catalog-0cfc1165db70?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/0cfc1165db70</guid>
            <category><![CDATA[data-analysis]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[big-data]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[data-security]]></category>
            <dc:creator><![CDATA[Christian Hansen]]></dc:creator>
            <pubDate>Sun, 04 Oct 2026 20:35:09 GMT</pubDate>
            <atom:updated>2026-09-04T10:25:47.220Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Managing Unity Catalog External Locations with Declarative Automation Bundles (DABs)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/databrickscommunity/managing-unity-catalog-external-locations-with-declarative-automation-bundles-f754263b74eb?source=rss----8dd843bb8b39---4"><img src="https://cdn-images-1.medium.com/max/1600/1*lHO-e8jiWB8cKT5YYJDlLw.png" width="1600"></a></p><p class="medium-feed-snippet">Declare Unity Catalog external locations as code in Declarative Automation Bundles, add inline grants, and know when Terraform still wins.</p><p class="medium-feed-link"><a href="https://medium.com/databrickscommunity/managing-unity-catalog-external-locations-with-declarative-automation-bundles-f754263b74eb?source=rss----8dd843bb8b39---4">Continue reading on Databricks Community Articles »</a></p></div>]]></description>
            <link>https://medium.com/databrickscommunity/managing-unity-catalog-external-locations-with-declarative-automation-bundles-f754263b74eb?source=rss----8dd843bb8b39---4</link>
            <guid isPermaLink="false">https://medium.com/p/f754263b74eb</guid>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[big-data]]></category>
            <category><![CDATA[databricks]]></category>
            <dc:creator><![CDATA[Christian Hansen]]></dc:creator>
            <pubDate>Sun, 04 Oct 2026 20:34:30 GMT</pubDate>
            <atom:updated>2026-09-04T10:25:15.159Z</atom:updated>
        </item>
    </channel>
</rss>