<?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>All blog posts in Resources</title>
    <link>https://community.databricks.com/t5/resources/ct-p/Resources</link>
    <description>All blog posts in Resources</description>
    <pubDate>Tue, 22 Sep 2026 16:54:01 GMT</pubDate>
    <dc:creator>Resources</dc:creator>
    <dc:date>2026-09-22T16:54:01Z</dc:date>
    <item>
      <title>Re: Building a Production LangGraph Agent on Databricks - NorthStar Brand Copilot</title>
      <link>https://community.databricks.com/t5/technical-blog/building-a-production-langgraph-agent-on-databricks-northstar/bc-p/169427#M1226</link>
      <description>&lt;P&gt;Hello, I am building a similar NL to SQL agent, but I am running into high latency with the Genie query tool (about 15 seconds per query, even simple ones).&lt;/P&gt;&lt;P&gt;What average response times are you getting, and how did you manage to lower them? I did really appreciate your guidance.&lt;/P&gt;</description>
      <pubDate>Tue, 22 Sep 2026 12:46:41 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/building-a-production-langgraph-agent-on-databricks-northstar/bc-p/169427#M1226</guid>
      <dc:creator>Kushal_2612</dc:creator>
      <dc:date>2026-09-22T12:46:41Z</dc:date>
    </item>
    <item>
      <title>Re: Workflows Parameterization: Build Flexible, Production-Ready Pipelines on Databricks</title>
      <link>https://community.databricks.com/t5/technical-blog/workflows-parameterization-build-flexible-production-ready/bc-p/169305#M1225</link>
      <description>&lt;P&gt;Amazing post!!&lt;/P&gt;</description>
      <pubDate>Mon, 21 Sep 2026 10:53:49 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/workflows-parameterization-build-flexible-production-ready/bc-p/169305#M1225</guid>
      <dc:creator>supportvector_</dc:creator>
      <dc:date>2026-09-21T10:53:49Z</dc:date>
    </item>
    <item>
      <title>Multi-region model serving on Databricks with OpenSharing</title>
      <link>https://community.databricks.com/t5/technical-blog/multi-region-model-serving-on-databricks-with-opensharing/ba-p/167622</link>
      <description>&lt;P&gt;&lt;SPAN&gt;How to extend a single-region model serving stack to additional regions using serverless workspaces, OpenSharing, Real-Time Serving Endpoints, and Lakebase.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 21 Sep 2026 08:47:50 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/multi-region-model-serving-on-databricks-with-opensharing/ba-p/167622</guid>
      <dc:creator>KamLook</dc:creator>
      <dc:date>2026-09-21T08:47:50Z</dc:date>
    </item>
    <item>
      <title>BrickTalk Recording | One Platform, Any Source: Unifying Enterprise Data with Lakeflow Connect</title>
      <link>https://community.databricks.com/t5/bricktalks-tv/bricktalk-recording-one-platform-any-source-unifying-enterprise/ba-p/169070</link>
      <description>&lt;P&gt;In this Community BrickTalk,&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/67838"&gt;@Giselle_Go_DB&lt;/a&gt;&amp;nbsp; and&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/231837"&gt;@sonia_bendre&lt;/a&gt;&amp;nbsp;&amp;nbsp;demonstrate unifying enterprise data using Databricks Lakeflow Connect.&lt;BR /&gt;&lt;div class="video-embed-center video-embed"&gt;&lt;iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FcZLaSE-jzos%3Ffeature%3Doembed&amp;amp;display_name=YouTube&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DcZLaSE-jzos&amp;amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FcZLaSE-jzos%2Fhqdefault.jpg&amp;amp;type=text%2Fhtml&amp;amp;schema=youtube" width="600" height="337" scrolling="no" title="Community BrickTalk | One Platform, Any Source: Unifying Enterprise Data with Lakeflow Connect" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture" allowfullscreen="true"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 18 Sep 2026 09:07:01 GMT</pubDate>
      <guid>https://community.databricks.com/t5/bricktalks-tv/bricktalk-recording-one-platform-any-source-unifying-enterprise/ba-p/169070</guid>
      <dc:creator>Tushar_Parekar</dc:creator>
      <dc:date>2026-09-18T09:07:01Z</dc:date>
    </item>
    <item>
      <title>Re: 5 Ways to Enhance Databricks AI/BI Dashboard Tables with HTML</title>
      <link>https://community.databricks.com/t5/technical-blog/5-ways-to-enhance-databricks-ai-bi-dashboard-tables-with-html/bc-p/169006#M1224</link>
      <description>&lt;P&gt;Great question!&lt;/P&gt;
&lt;P&gt;AI/BI Dashboard table cells configured as HTML are passed through an HTML sanitizer before rendering, which provides a platform-level safety layer (&lt;A href="https://docs.databricks.com/aws/en/dashboards/manage/visualizations/tables#styles-tab" target="_blank"&gt;Databricks documentation&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;However, the sanitizer protects the rendering step, it doesn't make values from upstream tables automatically trustworthy. The most important step is to&amp;nbsp;&lt;STRONG&gt;understand where the data used to generate the HTML comes from&lt;/STRONG&gt; and whether those values can be &lt;STRONG&gt;considered trusted&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;If labels, URLs, or other values come from user input or come from untrusted sources, additional safeguards should be taken, such as escaping dynamic text, validating or allowlisting URLs, and avoiding the direct insertion of arbitrary data into HTML markup.&lt;/P&gt;
&lt;P&gt;For example, in the CRM scenario from the post, if links are expected to point to a known destination such as &lt;EM&gt;&lt;A href="https://example.com/crm/accounts/" target="_blank"&gt;https://example.com/crm/accounts/&lt;/A&gt;...&lt;/EM&gt;, you could validate the URL against that expected link before constructing the it. If the destination itself can come from user-controlled or untrusted data and random, I'd be much more cautious about automatically turning it into a clickable link.&lt;/P&gt;
&lt;P&gt;The right approach depends on the source data and how the HTML is constructed, but I'd treat the built-in sanitizer as defense-in-depth rather than the only security control.&lt;/P&gt;</description>
      <pubDate>Thu, 17 Sep 2026 15:10:19 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/5-ways-to-enhance-databricks-ai-bi-dashboard-tables-with-html/bc-p/169006#M1224</guid>
      <dc:creator>pstyld</dc:creator>
      <dc:date>2026-09-17T15:10:19Z</dc:date>
    </item>
    <item>
      <title>Tutorial: Databricks Genie for Data Engineers and Data Scientists</title>
      <link>https://community.databricks.com/t5/technical-blog/tutorial-databricks-genie-for-data-engineers-and-data-scientists/ba-p/168969</link>
      <description>&lt;P&gt;&lt;STRONG&gt;From a table to a running app: this hands-on tutorial takes you through the full data life cycle on 696 million records.&lt;/STRONG&gt; You access the data through Databricks Marketplace, run EDA with Genie Code, explore it in plain English with Genie Agents, generate a Spark Declarative Pipeline and a Lakeflow Job, and build a Databricks App. At every stage you learn how to prompt Genie, review its output, and decide where your own judgement takes over. Runs serverless on Databricks Free Edition.&lt;/P&gt;</description>
      <pubDate>Fri, 18 Sep 2026 08:57:28 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/tutorial-databricks-genie-for-data-engineers-and-data-scientists/ba-p/168969</guid>
      <dc:creator>DataAlchemist28</dc:creator>
      <dc:date>2026-09-18T08:57:28Z</dc:date>
    </item>
    <item>
      <title>Re: 5 Ways to Enhance Databricks AI/BI Dashboard Tables with HTML</title>
      <link>https://community.databricks.com/t5/technical-blog/5-ways-to-enhance-databricks-ai-bi-dashboard-tables-with-html/bc-p/168994#M1223</link>
      <description>&lt;P&gt;Nice approach. But I guess you need to encode values to avoid JavaScript injection? For example if label when calling html_link function would contain „&amp;lt;/a&amp;gt;&amp;lt;a href=mypishingsite.org&amp;gt;Click here“. Or is there some extra security methods in HTML type cell rendering?&lt;/P&gt;</description>
      <pubDate>Thu, 17 Sep 2026 13:41:40 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/5-ways-to-enhance-databricks-ai-bi-dashboard-tables-with-html/bc-p/168994#M1223</guid>
      <dc:creator>hschimanski</dc:creator>
      <dc:date>2026-09-17T13:41:40Z</dc:date>
    </item>
    <item>
      <title>Re: Actually understanding Unity Catalog Managed Tables</title>
      <link>https://community.databricks.com/t5/technical-blog/actually-understanding-unity-catalog-managed-tables/bc-p/168929#M1221</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/249473"&gt;@ivanvyd&lt;/a&gt;! Really good point!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Infrequent readers can indeed fall outside the observation window, but what actually matters is not how often it runs but whether it's a verified reader. If you're running this report from Databricks on the latest runtime, you don't need to worry about this (the latest runtimes support new features). The two situations to be careful about are external readers or a pinned DBR version that is below the latest/supported ones.&lt;/P&gt;
&lt;P&gt;For migration planning: flag those two kinds of infrequent readers, check them against each feature's minimum runtime before migrating, and audit what got enabled via system.storage.table_auto_upgrade_operations_history. If a reader hits an unsupported feature, you can turn the feature off, and Automatic Upgrades will not re-enable it.&lt;/P&gt;
&lt;P&gt;I hope it helps!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Sep 2026 10:50:03 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/actually-understanding-unity-catalog-managed-tables/bc-p/168929#M1221</guid>
      <dc:creator>Oleksandra</dc:creator>
      <dc:date>2026-09-17T10:50:03Z</dc:date>
    </item>
    <item>
      <title>Beyond the Dashboard: How Transferz Built a Truly Data-Driven Company Culture With AI/BI Genie</title>
      <link>https://community.databricks.com/t5/technical-blog/beyond-the-dashboard-how-transferz-built-a-truly-data-driven/ba-p/165106</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Discover how Transferz used AI/BI Genie to democratize data, achieving an 89,5% adoption rate amongst business users and 60% productivity increase am&lt;/SPAN&gt;&lt;SPAN&gt;ongst monthly active users&lt;/SPAN&gt;&lt;SPAN&gt; through a 4-phase playbook.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 16 Sep 2026 11:59:48 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/beyond-the-dashboard-how-transferz-built-a-truly-data-driven/ba-p/165106</guid>
      <dc:creator>LPurcell</dc:creator>
      <dc:date>2026-09-16T11:59:48Z</dc:date>
    </item>
    <item>
      <title>5 Ways to Enhance Databricks AI/BI Dashboard Tables with HTML</title>
      <link>https://community.databricks.com/t5/technical-blog/5-ways-to-enhance-databricks-ai-bi-dashboard-tables-with-html/ba-p/168681</link>
      <description>&lt;P&gt;AI/BI dashboard tables can render HTML, not just text. Here's how to use reusable Unity Catalog functions to turn a plain table into visual, scannable, action-ready tables.&lt;/P&gt;</description>
      <pubDate>Thu, 17 Sep 2026 15:21:23 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/5-ways-to-enhance-databricks-ai-bi-dashboard-tables-with-html/ba-p/168681</guid>
      <dc:creator>pstyld</dc:creator>
      <dc:date>2026-09-17T15:21:23Z</dc:date>
    </item>
    <item>
      <title>Re: [PARTNER BLOG] Building an Agent-Native Data Quality Manager with Databricks Apps and DQX</title>
      <link>https://community.databricks.com/t5/technical-blog/partner-blog-building-an-agent-native-data-quality-manager-with/bc-p/168586#M1215</link>
      <description>&lt;P&gt;This is great and satisfies one of the use cases within our business. Does the AI-assisted rule generation ever send raw production row values to the LLM/model endpoint, or does it only use metadata and aggregated profiling stats from inside the Databricks workspace?&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 21:05:44 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/partner-blog-building-an-agent-native-data-quality-manager-with/bc-p/168586#M1215</guid>
      <dc:creator>tmaund1704</dc:creator>
      <dc:date>2026-09-14T21:05:44Z</dc:date>
    </item>
    <item>
      <title>Re: Actually understanding Unity Catalog Managed Tables</title>
      <link>https://community.databricks.com/t5/technical-blog/actually-understanding-unity-catalog-managed-tables/bc-p/168568#M1213</link>
      <description>&lt;P&gt;Thank you for the explanation, &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/1179"&gt;@Oleksandra&lt;/a&gt;!&amp;nbsp;I'd be interested in an example covering infrequent readers, such as an annual reporting job that uses an otherwise active table. I believe that reader could fall outside the Auto Upgrades observation window, so guidance on accounting for it would be helpful for migration planning. Appreciate your guidance!&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 19:02:22 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/actually-understanding-unity-catalog-managed-tables/bc-p/168568#M1213</guid>
      <dc:creator>ivanvyd</dc:creator>
      <dc:date>2026-09-14T19:02:22Z</dc:date>
    </item>
    <item>
      <title>Re: Building Stateful Agents on Lakebase</title>
      <link>https://community.databricks.com/t5/technical-blog/building-stateful-agents-on-lakebase/bc-p/168567#M1212</link>
      <description>&lt;P&gt;Thanks for the great walkthrough, &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/101909"&gt;@AlexMiller&lt;/a&gt;. If inventory changes while a recommendation is waiting for approval, is it checked again when the run resumes? How do you decide whether the change warrants a revised plan and another review?&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 18:57:06 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/building-stateful-agents-on-lakebase/bc-p/168567#M1212</guid>
      <dc:creator>ivanvyd</dc:creator>
      <dc:date>2026-09-14T18:57:06Z</dc:date>
    </item>
    <item>
      <title>Re: Identity Columns Best Practices for Databricks Lakehouse</title>
      <link>https://community.databricks.com/t5/technical-blog/identity-columns-best-practices-for-databricks-lakehouse/bc-p/168511#M1211</link>
      <description>&lt;P&gt;&lt;EM&gt;"Sooner or later every data warehouse needs surrogate keys."&lt;BR /&gt;&lt;/EM&gt;For a classic data warehouse: yes!&lt;BR /&gt;For a lakehouse: optional.&lt;BR /&gt;If your linked source systems are solid and reliable (like ERP systems, they do still exist), the need for surrogate keys is not always there and would just add complexity (the devil is in the shuffle).&lt;BR /&gt;To add on this: if you want to use SKs but can't/won't use delta tables (so no auto ID):&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;- monotonically_increasing_id() (works on multi-node)&lt;/DIV&gt;&lt;DIV&gt;-&amp;nbsp;zipWithIndex() (only for singlenode)&lt;/DIV&gt;&lt;DIV&gt;- row_number (using a window and a sort, mucho expensive)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 14 Sep 2026 08:31:42 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/identity-columns-best-practices-for-databricks-lakehouse/bc-p/168511#M1211</guid>
      <dc:creator>-werners-</dc:creator>
      <dc:date>2026-09-14T08:31:42Z</dc:date>
    </item>
    <item>
      <title>Re: Identity Columns Best Practices for Databricks Lakehouse</title>
      <link>https://community.databricks.com/t5/technical-blog/identity-columns-best-practices-for-databricks-lakehouse/bc-p/168505#M1210</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/254110"&gt;@ravikiran7241&lt;/a&gt;&amp;nbsp;Generally speaking, it's not a good practice - I would even say it's an anti-pattern - to use identity columns in MV. It could generate some issues like instability on refreshes. But the main issue I see to that is on the concept of MV which are derived data, the source of truth for Ids should typically live in the dimension / facts tables, not being reinvented downstream.&lt;/P&gt;
&lt;P&gt;So I would recommend to review that and generate Ids upstream to your MV.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 06:16:54 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/identity-columns-best-practices-for-databricks-lakehouse/bc-p/168505#M1210</guid>
      <dc:creator>LaurentLeturgez</dc:creator>
      <dc:date>2026-09-14T06:16:54Z</dc:date>
    </item>
    <item>
      <title>Re: Tutorial: Transform your Lakeflow Connect ad data into visual and conversational analytics</title>
      <link>https://community.databricks.com/t5/technical-blog/tutorial-transform-your-lakeflow-connect-ad-data-into-visual-and/bc-p/168415#M1209</link>
      <description>&lt;P&gt;Much informative one.&lt;/P&gt;</description>
      <pubDate>Sat, 12 Sep 2026 08:27:13 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/tutorial-transform-your-lakeflow-connect-ad-data-into-visual-and/bc-p/168415#M1209</guid>
      <dc:creator>Khasim_1</dc:creator>
      <dc:date>2026-09-12T08:27:13Z</dc:date>
    </item>
    <item>
      <title>Re: Tutorial: Transform your Lakeflow Connect ad data into visual and conversational analytics</title>
      <link>https://community.databricks.com/t5/technical-blog/tutorial-transform-your-lakeflow-connect-ad-data-into-visual-and/bc-p/168414#M1208</link>
      <description>&lt;P&gt;Great accelerator!&lt;/P&gt;</description>
      <pubDate>Sat, 12 Sep 2026 08:09:18 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/tutorial-transform-your-lakeflow-connect-ad-data-into-visual-and/bc-p/168414#M1208</guid>
      <dc:creator>MinuMB</dc:creator>
      <dc:date>2026-09-12T08:09:18Z</dc:date>
    </item>
    <item>
      <title>Re: Meet SDP Rewind: An undo button for your ETL pipelines</title>
      <link>https://community.databricks.com/t5/technical-blog/meet-sdp-rewind-an-undo-button-for-your-etl-pipelines/bc-p/168404#M1207</link>
      <description>&lt;P&gt;This is awesome, thank you for the walkthrough (especially the watermark example)!&lt;/P&gt;&lt;P&gt;Since Rewind is scoped to one pipeline, could you clarify the recovery sequence for a separate downstream pipeline that has already consumed the affected rows through Delta change data feed?&lt;/P&gt;&lt;P&gt;Under what conditions can that consumer recover correct results by processing the RESTORE and replay changes from its existing checkpoint, and when would its output tables and operator state need separate recovery?&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;</description>
      <pubDate>Sat, 12 Sep 2026 00:42:25 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/meet-sdp-rewind-an-undo-button-for-your-etl-pipelines/bc-p/168404#M1207</guid>
      <dc:creator>ivanvyd</dc:creator>
      <dc:date>2026-09-12T00:42:25Z</dc:date>
    </item>
    <item>
      <title>Tutorial: Transform your Lakeflow Connect ad data into visual and conversational analytics</title>
      <link>https://community.databricks.com/t5/technical-blog/tutorial-transform-your-lakeflow-connect-ad-data-into-visual-and/ba-p/166659</link>
      <description>&lt;P&gt;Learn how the Ad-Genie accelerator deploys an AI/BI dashboard and a Genie agent to harness data ingested by Lakeflow Connect’s Google Ads, Meta Ads, and TikTok Ads connectors.&lt;/P&gt;</description>
      <pubDate>Fri, 11 Sep 2026 19:04:51 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/tutorial-transform-your-lakeflow-connect-ad-data-into-visual-and/ba-p/166659</guid>
      <dc:creator>abhishek-iyer</dc:creator>
      <dc:date>2026-09-11T19:04:51Z</dc:date>
    </item>
    <item>
      <title>Meet SDP Rewind: An undo button for your ETL pipelines</title>
      <link>https://community.databricks.com/t5/technical-blog/meet-sdp-rewind-an-undo-button-for-your-etl-pipelines/ba-p/166459</link>
      <description>&lt;P&gt;&lt;SPAN&gt;A bad deployment slips into your pipeline on Friday, and by Monday, it has been writing incorrect data for three days, with no clean way to roll it back. You can restore one table, but a pipeline is a graph of tables, source positions, and operator state that all moved forward together, and nothing puts them back in agreement. So most teams reprocess from the beginning, burning compute to fix a three-day mistake.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Today, we're announcing the beta of SDP Rewind, an undo button for Apache Spark™ Declarative Pipelines (SDP) that rolls the whole pipeline back to a consistent point in a single operation. You then fix your code and restart, and the pipeline picks up from the rewind point, so you pay only for the window you got wrong.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Why is this hard today?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Take that Friday deploy. The pipeline processes transactions from a landing table and has read one million of them. Over the weekend, 300,000 more transactions land and get processed incorrectly by the broken deploy, and the checkpoint advances from transaction 1,000,000 to 1,300,000. Now try to repair it with the tools you have:&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Restore the tables to their Friday versions, and the incorrect data is removed, but the checkpoint still reads 1,300,000. When you resume your pipeline, it starts at transaction 1,300,001, so transactions 1,000,001 through 1,300,000 are never re-read. The weekend's data is now missing.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Reset the checkpoint to Friday instead, and you get the opposite failure. The weekend's transactions are re-read and appended to the windows that already hold them, so every weekend payment is counted twice.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Fix both at once, tables back to Friday, and the checkpoint reset to match, and a third thing could still go wrong. The gold aggregation could carry its own state like a watermark on Sunday night. Restoring the tables and offsets leaves that state untouched, so the replayed transactions arrive behind the watermark and get dropped as late.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN&gt;Getting all three back to the same instant by hand, across every table and everything downstream of it, is the hard problem. So most teams do the only thing that is reliably safe: throw away the progress and reprocess from the beginning. While reprocessing from the beginning is foolproof, it is expensive and scales with your data. A three-day bug in a two-year-old pipeline costs two years of compute to fix.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="harshapasala_0-1787680555930.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/30269i9CFB445508B3346F/image-size/large?v=v2&amp;amp;px=999" role="button" title="harshapasala_0-1787680555930.png" alt="harshapasala_0-1787680555930.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;&lt;BR /&gt;What is SDP Rewind?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;SDP Rewind moves all of this back together in one operation. You choose a point in time, and it rolls each table back to its version from then, resets every source position, and restores the operator state of any stateful flows, all to the same instant. Take that same Friday deploy, and one rewind removes all three problems:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;The tables and the checkpoint move back together.&lt;/STRONG&gt;&lt;SPAN&gt; Rewind rolls both to Friday at once, so the re-read weekend transactions land in windows that no longer hold them. Nothing is skipped, so no data goes missing, and nothing is counted twice.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Operator state moves back with them.&lt;/STRONG&gt;&lt;SPAN&gt; Rewind also restores the gold aggregation's watermark to Friday, so the replayed rows arrive on time rather than behind it, and none are dropped late.&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;UL&gt;
&lt;LI aria-level="1"&gt;&lt;STRONG&gt;Rewind Cascades to all downstream objects in the pipeline. &lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;It does not stop at one table and state. In a single operation, it rolls back all downstream Streaming Tables and Materialized Views, each with their own data, offsets and state, to the same Friday point.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;LI-WRAPPER&gt;&lt;/LI-WRAPPER&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Then you fix your code and start the pipeline the way you always do. There is no separate replay command. The pipeline resumes from the rewind point, reprocesses forward using the current definition, catches up to the present, and returns to normal incremental processing. The cost of the repair is proportional to the window you rewound, not to the pipeline's lifetime.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The points you can rewind to are called rewind points. The pipeline generates them automatically, about once an hour, and keeps them for 7 days. How far back you can actually go depends on your own retention: an aggressive VACUUM, or a short retention on a Kafka topic, can shorten the window before any product limit does.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="harshapasala_1-1787680651583.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/30270iEC9ECE0BB796F92E/image-size/large?v=v2&amp;amp;px=999" role="button" title="harshapasala_1-1787680651583.png" alt="harshapasala_1-1787680651583.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;In practice, this is a single API call. A rewind is issued against the pipeline with a rewind_spec that carries two things: a point in time to return to, and the datasets to rewind. The skeleton of the call looks like this:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;databricks pipelines start-update &amp;lt;pipeline-id&amp;gt; --json '{
  "cause": "API_CALL",
  "rewind_spec": {
    "rewind_timestamp": "&amp;lt;point-in-time&amp;gt;",
    "datasets": [
      { "identifier": "&amp;lt;catalog&amp;gt;.&amp;lt;schema&amp;gt;.&amp;lt;table&amp;gt;", "cascade": true }
    ]
  }
}'&lt;/LI-CODE&gt;
&lt;H2&gt;&lt;SPAN&gt;How it works under the hood&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Rewind builds on Delta time travel. Delta already versions every table and can restore one to an earlier version, and that is the primitive Rewind uses to move each table's rows back. What Delta cannot do on its own is line up which table version goes with which source position, or coordinate that across a graph of tables. Rewind records for each table version, record the source position and operator state that produced it, then issue Delta's own RESTORE across the whole graph at once. The unit of recovery becomes the pipeline, not the table.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;How a rewind actually runs&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;When you trigger a rewind, the pipeline walks its graph from the top down, works out the version and batch for each table, and checkpoints should return to, issues a Delta RESTORE on every table, and rewinds each checkpoint (and its operator state, where applicable) to the matching batch.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;A Delta RESTORE does not delete the versions you roll back; it reapplies the old state as a new commit on top, so a table taken from version 100 to version 50 now sits at version 101 with version 50's contents. Left alone, the next run would re-read versions 51 through 100 and reprocess them, recreating the duplicate problem. Rewind hands the next run a set of skip ranges that tell it which now-phantom versions to read past, so the restart starts clean.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;These steps are not a single atomic transaction, so a crash could leave the pipeline half-rewound. Two guards prevent that: RESTORE is idempotent, and the pipeline blocks ordinary updates until the rewind completes. Rewinding again to the same point converges, so a failed rewind leaves the pipeline stopped but recoverable.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="harshapasala_2-1787680843475.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/30271i8E20B1DBDE2CF1E9/image-size/large?v=v2&amp;amp;px=999" role="button" title="harshapasala_2-1787680843475.png" alt="harshapasala_2-1787680843475.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Rewind in practice&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;We built a&lt;/SPAN&gt;&lt;A href="https://github.com/databricks-solutions/sdp-rewind-replay" target="_blank"&gt; &lt;SPAN&gt;companion repository&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; that stages the scenario above. It is a payments pipeline built on the medallion architecture: raw transactions land in bronze, get cleaned and converted in silver, and roll up in gold, which is a stateful five-minute windowed aggregation of settled dollars per merchant. It is small enough to read in a sitting and complete enough to break on purpose and recover for real. To follow along, clone it:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;git clone https://github.com/databricks-solutions/sdp-rewind-replay&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Before deploying, configure variables in databricks.yml to set the catalog and schema the tables land in, the landing table's name, and a warehouse ID (which the seeding script uses to maintain a steady rate of transaction seed). Then deploy it with&lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/dev-tools/bundles/" target="_blank"&gt; &lt;SPAN&gt;Declarative Automation Bundles&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;, which provisions the catalog, schema, landing table, pipeline, and dashboard in a single step using:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;databricks bundle deploy&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;With the seeder feeding and the pipeline consuming, you have a live, healthy stream to break. The defect is a single wrong divisor in the silver transform, at src/pipeline.py:101. Amounts arrive as integer cents, so 7969 means $79.69, and the correct line divides by 100:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;.withColumn("amount", F.col("amount_minor").cast("double") / 100)
# .withColumn("amount", F.col("amount_minor").cast("double") / 10)&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;The two lines sit right below each other in the file, and exactly one is ever active. To introduce the bug, comment out the / 100 line, uncomment the / 10 line, and redeploy; to fix it later, swap them back.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;This gets past both review and the platform. The value is still a double, so the schema is unchanged, and there is nothing for the pipeline to reject. The line still reads like an ordinary unit conversion. It is wrong in exactly the way that survives every automated check.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Nothing automated catches it, so the first place it surfaces is the dashboard that the bundle deploys. Settled dollars are plotted as bars, transaction count as a line, and normally they move together: more transactions, more money. Since the deployment, the bars spike while the line stays flat; the same payments at the same volume are valued incorrectly.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="harshapasala_3-1787681175997.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/30272iF36D1741F37FA1F5/image-size/large?v=v2&amp;amp;px=999" role="button" title="harshapasala_3-1787681175997.png" alt="harshapasala_3-1787681175997.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;I&gt;&lt;SPAN&gt;Payments Dashboard: Settled dollars jump ~10x right after the deploy, while transaction count stays flat&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Recovery follows the three steps. First, deploy the corrected divisor, because replaying against the still-broken logic would only recreate the corruption. Then issue the rewind. Through the CLI, it is a single call, anchored against the UTC timestamp of the last known healthy state of the pipeline:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;databricks pipelines start-update &amp;lt;pipeline-id&amp;gt; --json '{
  "cause": "API_CALL",
  "rewind_spec": {
    "rewind_timestamp": "&amp;lt;timestamp&amp;gt;",
    "datasets": [
      { "identifier": "catalog.schema.silver_payments", "cascade": true }
    ]
  }
}'&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;When the rewind finishes, every object from silver down has been carried back to the last healthy state, aligned to the same instant. From here, you start the pipeline. It picks up where the healthy history left off and processes forward through the corrected code. When it catches up, gold holds exactly the windows it would have held if the bad deploy had never happened: the corrupted rows replaced by correct ones, the healthy history before them untouched, no duplicated windows, no duplicated payments. Exactly-once semantics hold through a stateful aggregation, across a rewind, in a continuous pipeline.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="harshapasala_4-1787681236370.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/30273iAA353FE45B3BBBDD/image-size/large?v=v2&amp;amp;px=999" role="button" title="harshapasala_4-1787681236370.png" alt="harshapasala_4-1787681236370.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;I&gt;&lt;SPAN&gt;Payments Dashboard: After the code fix and Rewind, settled dollars are back in line. Only the affected windows were reprocessed; the rest of the data was left untouched.&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;One declarative command returns the whole pipeline to a consistent state, reprocessing only the broken window and nothing else.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Try it&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;SDP Rewind is entering beta across Kafka, Delta, and streaming-table sources, with stateful operators. Refer to the &lt;A href="https://docs.databricks.com/aws/en/ldp/rewind" target="_self"&gt;documentation&lt;/A&gt; for more about the API. The full demo, including the pipeline, dashboard, and recovery flow, is available for deployment in your own workspace:&lt;/SPAN&gt;&lt;A href="https://github.com/databricks-solutions/sdp-rewind-replay" target="_self"&gt; &lt;SPAN&gt;databricks-solutions/sdp-rewind-replay&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;. Run it, break it on purpose, and hit rewind yourself.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 15 Sep 2026 02:21:58 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/meet-sdp-rewind-an-undo-button-for-your-etl-pipelines/ba-p/166459</guid>
      <dc:creator>harshapasala</dc:creator>
      <dc:date>2026-09-15T02:21:58Z</dc:date>
    </item>
  </channel>
</rss>

