<?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 Genie Hub posts</title>
    <link>https://community.databricks.com/t5/genie-hub/bd-p/Genie_Content_Center</link>
    <description>All Genie Hub posts</description>
    <pubDate>Sun, 16 Aug 2026 04:30:38 GMT</pubDate>
    <dc:creator>Genie_Content_Center</dc:creator>
    <dc:date>2026-08-16T04:30:38Z</dc:date>
    <item>
      <title>Re: Learn Databricks Genie: 5 courses to go from curious to certified</title>
      <link>https://community.databricks.com/t5/genie-hub/learn-databricks-genie-5-courses-to-go-from-curious-to-certified/m-p/165605#M30</link>
      <description>&lt;P&gt;Thanks for the suggestion, &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/73447"&gt;@Nidhig631&lt;/a&gt;! We're working on a similar roundup for Agent Bricks, stay tuned!&lt;/P&gt;</description>
      <pubDate>Thu, 13 Aug 2026 09:38:03 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/learn-databricks-genie-5-courses-to-go-from-curious-to-certified/m-p/165605#M30</guid>
      <dc:creator>Tushar_Parekar</dc:creator>
      <dc:date>2026-08-13T09:38:03Z</dc:date>
    </item>
    <item>
      <title>Re: Learn Databricks Genie: 5 courses to go from curious to certified</title>
      <link>https://community.databricks.com/t5/genie-hub/learn-databricks-genie-5-courses-to-go-from-curious-to-certified/m-p/165587#M27</link>
      <description>&lt;P&gt;This is really good, Thanks for sharing.&lt;/P&gt;&lt;P&gt;Can you share similar listing for agent bricks.&lt;/P&gt;</description>
      <pubDate>Thu, 13 Aug 2026 02:39:01 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/learn-databricks-genie-5-courses-to-go-from-curious-to-certified/m-p/165587#M27</guid>
      <dc:creator>Nidhig631</dc:creator>
      <dc:date>2026-08-13T02:39:01Z</dc:date>
    </item>
    <item>
      <title>Learn Databricks Genie: 5 courses to go from curious to certified</title>
      <link>https://community.databricks.com/t5/genie-hub/learn-databricks-genie-5-courses-to-go-from-curious-to-certified/m-p/165537#M26</link>
      <description>&lt;DIV style="width: 100%; margin: 0 auto; font-family: Arial,Helvetica,sans-serif; color: #0b2026;"&gt;
&lt;DIV style="background-color: #0b2026; padding: 30px 34px 28px 34px; border-radius: 14px 14px 0 0; overflow: hidden;"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="DAT_Stacked_Lock_up_Full_Color_White@2x.png" style="width: 104px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/29975iB27742B0C457B7AC/image-size/medium?v=v2&amp;amp;px=400" width="104" role="button" title="DAT_Stacked_Lock_up_Full_Color_White@2x.png" alt="DAT_Stacked_Lock_up_Full_Color_White@2x.png" /&gt;&lt;/span&gt;
&lt;DIV style="color: #fcba33; font-size: 13px; font-weight: bold; letter-spacing: 2px; text-transform: uppercase;"&gt;Databricks Training &amp;amp; Certifications&lt;/DIV&gt;
&lt;DIV style="color: #ffffff; font-size: 26px; font-weight: 800; line-height: 1.25; margin-top: 4px;"&gt;Learn Databricks Genie &lt;span class="lia-inline-image-display-wrapper lia-image-align-absmiddle" image-alt="genie-icon-full-color-container-895x735-c96edd3.png" style="width: 30px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/29976iC8E72B6D6956F176/image-size/medium?v=v2&amp;amp;px=400" width="30" role="button" title="genie-icon-full-color-container-895x735-c96edd3.png" alt="genie-icon-full-color-container-895x735-c96edd3.png" /&gt;&lt;/span&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV style="background-color: #f9f7f4; padding: 30px 34px 26px 34px;"&gt;
&lt;DIV style="font-size: 17px; line-height: 1.6; color: #0b2026;"&gt;Want to turn plain-language questions into governed, secure answers from your data? &lt;STRONG&gt;Databricks AI/BI Genie&lt;/STRONG&gt; is the conversational analytics layer that lets business users ask questions and get trustworthy, SQL-backed results - no code required.&lt;/DIV&gt;
&lt;DIV style="font-size: 17px; line-height: 1.6; color: #0b2026; margin-top: 14px;"&gt;The Databricks catalog currently lists &lt;STRONG&gt;5 Genie courses&lt;/STRONG&gt; - a mix of free and paid, from a 2-hour onboarding to instructor-led Associate labs. Pick the one that fits your level and start learning. &lt;span class="lia-unicode-emoji" title=":backhand_index_pointing_down:"&gt;👇&lt;/span&gt;&lt;/DIV&gt;
&lt;DIV style="font-size: 20px; font-weight: 800; color: #0b2026; border-left: 4px solid #ff3621; padding-left: 12px; margin-top: 26px; margin-bottom: 14px;"&gt;Start here&lt;/DIV&gt;
&lt;DIV style="background-color: #ffffff; border-radius: 12px; padding: 20px 22px; margin-bottom: 14px; overflow: hidden;"&gt;&lt;SPAN&gt;FREE&lt;/SPAN&gt;
&lt;DIV style="font-size: 18px; font-weight: 800; color: #0b2026; line-height: 1.3;"&gt;Answering Business Questions with Databricks Genie&lt;/DIV&gt;
&lt;DIV style="font-size: 14px; line-height: 1.55; color: #33413f; margin-top: 8px;"&gt;Learn what a Genie Space is, how it keeps your data secure, and best practices for great results. Closes with a hands-on game where you compete to investigate a business mystery.&lt;/DIV&gt;
&lt;DIV style="margin-top: 12px;"&gt;&lt;A style="display: inline-block; background-color: #f0ede8; color: #0b2026; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 6px 0;" target="_blank"&gt;Self-paced&lt;/A&gt; &lt;A style="display: inline-block; background-color: #f0ede8; color: #0b2026; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 6px 0;" target="_blank"&gt;2 hours&lt;/A&gt; &lt;A style="display: inline-block; background-color: #f0ede8; color: #0b2026; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 6px 0;" target="_blank"&gt;Onboarding&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV style="margin-top: 14px;"&gt;&lt;A style="display: inline-block; background-color: #ff3621; color: #ffffff; font-size: 14px; font-weight: 800; text-decoration: none; padding: 11px 22px; border-radius: 8px;" href="https://www.databricks.com/training/catalog/answering-business-questions-with-databricks-genie-5777" target="_blank"&gt;Enroll free →&lt;/A&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV style="background-color: #ffffff; border-radius: 12px; padding: 20px 22px; margin-bottom: 6px; overflow: hidden;"&gt;&lt;SPAN&gt;FREE&lt;/SPAN&gt;
&lt;DIV style="font-size: 18px; font-weight: 800; color: #0b2026; line-height: 1.3;"&gt;Business Impact Accelerator: Answering Business Questions with Genie&lt;/DIV&gt;
&lt;DIV style="font-size: 14px; line-height: 1.55; color: #33413f; margin-top: 8px;"&gt;A guided, instructor-led take on Genie for business users - ask plain-language questions, understand governance and security, and learn best practices in a live lab setting.&lt;/DIV&gt;
&lt;DIV style="margin-top: 12px;"&gt;&lt;A style="display: inline-block; background-color: #f0ede8; color: #0b2026; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 6px 0;" target="_blank"&gt;Instructor-led + Lab&lt;/A&gt; &lt;A style="display: inline-block; background-color: #f0ede8; color: #0b2026; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 6px 0;" target="_blank"&gt;3 hours&lt;/A&gt; &lt;A style="display: inline-block; background-color: #f0ede8; color: #0b2026; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 6px 0;" target="_blank"&gt;Onboarding&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV style="margin-top: 14px;"&gt;&lt;A style="display: inline-block; background-color: #ff3621; color: #ffffff; font-size: 14px; font-weight: 800; text-decoration: none; padding: 11px 22px; border-radius: 8px;" href="https://www.databricks.com/training/catalog/business-impact-accelerator-answering-business-questions-with-genie-5361" target="_blank"&gt;Enroll free →&lt;/A&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV style="font-size: 20px; font-weight: 800; color: #0b2026; border-left: 4px solid #ff3621; padding-left: 12px; margin-top: 28px; margin-bottom: 12px;"&gt;Go deeper: build production Genie Agents&lt;/DIV&gt;
&lt;DIV style="font-size: 15px; line-height: 1.6; color: #33413f; margin-bottom: 14px;"&gt;&lt;STRONG&gt;Building Reliable Conversational Agents with Genie&lt;/STRONG&gt; teaches the full end-to-end workflow - defining benchmarks, curating the Knowledge Store (metadata, synonyms, SQL logic, example queries), sharing via Genie One, and enforcing Unity Catalog governance. Available in three formats:&lt;/DIV&gt;
&lt;DIV style="background-color: #0b2026; border-radius: 12px; padding: 18px 20px; margin-bottom: 12px;"&gt;
&lt;DIV style="font-size: 16px; font-weight: 800; color: #ffffff;"&gt;Self-paced · Onboarding&lt;/DIV&gt;
&lt;DIV style="margin-top: 8px;"&gt;&lt;A style="display: inline-block; background-color: #fcba33; color: #0b2026; font-size: 12px; font-weight: 800; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 0 0;" target="_blank"&gt;FREE&lt;/A&gt; &lt;A style="display: inline-block; background-color: #1b333a; color: #d1d9db; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none;" target="_blank"&gt;2 hours&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV style="margin-top: 12px;"&gt;&lt;A style="display: inline-block; background-color: #ff3621; color: #ffffff; font-size: 13px; font-weight: 800; text-decoration: none; padding: 9px 18px; border-radius: 8px;" href="https://www.databricks.com/training/catalog/building-reliable-conversational-agents-with-genie-5222" target="_blank"&gt;Start free →&lt;/A&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV style="background-color: #0b2026; border-radius: 12px; padding: 18px 20px; margin-bottom: 12px;"&gt;
&lt;DIV style="font-size: 16px; font-weight: 800; color: #ffffff;"&gt;Self-paced + Lab · Associate&lt;/DIV&gt;
&lt;DIV style="margin-top: 8px;"&gt;&lt;A style="display: inline-block; background-color: #fcba33; color: #0b2026; font-size: 12px; font-weight: 800; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 0 0;" target="_blank"&gt;PAID / SUBSCRIPTION&lt;/A&gt; &lt;A style="display: inline-block; background-color: #1b333a; color: #d1d9db; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none;" target="_blank"&gt;3 hours&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV style="margin-top: 12px;"&gt;&lt;A style="display: inline-block; background-color: #ff3621; color: #ffffff; font-size: 13px; font-weight: 800; text-decoration: none; padding: 9px 18px; border-radius: 8px;" href="https://www.databricks.com/training/catalog/building-reliable-conversational-agents-with-genie-5220" target="_blank"&gt;View course →&lt;/A&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV style="background-color: #0b2026; border-radius: 12px; padding: 18px 20px; margin-bottom: 6px;"&gt;
&lt;DIV style="font-size: 16px; font-weight: 800; color: #ffffff;"&gt;Instructor-led + Lab · Associate&lt;/DIV&gt;
&lt;DIV style="margin-top: 8px;"&gt;&lt;A style="display: inline-block; background-color: #fcba33; color: #0b2026; font-size: 12px; font-weight: 800; padding: 4px 12px; border-radius: 20px; text-decoration: none; margin: 0 4px 0 0;" target="_blank"&gt;PAID&lt;/A&gt; &lt;A style="display: inline-block; background-color: #1b333a; color: #d1d9db; font-size: 12px; font-weight: bold; padding: 4px 12px; border-radius: 20px; text-decoration: none;" target="_blank"&gt;4 hours&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV style="margin-top: 12px;"&gt;&lt;A style="display: inline-block; background-color: #ff3621; color: #ffffff; font-size: 13px; font-weight: 800; text-decoration: none; padding: 9px 18px; border-radius: 8px;" href="https://www.databricks.com/training/catalog/building-reliable-conversational-agents-with-genie-5217" target="_blank"&gt;View course →&lt;/A&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV style="text-align: center; margin-top: 22px;"&gt;&lt;A style="display: inline-block; background-color: #0b2026; color: #ffffff; font-size: 15px; font-weight: 800; text-decoration: none; padding: 14px 30px; border-radius: 8px;" href="https://www.databricks.com/training/catalog?search=genie" target="_blank"&gt;Browse all Genie courses in the catalog →&lt;/A&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV style="background-color: #0b2026; padding: 22px 34px; border-radius: 0 0 14px 14px; text-align: center;"&gt;
&lt;DIV style="color: #d1d9db; font-size: 13px; line-height: 1.6;"&gt;Governed. Secure. Conversational. Learn Genie the right way with official Databricks training.&lt;/DIV&gt;
&lt;DIV style="color: #fcba33; font-size: 13px; font-weight: bold; margin-top: 6px;"&gt;#Databricks #Genie #AIBI&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Wed, 12 Aug 2026 17:33:56 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/learn-databricks-genie-5-courses-to-go-from-curious-to-certified/m-p/165537#M26</guid>
      <dc:creator>Tushar_Parekar</dc:creator>
      <dc:date>2026-08-12T17:33:56Z</dc:date>
    </item>
    <item>
      <title>Integrate genie workspaces automatically based on connection.</title>
      <link>https://community.databricks.com/t5/genie-hub/integrate-genie-workspaces-automatically-based-on-connection/m-p/165499#M25</link>
      <description>&lt;P&gt;Hi Genie Hub team,&lt;/P&gt;&lt;P&gt;I’ve been building an enterprise application around Genie and ran into an interesting integration problem that I’d love to get the community’s perspective on.&lt;/P&gt;&lt;P&gt;In our setup, the application can connect to different Databricks environments, but integrating Genie currently means explicitly managing the Genie Space/workspace configuration for each environment, while also dealing with Unity Catalog permissions, access control and governance.&lt;/P&gt;&lt;P&gt;That becomes increasingly difficult when the same application needs to support multiple customers or multiple Databricks workspaces.&lt;/P&gt;&lt;P&gt;This led me to a broader idea:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Could Genie integration become connection-driven rather than configuration-driven?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;For example:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Databricks connection → discover eligible Genie Spaces → validate UC/access requirements → automatically select/register the appropriate Genie Space → enforce the required governance model.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;The interesting part for me is that the application shouldn't need to know &lt;EM&gt;“use Genie Space ID X for workspace Y.”&lt;/EM&gt; The Databricks connection itself should be enough to discover and establish the correct Genie integration.&lt;/P&gt;&lt;P&gt;I’m currently experimenting with this architecture and would particularly like to hear from people working on Genie at scale:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;How are you handling Genie Space discovery across multiple workspaces?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;How are you managing UC permissions and governance for application-driven Genie access?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Is there a recommended Databricks-native pattern for making this connection/configuration dynamic?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Would an automated connection → Genie integration layer be useful for enterprise deployments?&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;I’d be very interested in connecting with anyone from the Genie/AI-BI or Databricks partner ecosystem who is working on this problem. I’d also be happy to share what we’ve built and the problems we encountered in a real implementation.&lt;/P&gt;</description>
      <pubDate>Wed, 12 Aug 2026 13:48:12 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/integrate-genie-workspaces-automatically-based-on-connection/m-p/165499#M25</guid>
      <dc:creator>Aadarsh_K</dc:creator>
      <dc:date>2026-08-12T13:48:12Z</dc:date>
    </item>
    <item>
      <title>Re: Dashboard for Genie Cost and Usage tracking</title>
      <link>https://community.databricks.com/t5/genie-hub/dashboard-for-genie-cost-and-usage-tracking/m-p/165354#M24</link>
      <description>&lt;P&gt;Very useful—really appreciate your work. Thank you!&lt;/P&gt;</description>
      <pubDate>Tue, 11 Aug 2026 12:04:08 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/dashboard-for-genie-cost-and-usage-tracking/m-p/165354#M24</guid>
      <dc:creator>Shahid_Haider</dc:creator>
      <dc:date>2026-08-11T12:04:08Z</dc:date>
    </item>
    <item>
      <title>Solution: Simplify Genie Agent Instruction Updates Across Multiple Spaces</title>
      <link>https://community.databricks.com/t5/genie-hub/solution-simplify-genie-agent-instruction-updates-across/m-p/165309#M28</link>
      <description>&lt;P&gt;Dear All,&lt;/P&gt;&lt;P&gt;As the number of Genie Agents grows, maintaining consistent instructions across multiple Genie Spaces becomes increasingly cumbersome. Updating the same instructions manually in each space requires significant effort and is both time-consuming and error-prone.&lt;/P&gt;&lt;P&gt;To simplify this process, we have created a notebook-based solution that automatically updates Genie instructions across multiple spaces. To use it, simply replace the following values in the notebook:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Genie Space IDs&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Databricks Workspace URL&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Personal Access Token (PAT)&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Desired Instructions&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Once configured, the notebook will automatically apply the same instructions to all specified Genie Spaces, eliminating the need for repetitive manual updates.&lt;/P&gt;&lt;P&gt;This should significantly reduce maintenance effort and ensure consistency across your Genie Agents.&lt;/P&gt;&lt;P&gt;Attached notebook code:&lt;/P&gt;&lt;P&gt;================================start here====================================&lt;/P&gt;&lt;P&gt;import requests&lt;BR /&gt;import json&lt;/P&gt;&lt;P&gt;workspace_url = "&amp;lt;your databricks workspace url"&lt;BR /&gt;token = "&amp;lt;your PAT token"&lt;/P&gt;&lt;P&gt;headers = {&lt;BR /&gt;"Authorization": f"Bearer {token}",&lt;BR /&gt;"Content-Type": "application/json"&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;space_ids = [&lt;BR /&gt;"&amp;lt;genie space id 1&amp;gt;",&lt;BR /&gt;"&amp;lt;genie space id 2&amp;gt;",&lt;BR /&gt;"&amp;lt;genie space id n&amp;gt;&lt;BR /&gt;]&lt;/P&gt;&lt;P&gt;NEW_INSTRUCTION = """&lt;BR /&gt;Your Role: Databricks SQL Analyst.&lt;BR /&gt;Rule 1: Use only tables, columns, joins, and logic defined in this Genie space. Never invent any.&lt;BR /&gt;Rule 2: Before generating a query, validate all rules.&lt;BR /&gt;&amp;lt;Your extended prompt Rules&amp;gt;&lt;BR /&gt;"""&lt;/P&gt;&lt;P&gt;for space_id in space_ids:&lt;BR /&gt;try:&lt;BR /&gt;# Get existing space&lt;BR /&gt;url = f"{workspace_url}/api/2.0/genie/spaces/{space_id}"&lt;BR /&gt;response = requests.get(&lt;BR /&gt;f"{url}?include_serialized_space=true",&lt;BR /&gt;headers=headers&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;response.raise_for_status()&lt;/P&gt;&lt;P&gt;space = response.json()&lt;/P&gt;&lt;P&gt;serialized = json.loads(space["serialized_space"])&lt;/P&gt;&lt;P&gt;# Replace instructions&lt;BR /&gt;serialized["instructions"]["text_instructions"] = [{&lt;BR /&gt;"content": [NEW_INSTRUCTION]&lt;BR /&gt;}]&lt;/P&gt;&lt;P&gt;payload = {&lt;BR /&gt;"serialized_space": json.dumps(serialized)&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;update_resp = requests.patch(&lt;BR /&gt;url,&lt;BR /&gt;headers=headers,&lt;BR /&gt;json=payload&lt;BR /&gt;)&lt;/P&gt;&lt;P&gt;print(&lt;BR /&gt;f"{space_id}: {update_resp.status_code}"&lt;BR /&gt;)&lt;BR /&gt;except requests.exceptions.RequestException as e:&lt;BR /&gt;print(f"{space_id}: Request failed - {e}")&lt;BR /&gt;except Exception as e:&lt;BR /&gt;print(f"{space_id}: Unexpected error - {e}")&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;=========================================end here================================&lt;/P&gt;</description>
      <pubDate>Tue, 11 Aug 2026 05:54:18 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/solution-simplify-genie-agent-instruction-updates-across/m-p/165309#M28</guid>
      <dc:creator>harisrinivasay</dc:creator>
      <dc:date>2026-08-11T05:54:18Z</dc:date>
    </item>
    <item>
      <title>Copilot for Data Platform Operations -  Genie ZeroOps (24 * 7)</title>
      <link>https://community.databricks.com/t5/genie-hub/copilot-for-data-platform-operations-genie-zeroops-24-7/m-p/164735#M23</link>
      <description>&lt;DIV&gt;&lt;STRONG&gt;Databricks Genie ZeroOps&lt;/STRONG&gt; is one of the most interesting announcements from &lt;STRONG&gt;Data + AI Summit 2026&lt;/STRONG&gt;. It is essentially an &lt;STRONG&gt;AI-powered autonomous DataOps agent&lt;/STRONG&gt; built directly into the Databricks platform that continuously monitors your data and AI workloads, diagnoses issues, and proposes fixes automatically.&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;P&gt;Genie ZeroOps is designed to work in the background 24x7, significantly reducing the operational burden on data engineering teams. Rather than simply alerting teams when issues occur, it proactively:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Monitors&lt;/STRONG&gt; data and AI workloads continuously&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Detects&lt;/STRONG&gt; failures and anomalies&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Diagnoses&lt;/STRONG&gt; the root cause using lineage and observability data&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Generates remediation recommendations&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Validates fixes in a secure sandbox environment&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Routes changes for human approval before production deployment&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;High level approach from&amp;nbsp;Reactive Operations to Autonomous Operations.&lt;/STRONG&gt;&lt;/P&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Detect&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ↓&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Auto RCA&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ↓&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Auto Fix Generation&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ↓&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sandbox Testing&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ↓&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Human Approval&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Exciting to get Genie in GA.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 03 Aug 2026 12:06:17 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/copilot-for-data-platform-operations-genie-zeroops-24-7/m-p/164735#M23</guid>
      <dc:creator>rkhand14_ltm</dc:creator>
      <dc:date>2026-08-03T12:06:17Z</dc:date>
    </item>
    <item>
      <title>Re: How to get started with Genie Ontlogy?</title>
      <link>https://community.databricks.com/t5/genie-hub/how-to-get-started-with-genie-ontlogy/m-p/164383#M20</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What are the prerequisites for using Genie Ontology?&lt;BR /&gt;&lt;BR /&gt;&lt;/STRONG&gt;Genie Ontology is under gated Public Preview. If you want to try it you need to contact with Databricks account team&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="szymon_dybczak_0-1785318768490.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/29556iDCB603556CCD0440/image-size/medium?v=v2&amp;amp;px=400" role="button" title="szymon_dybczak_0-1785318768490.png" alt="szymon_dybczak_0-1785318768490.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;How do I build and configure an ontology from scratch?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Rather than configuring the ontology object directly, you invest in the Unity Catalog semantic layer that feeds it: Glossary for authoritative concepts and terms, Domains to organize data and AI assets into business-aligned categories, and Metrics to govern KPIs once as reusable objects.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Are there any official guides, best practices, or sample implementations that you would recommend?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Not yet. This is really new topic and access is only for selected ones. You can check some blogs:&lt;BR /&gt;&lt;A href="https://www.databricks.com/blog/introducing-genie-one-genie-ontology-and-genie-agents" target="_blank"&gt;&lt;BR /&gt;Introducing Genie One, Genie Agents, and Genie Ontology | Databricks Blog&lt;BR /&gt;&lt;BR /&gt;&lt;/A&gt;Here is some video example:&amp;nbsp;&lt;A href="https://www.youtube.com/watch?v=VQrIFB4S76c&amp;amp;t=196s" target="_blank"&gt;Databricks DAIS 2026 ALL ANNOUNCEMENTS SUMMARIZED | Ontology, Reyden, LTAP, Omnigent &amp;amp; More&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Is Genie Ontology currently in Public Preview, Private Preview, or General Availability?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Genie Ontology is under gated Public Preview. If you want to try it you need to contact with Databricks account team&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Where should I be able to access it in the Databricks workspace? I don't see the Genie Ontology option or icon in my workspace, so I'm wondering if there are any workspace requirements, feature flags, or permissions that need to be enabled.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;It should be visible under Genie One. Check above youtube video. You don't see it because public preview is gated and you need to contact databricks team to enable it.&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="szymon_dybczak_1-1785319418614.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/29557iACAA24C168438C39/image-size/medium?v=v2&amp;amp;px=400" role="button" title="szymon_dybczak_1-1785319418614.png" alt="szymon_dybczak_1-1785319418614.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;If my asnwer was helpful, please consider marking it as accepted solution&lt;/STRONG&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;</description>
      <pubDate>Wed, 29 Jul 2026 10:04:52 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/how-to-get-started-with-genie-ontlogy/m-p/164383#M20</guid>
      <dc:creator>szymon_dybczak</dc:creator>
      <dc:date>2026-07-29T10:04:52Z</dc:date>
    </item>
    <item>
      <title>Dashboard for Genie Cost and Usage tracking</title>
      <link>https://community.databricks.com/t5/genie-hub/dashboard-for-genie-cost-and-usage-tracking/m-p/164372#M19</link>
      <description>&lt;P&gt;Sharing my new dashboard for tracking Genie usage and costs, suggestions for improvements and features are welcome.&lt;/P&gt;&lt;P&gt;The current version displays and aggregates Genie LLM costs, free &amp;amp; billable DBU consumptions, and code interactions per user on a daily, monthly, and workspace leve. More functionality will be added soon, it can be found at &lt;A href="https://github.com/WowdyCloudy/wowdycloudy/tree/main/dashboards" target="_blank"&gt;https://github.com/WowdyCloudy/wowdycloudy/tree/main/dashboards&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="S.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/29553i8E339263CE2D38EF/image-size/medium?v=v2&amp;amp;px=400" role="button" title="S.png" alt="S.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;</description>
      <pubDate>Wed, 29 Jul 2026 07:33:41 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/dashboard-for-genie-cost-and-usage-tracking/m-p/164372#M19</guid>
      <dc:creator>DataCloudy</dc:creator>
      <dc:date>2026-07-29T07:33:41Z</dc:date>
    </item>
    <item>
      <title>How to get started with Genie Ontlogy?</title>
      <link>https://community.databricks.com/t5/genie-hub/how-to-get-started-with-genie-ontlogy/m-p/164367#M18</link>
      <description>&lt;P&gt;Hello Databricks Community,&lt;/P&gt;&lt;P&gt;I recently started exploring Genie Ontology and would like to implement it as part of a POC. However, I'm not sure how to get started.&lt;/P&gt;&lt;P&gt;I have a few questions:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;What are the prerequisites for using Genie Ontology?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;How do I build and configure an ontology from scratch?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Are there any official guides, best practices, or sample implementations that you would recommend?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Is Genie Ontology currently in Public Preview, Private Preview, or General Availability?&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Where should I be able to access it in the Databricks workspace? I don't see the Genie Ontology option or icon in my workspace, so I'm wondering if there are any workspace requirements, feature flags, or permissions that need to be enabled.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;If anyone has already worked with Genie Ontology, I'd really appreciate any guidance, documentation, or tips on getting started.&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jul 2026 07:04:40 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/how-to-get-started-with-genie-ontlogy/m-p/164367#M18</guid>
      <dc:creator>Niyojit</dc:creator>
      <dc:date>2026-07-29T07:04:40Z</dc:date>
    </item>
    <item>
      <title>Re: UC Permission Automation Strategy</title>
      <link>https://community.databricks.com/t5/genie-hub/uc-permission-automation-strategy/m-p/163960#M17</link>
      <description>&lt;P&gt;Thank you&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/245078"&gt;@binlogreader&lt;/a&gt;&amp;nbsp;your perspective and experience were very insightful&lt;/P&gt;</description>
      <pubDate>Fri, 24 Jul 2026 02:21:27 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/uc-permission-automation-strategy/m-p/163960#M17</guid>
      <dc:creator>samson01</dc:creator>
      <dc:date>2026-07-24T02:21:27Z</dc:date>
    </item>
    <item>
      <title>Re: UC Permission Automation Strategy</title>
      <link>https://community.databricks.com/t5/genie-hub/uc-permission-automation-strategy/m-p/163958#M16</link>
      <description>&lt;P&gt;We run Terraform as the system of record for Unity Catalog grants, with asset bundles handling a separate layer, and the split of responsibilities turned out to matter more than the tool choice.&lt;BR /&gt;&lt;BR /&gt;The first lesson cost us real debugging time. &lt;STRONG&gt;databricks_grants&lt;/STRONG&gt; is authoritative for the securable it points at. It manages the complete grant list on that object, so if two stacks or repos both declare grants on the same catalog, every apply of one silently reverts the other. The symptom is grants that seem to disappear randomly. The fix was organizational rather than technical, exactly one stack owns each securable's grants, and every other team adds grants by pull request to that owner.&lt;BR /&gt;&lt;BR /&gt;Second, humans get access only through groups, with membership managed in the identity provider and synced down. Day-to-day access changes are then membership operations that never touch Terraform. The code changes only when a new group-to-privilege relationship appears, which is rare and worth the review. Service principals get their own explicit grants, since those represent workloads, not people.&lt;BR /&gt;&lt;BR /&gt;Third, your Terraform and metadata-driven options are less opposed than they look. Grant definitions in Terraform are already metadata, maps of principal to privileges fed into for_each, and you can keep that config in YAML files the code reads. That gives you the centralized declarative model of the API approach while keeping plan diffs, code review, and drift detection for free, all things a custom REST engine has to rebuild. In our experience the custom engine only earns its complexity when you need approval workflows or self-service at a scale where pull requests become the bottleneck.&lt;BR /&gt;&lt;BR /&gt;One trap to know about. Account-level roles are not databricks_grants at all but databricks_access_control_rule_set, and every apply replaces the whole rule set it names. Keep all grants for a given rule set path in one resource, and import anything that predates Terraform, because an apply that doesn't include an existing grant removes it.&lt;BR /&gt;&lt;BR /&gt;Manual UI grants we treat as break-glass only. With one owner per securable, anything added by hand shows up in the next plan and either gets codified or reverted, which is exactly the audit trail you want.&lt;BR /&gt;&lt;BR /&gt;How many teams will be requesting access in your setup? The single-owner pull request model holds up well to a point, and past that point the metadata layer in front of Terraform is where I'd invest.&lt;/P&gt;</description>
      <pubDate>Fri, 24 Jul 2026 01:58:44 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/uc-permission-automation-strategy/m-p/163958#M16</guid>
      <dc:creator>binlogreader</dc:creator>
      <dc:date>2026-07-24T01:58:44Z</dc:date>
    </item>
    <item>
      <title>UC Permission Automation Strategy</title>
      <link>https://community.databricks.com/t5/genie-hub/uc-permission-automation-strategy/m-p/163949#M15</link>
      <description>&lt;DIV&gt;&lt;P&gt;Hello Community,&lt;/P&gt;&lt;P&gt;I’m starting this discussion to gather perspectives and best practices for managing &lt;STRONG&gt;Unity Catalog (UC) permissions across all securables&lt;/STRONG&gt;, particularly from a &lt;STRONG&gt;platform governance, automation, and operational scalability&lt;/STRONG&gt; standpoint.&lt;/P&gt;&lt;P&gt;I have encountered differing opinions on the most effective approach for governing UC permissions:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Terraform&lt;/STRONG&gt; – Provides infrastructure-as-code consistency, but can introduce significant complexity when managing nested permissions, inheritance models, and isolation boundaries at scale.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;REST APIs with a metadata-driven approach&lt;/STRONG&gt; – Managing permissions through YAML, JSON, or a Lakehouse-backed configuration model, enabling centralized governance and stateful automation.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Manual administration through the UI&lt;/STRONG&gt; – Simpler for smaller environments, but potentially challenging to scale, audit, and maintain consistency across platforms.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;I would be interested in learning:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;How is your organization governing Unity Catalog permissions today?&lt;/LI&gt;&lt;LI&gt;What automation patterns have proven successful?&lt;/LI&gt;&lt;LI&gt;How are you balancing governance, operational overhead, and flexibility?&lt;/LI&gt;&lt;LI&gt;What lessons learned or pitfalls would you recommend avoiding?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;I appreciate any insights, experiences, or recommendations the community can share.&lt;/P&gt;&lt;P&gt;Thank you for your contributions.&lt;/P&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 24 Jul 2026 00:01:08 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/uc-permission-automation-strategy/m-p/163949#M15</guid>
      <dc:creator>samson01</dc:creator>
      <dc:date>2026-07-24T00:01:08Z</dc:date>
    </item>
    <item>
      <title>How good is the new /ImportBI Genie Skill?</title>
      <link>https://community.databricks.com/t5/genie-hub/how-good-is-the-new-importbi-genie-skill/m-p/162083#M13</link>
      <description>&lt;P class=""&gt;&lt;EM&gt;After some initial testing on small models which were quite impressive, I decided to put the new Genie skill to the full test with a more advanced model in Power BI. &lt;/EM&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P class=""&gt;&lt;EM&gt;Be aware that the /ImportBI feature is in Beta. This means that there are ongoing changes happening, and that the final product might be different to what you are experiencing today!&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV class=""&gt;&lt;HR /&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;Below, you can catch the full 45 minute experience of me playing around with in on YouTube. You get all of my honest takes, my confusions when something does not work out the way I think, as well as a lot of me rambling about on some of the things I find along the way.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN&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%2FsirFD05U_vo%3Fstart%3D23%26feature%3Doembed%26start%3D23&amp;amp;display_name=YouTube&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DsirFD05U_vo&amp;amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FsirFD05U_vo%2Fhqdefault.jpg&amp;amp;type=text%2Fhtml&amp;amp;schema=youtube" width="600" height="337" scrolling="no" title="Databricks Deep Dive: ImportBI - advanced PowerBI model" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture" allowfullscreen="true"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;EM&gt;However, if you want the slightly shorter recap, this article might suit you better!&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;DIV class=""&gt;&lt;HR /&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;Setting up the model&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P class=""&gt;First, I created a semantic model and report myself using the &lt;A class="" href="https://www.linkedin.com/article/edit/7475476050072969216/#" target="_blank" rel="noopener noreferrer nofollow"&gt;Tabular Editor&lt;/A&gt; SpaceParts dataset, that you can find on the Databricks Marketplace. Huge shoutout to TE team for putting a real-scale demo dataset out there, that has a great coverage of data, as well as some intentional design "mistakes" that you might find in the real world!&lt;/P&gt;&lt;P class=""&gt;Then, after showing it to my colleague &lt;A class="" href="https://www.linkedin.com/article/edit/7475476050072969216/#" target="_blank" rel="noopener noreferrer nofollow"&gt;David Kofod Hanna&lt;/A&gt;, he was not too impressed with my out-of-data Power BI skills. Lucky for me (and you!) he was kind enough to help me develop a better model and report to run the tests on. Massive shoutout to David for that!&lt;/P&gt;&lt;P class=""&gt;A quick overview of the report pages can be seen in the below animation. The model itself contains &lt;STRONG&gt;4 facts&lt;/STRONG&gt; and &lt;STRONG&gt;11 dimensions&lt;/STRONG&gt;, as well as some more advanced things that are highlighted below. For visualizations we use the following:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;P class=""&gt;KPI Cards (with categories, and reference values/labels)&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Slicers (Regular and Input)&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Matrix Table (using Field Parameters - more on those below)&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Bar Chart (Clustered)&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Area Chart&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;... and then some buttons/text boxes if you count those as well.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Import BI - Power BI Report Pages.gif" style="width: 426px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/28693i68BDF87AA6502983/image-size/large?v=v2&amp;amp;px=999" role="button" title="Import BI - Power BI Report Pages.gif" alt="Import BI - Power BI Report Pages.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;Some advanced areas to test&lt;/H3&gt;&lt;P class=""&gt;So, in order to devise a proper test, the Power BI model contains a couple of elements that are essential to the way we develop and work with Power BI on a larger scale, I would consider them best practices at least in our ways of working at twoday. Some of these are more visual-based, while others are more focused on the model itself. The ones I want to highlight in this test case are:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Calculation Groups;&lt;/STRONG&gt; In this case there are two. One for Time Intelligence, and one for Unit Conversion that are used across different visuals&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Field Parameters&lt;/STRONG&gt;; these are used for running the Pivot Table Analyze page, in which users can switch between measures and dimensions themselves in the Pivot Table&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Model Documentation&lt;/STRONG&gt;; the model has a built-in documentation page using the INFO.VIEW DAX functions. This tells the end-user how things are calculated as a sort of business glossary.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Information measures&lt;/STRONG&gt;; here I am referring to the concept of adding measures to show e.g. Last Refresh, Filters Applied and other nice-to-know information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;DIV class=""&gt;&lt;HR /&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;Understanding how /ImportBI works&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P class=""&gt;The primary use case for ImportBI is teams already running Power BI or Tableau with Databricks as their primary data source. If your M queries simply point to Databricks catalog tables with no transformation logic, you're in the best position to benefit.&lt;/P&gt;&lt;P class=""&gt;ImportBI is triggered via the Skill /importBI inside of Genie Code. It works mostly autonomously and assists in analyzing the model and planning what needs to be done. After approval it then translates measures, and builds dashboards in parallel before presenting you with the final output in both code and a small report.&lt;/P&gt;&lt;P class=""&gt;If you have not seen the long-form video, and want a quicker rundown of how ImportBI works, this &lt;A class="" href="https://www.youtube.com/@5MinuteFeatures" target="_blank" rel="noopener noreferrer"&gt;5 Minute Features&lt;/A&gt; version might be more your style. In the video, I break down what ImportBI does and how, using a very simple Power BI model.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&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%2FVumtYVQhbIM%3Fstart%3D29%26feature%3Doembed%26start%3D29&amp;amp;display_name=YouTube&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DVumtYVQhbIM&amp;amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FVumtYVQhbIM%2Fhqdefault.jpg&amp;amp;type=text%2Fhtml&amp;amp;schema=youtube" width="600" height="337" scrolling="no" title="Databricks 5 Minute Features: Genie Skill - ImportBI" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture" allowfullscreen="true"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P class=""&gt;The workloads carried out by ImportBI can be split into 3 phases, as described below:&lt;/P&gt;&lt;OL class=""&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Setup &lt;/STRONG&gt;is the first phase, in which we instruct Genie in what type of BI solution we have (PowerBI or Tableau) as well as direct it to a volume where it can find the file. In case of PowerBI it relies on the PBIT format. We also supply a catalog and schema for both the source (where the data lives) and the target (where it will create the Metric Views).&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Analyzing and Planning &lt;/STRONG&gt;is the phase where Genie unpacks and understands the existing model. It breaks down both the model itself, but also the visual side, and writes up a short report breaking down what it plans to do with each part - including anything that it will omit from the migration - either because it is unused, or because it is not directly migratable.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;&lt;STRONG&gt;Metric Views and Dashboards &lt;/STRONG&gt;is the actual migration phase. After approval of the plan in the previous step, Genie gets to work. It starts by developing the Metric Views, and then subsequently it does the Dashboard work.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P class=""&gt;&lt;EM&gt;As with any Genie Code session, you can intervene, redirect or change the plan and work carried out along the way. The above is just the general path that the skills takes with no redirection or additional instructions.&lt;/EM&gt;&lt;/P&gt;&lt;DIV class=""&gt;&lt;HR /&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;The results are in&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P class=""&gt;So, as you know by now, I have run two different tests. One on a simple model, and one on a complex model. This will mainly discuss the results of the complex one, as that is by far the most interesting.&lt;/P&gt;&lt;P class=""&gt;We will cover the Semantic Layer and the Visual Layer separately, and then sum up, evaluate, and then you can find my final verdict at the bottom.&lt;/P&gt;&lt;H3&gt;Semantic Model to Metric Views&lt;/H3&gt;&lt;P class=""&gt;&lt;STRONG&gt;What works well&lt;/STRONG&gt;, is understand the wiring between Databricks and Unity Catalog and does the basics:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;P class=""&gt;The M expressions are parsed, and broken down to their correct counterpart catalog.schema.table setup, and added to the Metric Views sources and joins. I am unsure how much of this is derived from Unity Catalog directly, or if e.g. join columns are derived from the model design in PowerBI&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Each Fact Table is created as its own metric view, all the fields are correctly identified&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;All generic/simple measures are created correctly&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;It references cross-measure references, and creates measures using other measures&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Includes the original DAX expression as a comment to the new measures - ensuring traceability&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;The active filters footer and last refresh timestamp measures are not re-created. This might seem like a drawback, but actually both are built into the AIBI Dashboard UI natively which is why they are not there.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;STRONG&gt;What does not work so well, &lt;/STRONG&gt;it is honestly almost all of the more advanced stuff, as well as a few basics:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;P class=""&gt;There is no Calculation Group equivalent concept in Databricks Metric Views. The workaround, that I myself prompted Genie to do, is creating static YTD, QTD, and MTD measures per metric. However, this contradicts the dynamic "inject any measure into any time window" flexibility of Calculation Groups.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Field Parameters are completely omitted - there is no style of dynamic parameter-based&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Cross-fact measures e.g. comparing values across fact tables isn't currently possible. Dashboard relationships are in private preview, and might enable this soon though.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;USERPRINCIPALNAME() as a measure is not handled. As far as I know, a workaround for a similar meaure exists in Databricks but the tool doesn't auto-detect it.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Only one of the four created Metric Views was added to the dashboard, the others had to be added manually. I believe this is because it created some of the measures on the wrong facts - therefore not needing the other ones directly.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Power BI Dashboard to AIBI Dashboard&lt;/H3&gt;&lt;P class=""&gt;&lt;STRONG&gt;What works well&lt;/STRONG&gt;, is understand the visuals chosen and selecting the right fields:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;P class=""&gt;The classic BI visuals are replaced correctly, choosing card, bar chart and area chart, as well as the slicers. This works for almost all of the visuals, only one is wrong.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;The right measures/dimensions are added to the visuals&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;STRONG&gt;What does not work so well, &lt;/STRONG&gt;is the actual attention to detail:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;P class=""&gt;The visual placement is all over the place. The filters are below the visuals and the grid-style of AIBI Dashboards limits the flexibility a bit.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Genie added cards that did not exist in the original layout. Not entirely sure why, as there is not indication we would want invoice Cost and Quantity.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;The filters are not all added on both pages. Despite Global filters being a thing, the Genie Code approach was to add them directly on page. Not a problem in itself, but it split them, adding two on each instead of all four filters on both&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;Power BI's ability to split a single card visual by a dimension into multiple cards doesn't exist in AI/BI dashboards. For some reason, it decided to do a Bar-chart instead.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P class=""&gt;The two later pages with Documentation and Pivot Table are not created at all. This is not a visual problem, as they are not created because there is not a direct replacement for them on the semantic model level. &lt;EM&gt;I did however manage to do the Documentation - catch that at the end!&lt;/EM&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;EM&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="ImportBI AIBI.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/28695i4AFF25D54E9AB87F/image-size/large?v=v2&amp;amp;px=999" role="button" title="ImportBI AIBI.png" alt="ImportBI AIBI.png" /&gt;&lt;/span&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P class="lia-align-center"&gt;&amp;nbsp;The re-created AIBI Dashboard pages. As you can tell, they are not really up to scratch.&lt;/P&gt;&lt;H2&gt;My personal verdict&lt;/H2&gt;&lt;P class=""&gt;For simple models with built directly on Databricks, with no advanced DAX patterns, ImportBI can meaningfully accelerate the transition. However, how many of those type of solutions do you really have in an enterprise context? For anything production-grade using features like time intelligence, field parameters, complex visual layouts, cross-fact calculations, you should expect a significant amount of manual work after the import.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P class=""&gt;&lt;EM&gt;For now, ImportBI is a useful starting point, not a full-scale migration tool&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P class=""&gt;Remembering that this is still a Beta feature, I know my critique might seem a little harsh. I sincerely hope that some of these kinks get worked out, and honestly, some of them might even already be fixed when you read this.&lt;/P&gt;&lt;P class=""&gt;To me, some of the most jarring things that need to get worked out is actually in the Dashboard part. Filters that are left out on one page but added to another. Visuals that are not placed correctly, or are not the right type is a real issue. The fact that it does not seems to understand when to add what to a page is a real issue when it claims to be able to do something.&lt;/P&gt;&lt;P class=""&gt;On the Metric Views side, there are some obvious shortcomings related to cross-fact measures that needs to be solved elsewhere, but other than that, most of this part seems solid. I would however love to see some sort of a dynamic approach to time intelligence and/or parameter swapping as part of the intersection between the dashboard and metric views experience.&lt;/P&gt;&lt;P class=""&gt;The important part, to me, is that tool is self-aware of its gaps and shortcomings. During the planning phase, it flags what it's skipped and why, and its migration report gives you a clear checklist of what needs your attention. That level of transparency is something I can appreciate - and it also serves as a good guide for what Databricks might choose to work on in the future.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P class=""&gt;&lt;STRONG&gt;&lt;EM&gt;My overall verdict of this as a migration tool for Power BI workloads is a score of: 4/10&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV class=""&gt;&lt;HR /&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;... an unexpected bonus: Model Documentation&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P class=""&gt;One useful discovery I made, was that we are actually able to do the documentation setup with only a tiny bit of additional work.&lt;/P&gt;&lt;P class=""&gt;This was done in parallel, in another Genie session, but proved to be quite valuable nonetheless. The main point here being that ImportBI had no actual stake in this.&lt;/P&gt;&lt;P class=""&gt;Because Databricks stores Metric View definitions in a queryable format, we are able to easily extract the YAML definition in code. This is done by querying the information_schema tables. From here we can extract each measure's expression, description, comment and window function configuration, directly from the YAML.&lt;/P&gt;&lt;P class=""&gt;Then, by writing this to a Delta table, slapping a Metric View on top, and adding a simple Table Visual in a Dashboard, you can get a dynamic documentation layer, as shown below:&lt;/P&gt;&lt;P class=""&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Import BI - Documentation.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/28696i63C7FD486F6D3D08/image-size/large?v=v2&amp;amp;px=999" role="button" title="Import BI - Documentation.png" alt="Import BI - Documentation.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;EM&gt;I believe the Documentation topic deserves a bit of additional attention. So expect a full write-up on it later on with all the code included for you to work with it yourself!&lt;/EM&gt;&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 07 Jul 2026 09:31:30 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/how-good-is-the-new-importbi-genie-skill/m-p/162083#M13</guid>
      <dc:creator>KrisJohannesen</dc:creator>
      <dc:date>2026-07-07T09:31:30Z</dc:date>
    </item>
    <item>
      <title>Re: Building Production-Ready SDP Pipelines with Genie Code: The Complete Guide</title>
      <link>https://community.databricks.com/t5/genie-hub/building-production-ready-sdp-pipelines-with-genie-code-the/m-p/160162#M12</link>
      <description>&lt;P&gt;Great Overview, Thanks for sharing with the community.&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jun 2026 00:23:22 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/building-production-ready-sdp-pipelines-with-genie-code-the/m-p/160162#M12</guid>
      <dc:creator>Mycimmunity</dc:creator>
      <dc:date>2026-06-23T00:23:22Z</dc:date>
    </item>
    <item>
      <title>Re: Databricks now supports importing Tableau and Power BI files into Genie Code to automatically bu</title>
      <link>https://community.databricks.com/t5/genie-hub/databricks-now-supports-importing-tableau-and-power-bi-files/m-p/160045#M10</link>
      <description>&lt;P&gt;How does databricks handle calculated fields etc&amp;nbsp;In TWB files they are referenced as calculation_1234.... does databricks store these references at the data model level to resolve them when I upload a TWB file&lt;/P&gt;</description>
      <pubDate>Mon, 22 Jun 2026 08:06:46 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/databricks-now-supports-importing-tableau-and-power-bi-files/m-p/160045#M10</guid>
      <dc:creator>anshul-mehta</dc:creator>
      <dc:date>2026-06-22T08:06:46Z</dc:date>
    </item>
    <item>
      <title>Building Production-Ready SDP Pipelines with Genie Code: The Complete Guide</title>
      <link>https://community.databricks.com/t5/genie-hub/building-production-ready-sdp-pipelines-with-genie-code-the/m-p/159195#M11</link>
      <description>&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;EM class="nb"&gt;How Databricks’ AI agent transforms data engineering from manual craftsmanship into conversational pipeline development&lt;/EM&gt;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Data engineers have long accepted a painful truth: building production-grade ETL pipelines means wrestling with hundreds of lines of orchestration code, manually encoding execution order, handling incremental processing logic, and then praying nothing breaks at 2 AM. Spark Declarative Pipelines (SDP) already simplified this dramatically by letting you declare&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM class="nb"&gt;what&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;your data should look like rather than&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM class="nb"&gt;how&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;to get there. Now, with Genie Code in Agent mode, you don’t even have to write those declarations yourself.&lt;/P&gt;
&lt;FIGURE class="nn no np nq nr ns nk nl paragraph-image"&gt;
&lt;DIV class="nt nu ek nv bd nw" tabindex="0" role="button"&gt;&lt;SPAN class="eo ep eq ai er es et eu ev speechify-ignore"&gt;Press enter or click to view image in full size&lt;/SPAN&gt;
&lt;DIV class="nk nl nm"&gt;&lt;PICTURE&gt;&lt;SOURCE srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*1VzZtaCw0WyY8glVdfkstA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*1VzZtaCw0WyY8glVdfkstA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*1VzZtaCw0WyY8glVdfkstA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*1VzZtaCw0WyY8glVdfkstA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*1VzZtaCw0WyY8glVdfkstA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*1VzZtaCw0WyY8glVdfkstA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*1VzZtaCw0WyY8glVdfkstA.png 1400w" type="image/webp" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"&gt;&lt;/SOURCE&gt;&lt;SOURCE srcset="https://miro.medium.com/v2/resize:fit:640/1*1VzZtaCw0WyY8glVdfkstA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*1VzZtaCw0WyY8glVdfkstA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*1VzZtaCw0WyY8glVdfkstA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*1VzZtaCw0WyY8glVdfkstA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*1VzZtaCw0WyY8glVdfkstA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*1VzZtaCw0WyY8glVdfkstA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*1VzZtaCw0WyY8glVdfkstA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" data-testid="og"&gt;&lt;/SOURCE&gt;&lt;/PICTURE&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shwetav1407_0-1781633757203.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/27852iC312D69CBA3164EB/image-size/medium?v=v2&amp;amp;px=400" role="button" title="shwetav1407_0-1781633757203.png" alt="shwetav1407_0-1781633757203.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/FIGURE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;In this guide, we’ll walk through building a complete medallion architecture pipeline using Genie Code and SDP — from raw ingestion through business-ready analytics — and explore the patterns that make this approach production-worthy.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="v cf nc nd ne nf" role="separator"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;H2 id="f094" class="nz oa gn bb ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bg" data-selectable-paragraph=""&gt;What Is SDP, and Why Should You Care?&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Lakeflow Spark Declarative Pipelines (SDP)&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;is Databricks’ framework for building batch and streaming data pipelines in SQL and Python. Unlike traditional Spark jobs where you manually define execution order, manage checkpoints, and handle retries, SDP lets you declare your transformations and handles the orchestration automatically.&lt;/P&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;The key benefits that matter for real-world pipelines:&lt;/P&gt;
&lt;UL class=""&gt;
&lt;LI id="cd24" class="md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Automatic orchestration&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— SDP analyzes dependencies across all your source files, builds a dataflow graph, and determines the optimal execution order with maximum parallelism. It also retries failures at the most granular level possible: first the Spark task, then the flow, then the pipeline.&lt;/LI&gt;
&lt;LI id="808f" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Incremental processing built in&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— Materialized views automatically process only new data and changes. No more writing&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;MERGE&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;statements by hand.&lt;/LI&gt;
&lt;LI id="f435" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Data quality as code&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— Expectations let you define quality constraints inline, right next to your transformations.&lt;/LI&gt;
&lt;LI id="16f3" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Unified batch and streaming&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— Toggle between batch and streaming processing modes with a single keyword change.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Here’s what that looks like compared to traditional approaches:&lt;/P&gt;
&lt;H3 id="ed67" class="po oa gn bb ob pp pq pr of ps pt pu oj mo pv pw px ms py pz qa mw qb qc qd qe bg" data-selectable-paragraph=""&gt;The Old Way (PySpark + Manual Orchestration)&lt;/H3&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-comment"&gt;# Hundreds of lines for a simple weekly sales pipeline&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;from&lt;/SPAN&gt; pyspark.sql &lt;SPAN class="hljs-keyword"&gt;import&lt;/SPAN&gt; SparkSession&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;from&lt;/SPAN&gt; pyspark.sql.functions &lt;SPAN class="hljs-keyword"&gt;import&lt;/SPAN&gt; col, &lt;SPAN class="hljs-built_in"&gt;sum&lt;/SPAN&gt;, window&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;from&lt;/SPAN&gt; delta.tables &lt;SPAN class="hljs-keyword"&gt;import&lt;/SPAN&gt; DeltaTable&lt;BR /&gt;&lt;BR /&gt;spark = SparkSession.builder.getOrCreate()&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;# Step 1: Read raw data (manually handle incremental)&lt;/SPAN&gt;&lt;BR /&gt;raw_df = spark.read.&lt;SPAN class="hljs-built_in"&gt;format&lt;/SPAN&gt;(&lt;SPAN class="hljs-string"&gt;"delta"&lt;/SPAN&gt;).load(&lt;SPAN class="hljs-string"&gt;"/data/raw_sales"&lt;/SPAN&gt;)&lt;BR /&gt;last_processed = spark.read.&lt;SPAN class="hljs-built_in"&gt;format&lt;/SPAN&gt;(&lt;SPAN class="hljs-string"&gt;"delta"&lt;/SPAN&gt;) \&lt;BR /&gt;    .load(&lt;SPAN class="hljs-string"&gt;"/checkpoints/last_ts"&lt;/SPAN&gt;).collect()[&lt;SPAN class="hljs-number"&gt;0&lt;/SPAN&gt;][&lt;SPAN class="hljs-number"&gt;0&lt;/SPAN&gt;]&lt;BR /&gt;new_data = raw_df.&lt;SPAN class="hljs-built_in"&gt;filter&lt;/SPAN&gt;(col(&lt;SPAN class="hljs-string"&gt;"event_time"&lt;/SPAN&gt;) &amp;gt; last_processed)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;# Step 2: Clean (manually write quality checks)&lt;/SPAN&gt;&lt;BR /&gt;cleaned = new_data.&lt;SPAN class="hljs-built_in"&gt;filter&lt;/SPAN&gt;(&lt;BR /&gt;    col(&lt;SPAN class="hljs-string"&gt;"amount"&lt;/SPAN&gt;).isNotNull() &amp;amp; &lt;BR /&gt;    (col(&lt;SPAN class="hljs-string"&gt;"amount"&lt;/SPAN&gt;) &amp;gt; &lt;SPAN class="hljs-number"&gt;0&lt;/SPAN&gt;)&lt;BR /&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;# Step 3: Aggregate (manually handle upserts)&lt;/SPAN&gt;&lt;BR /&gt;weekly = cleaned.groupBy(&lt;BR /&gt;    window(&lt;SPAN class="hljs-string"&gt;"event_time"&lt;/SPAN&gt;, &lt;SPAN class="hljs-string"&gt;"1 week"&lt;/SPAN&gt;), &lt;SPAN class="hljs-string"&gt;"region"&lt;/SPAN&gt;&lt;BR /&gt;).agg(&lt;SPAN class="hljs-built_in"&gt;sum&lt;/SPAN&gt;(&lt;SPAN class="hljs-string"&gt;"amount"&lt;/SPAN&gt;).alias(&lt;SPAN class="hljs-string"&gt;"total_sales"&lt;/SPAN&gt;))&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;# Step 4: Write (manually handle merge)&lt;/SPAN&gt;&lt;BR /&gt;target = DeltaTable.forPath(spark, &lt;SPAN class="hljs-string"&gt;"/data/weekly_sales"&lt;/SPAN&gt;)&lt;BR /&gt;target.alias(&lt;SPAN class="hljs-string"&gt;"t"&lt;/SPAN&gt;).merge(&lt;BR /&gt;    weekly.alias(&lt;SPAN class="hljs-string"&gt;"s"&lt;/SPAN&gt;),&lt;BR /&gt;    &lt;SPAN class="hljs-string"&gt;"t.window = s.window AND t.region = s.region"&lt;/SPAN&gt;&lt;BR /&gt;).whenMatchedUpdateAll().whenNotMatchedInsertAll().execute()&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;# Step 5: Update checkpoint (manually track state)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;# ... plus an Airflow DAG for scheduling, retries, alerting&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;H3 id="6aef" class="po oa gn bb ob pp pq pr of ps pt pu oj mo pv pw px ms py pz qa mw qb qc qd qe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="ah"&gt;The SDP Way (SQL)&lt;/STRONG&gt;&lt;/H3&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-comment"&gt;-- The entire pipeline in a few declarations&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;-- Bronze: raw ingestion with Auto Loader&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH STREAMING &lt;SPAN class="hljs-keyword"&gt;TABLE&lt;/SPAN&gt; bronze_sales&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt; &lt;SPAN class="hljs-operator"&gt;*&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; STREAM read_files(&lt;BR /&gt;  &lt;SPAN class="hljs-string"&gt;'/data/landing/sales/'&lt;/SPAN&gt;,&lt;BR /&gt;  format &lt;SPAN class="hljs-operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;'json'&lt;/SPAN&gt;,&lt;BR /&gt;  schema &lt;SPAN class="hljs-operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;'event_time TIMESTAMP, region STRING, &lt;BR /&gt;             product STRING, amount DOUBLE'&lt;/SPAN&gt;&lt;BR /&gt;);&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;-- Silver: cleansed with quality expectations&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH STREAMING &lt;SPAN class="hljs-keyword"&gt;TABLE&lt;/SPAN&gt; silver_sales (&lt;BR /&gt;  &lt;SPAN class="hljs-keyword"&gt;CONSTRAINT&lt;/SPAN&gt; valid_amount EXPECT (amount &lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-number"&gt;0&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION &lt;SPAN class="hljs-keyword"&gt;DROP&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;ROW&lt;/SPAN&gt;,&lt;BR /&gt;  &lt;SPAN class="hljs-keyword"&gt;CONSTRAINT&lt;/SPAN&gt; not_null_region EXPECT (region &lt;SPAN class="hljs-keyword"&gt;IS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NOT&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NULL&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION &lt;SPAN class="hljs-keyword"&gt;DROP&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;ROW&lt;/SPAN&gt;&lt;BR /&gt;)&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt;&lt;BR /&gt;  event_time,&lt;BR /&gt;  region,&lt;BR /&gt;  product,&lt;BR /&gt;  amount,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;current_timestamp&lt;/SPAN&gt;() &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; processed_at&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; STREAM(bronze_sales);&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;-- Gold: business-ready weekly aggregation&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH MATERIALIZED &lt;SPAN class="hljs-keyword"&gt;VIEW&lt;/SPAN&gt; gold_weekly_sales&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt;&lt;BR /&gt;  date_trunc(&lt;SPAN class="hljs-string"&gt;'week'&lt;/SPAN&gt;, event_time) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; week_start,&lt;BR /&gt;  region,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;COUNT&lt;/SPAN&gt;(&lt;SPAN class="hljs-operator"&gt;*&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; transaction_count,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;SUM&lt;/SPAN&gt;(amount) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; total_sales,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;AVG&lt;/SPAN&gt;(amount) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; avg_transaction&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; silver_sales&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;GROUP&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;BY&lt;/SPAN&gt; date_trunc(&lt;SPAN class="hljs-string"&gt;'week'&lt;/SPAN&gt;, event_time), region;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;That’s it. SDP handles incremental processing, execution order, retries, and checkpoint management. The bronze and silver tables use streaming semantics (the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;STREAM&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;keyword), while the gold materialized view uses batch semantics but still only reprocesses changed data.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="v cf nc nd ne nf" role="separator"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;H2 id="1ce0" class="nz oa gn bb ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bg" data-selectable-paragraph=""&gt;Enter Genie Code: Your AI Data Engineering Partner&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Now here’s where it gets interesting. Genie Code in Agent mode — available inside the Lakeflow Pipelines Editor — doesn’t just help you&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM class="nb"&gt;write&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;SDP code. It can autonomously&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG class="mf go"&gt;plan, generate, run, validate, and fix&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;entire pipelines from a single natural language prompt.&lt;/P&gt;
&lt;H2 id="6ebd" class="nz oa gn bb ob oc qn oe of og qo oi oj ok qp om on oo qq oq or os qr ou ov ow bg" data-selectable-paragraph=""&gt;How Genie Code Agent Mode Works&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;When you enable Agent mode in the Genie Code panel within the Lakeflow Pipelines Editor, the agent adapts its capabilities specifically for data engineering tasks. Unlike chat mode, Agent mode can:&lt;/P&gt;
&lt;OL class=""&gt;
&lt;LI id="809b" class="md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na qs pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Plan a multi-step solution&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and present it for your review&lt;/LI&gt;
&lt;LI id="1e1e" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na qs pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Search your Unity Catalog&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;for relevant tables, schemas, and lineage&lt;/LI&gt;
&lt;LI id="a111" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na qs pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Generate SQL or Python SDP source files&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;in the pipeline editor&lt;/LI&gt;
&lt;LI id="28b7" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na qs pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Run pipeline updates&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and read the output datasets&lt;/LI&gt;
&lt;LI id="c7a6" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na qs pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Diagnose and fix errors&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;automatically, iterating until the pipeline succeeds&lt;/LI&gt;
&lt;LI id="fb45" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na qs pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Respect your Unity Catalog permissions&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— it can only access data you can access&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;The key design principle is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM class="nb"&gt;human-in-the-loop&lt;/EM&gt;: Genie Code proposes plans and asks for approval before executing. You can Allow, Decline, or ask it to try a different approach.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="v cf nc nd ne nf" role="separator"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;H2 id="5d29" class="nz oa gn bb ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bg" data-selectable-paragraph=""&gt;Tutorial: Building a Medallion Pipeline with Genie Code&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Let’s walk through building a real pipeline — an e-commerce analytics pipeline that ingests order data, cleans and enriches it, and produces dashboards-ready metrics.&lt;/P&gt;
&lt;H2 id="61c2" class="nz oa gn bb ob oc qn oe of og qo oi oj ok qp om on oo qq oq or os qr ou ov ow bg" data-selectable-paragraph=""&gt;Prerequisites&lt;/H2&gt;
&lt;UL class=""&gt;
&lt;LI id="8c94" class="md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na pc pd pe bg" data-selectable-paragraph=""&gt;A Databricks workspace with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG class="mf go"&gt;Partner-powered AI features&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;enabled&lt;/LI&gt;
&lt;LI id="cf6c" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;Access to the Lakeflow Pipelines Editor&lt;/LI&gt;
&lt;LI id="ff20" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;Unity Catalog configured with a target catalog and schema&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 id="03a6" class="nz oa gn bb ob oc qn oe of og qo oi oj ok qp om on oo qq oq or os qr ou ov ow bg" data-selectable-paragraph=""&gt;Step 1: Create Your Pipeline and Open Genie Code&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Navigate to&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG class="mf go"&gt;Pipelines&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;in the sidebar and create a new pipeline. Give it a name like&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;ecommerce_analytics&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and set your target catalog and schema (e.g.,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;analytics.ecommerce&lt;/CODE&gt;).&lt;/P&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Once in the Lakeflow Pipelines Editor, open the Genie Code panel and switch to&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG class="mf go"&gt;Agent mode&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H2 id="92ca" class="nz oa gn bb ob oc qn oe of og qo oi oj ok qp om on oo qq oq or os qr ou ov ow bg" data-selectable-paragraph=""&gt;Step 2: Prompt Genie Code to Build the Pipeline&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Start with a descriptive prompt that tells Genie Code what you want:&lt;/P&gt;
&lt;BLOCKQUOTE class="qt qu qv"&gt;
&lt;P class="md me nb mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;&lt;EM class="gn"&gt;Your prompt:&lt;/EM&gt;&lt;/STRONG&gt;&lt;EM class="gn"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;“Build a medallion architecture pipeline for e-commerce analytics. I have raw order data landing as JSON files in /Volumes/raw_data/orders/ with fields: order_id, customer_id, product_id, quantity, unit_price, order_timestamp, and shipping_region. Create bronze ingestion with Auto Loader, silver cleansing with quality expectations, and gold aggregations for daily revenue by region and top products.”&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Genie Code will create a step-by-step plan that looks something like:&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;Plan:&lt;BR /&gt;&lt;SPAN class="hljs-number"&gt;1.&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;Search&lt;/SPAN&gt; Unity Catalog &lt;SPAN class="hljs-keyword"&gt;for&lt;/SPAN&gt; existing related tables&lt;BR /&gt;&lt;SPAN class="hljs-number"&gt;2.&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;Create&lt;/SPAN&gt; bronze_orders.sql — streaming &lt;SPAN class="hljs-keyword"&gt;table&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;with&lt;/SPAN&gt; Auto Loader&lt;BR /&gt;&lt;SPAN class="hljs-number"&gt;3.&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;Create&lt;/SPAN&gt; silver_orders.sql — cleaned data &lt;SPAN class="hljs-keyword"&gt;with&lt;/SPAN&gt; expectations&lt;BR /&gt;&lt;SPAN class="hljs-number"&gt;4.&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;Create&lt;/SPAN&gt; gold_daily_revenue.sql — daily revenue &lt;SPAN class="hljs-keyword"&gt;by&lt;/SPAN&gt; region&lt;BR /&gt;&lt;SPAN class="hljs-number"&gt;5.&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;Create&lt;/SPAN&gt; gold_top_products.sql — top products materialized &lt;SPAN class="hljs-keyword"&gt;view&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-number"&gt;6.&lt;/SPAN&gt; Run the pipeline &lt;SPAN class="hljs-keyword"&gt;and&lt;/SPAN&gt; validate outputs&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Review the plan, ask clarifying questions if needed, then select&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG class="mf go"&gt;Allow&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;to let Genie Code proceed.&lt;/P&gt;
&lt;H2 id="214e" class="nz oa gn bb ob oc qn oe of og qo oi oj ok qp om on oo qq oq or os qr ou ov ow bg" data-selectable-paragraph=""&gt;Step 3: Watch Genie Code Generate Your Pipeline&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Genie Code creates each source file in your pipeline. Here’s what the generated code typically looks like:&lt;/P&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;File:&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;bronze_orders.sql&lt;/CODE&gt;&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-comment"&gt;-- Bronze layer: raw ingestion from JSON landing zone&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH STREAMING &lt;SPAN class="hljs-keyword"&gt;TABLE&lt;/SPAN&gt; bronze_orders&lt;BR /&gt;COMMENT &lt;SPAN class="hljs-string"&gt;'Raw e-commerce orders ingested via Auto Loader'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt;&lt;BR /&gt;  &lt;SPAN class="hljs-operator"&gt;*&lt;/SPAN&gt;,&lt;BR /&gt;  _metadata.file_name &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; source_file,&lt;BR /&gt;  _metadata.file_modification_time &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; file_mod_time,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;current_timestamp&lt;/SPAN&gt;() &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; ingestion_timestamp&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; STREAM read_files(&lt;BR /&gt;  &lt;SPAN class="hljs-string"&gt;'/Volumes/raw_data/orders/'&lt;/SPAN&gt;,&lt;BR /&gt;  format &lt;SPAN class="hljs-operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;'json'&lt;/SPAN&gt;,&lt;BR /&gt;  inferColumnTypes &lt;SPAN class="hljs-operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;'true'&lt;/SPAN&gt;&lt;BR /&gt;);&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;File:&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;silver_orders.sql&lt;/CODE&gt;&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-comment"&gt;-- Silver layer: cleansed and validated orders&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH STREAMING &lt;SPAN class="hljs-keyword"&gt;TABLE&lt;/SPAN&gt; silver_orders (&lt;BR /&gt;  &lt;SPAN class="hljs-keyword"&gt;CONSTRAINT&lt;/SPAN&gt; valid_order_id &lt;BR /&gt;    EXPECT (order_id &lt;SPAN class="hljs-keyword"&gt;IS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NOT&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NULL&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION &lt;SPAN class="hljs-keyword"&gt;DROP&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;ROW&lt;/SPAN&gt;,&lt;BR /&gt;  &lt;SPAN class="hljs-keyword"&gt;CONSTRAINT&lt;/SPAN&gt; valid_quantity &lt;BR /&gt;    EXPECT (quantity &lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-number"&gt;0&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;AND&lt;/SPAN&gt; quantity &lt;SPAN class="hljs-operator"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN class="hljs-number"&gt;10000&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION &lt;SPAN class="hljs-keyword"&gt;DROP&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;ROW&lt;/SPAN&gt;,&lt;BR /&gt;  &lt;SPAN class="hljs-keyword"&gt;CONSTRAINT&lt;/SPAN&gt; valid_price &lt;BR /&gt;    EXPECT (unit_price &lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-number"&gt;0&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION &lt;SPAN class="hljs-keyword"&gt;DROP&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;ROW&lt;/SPAN&gt;,&lt;BR /&gt;  &lt;SPAN class="hljs-keyword"&gt;CONSTRAINT&lt;/SPAN&gt; valid_timestamp &lt;BR /&gt;    EXPECT (order_timestamp &lt;SPAN class="hljs-keyword"&gt;IS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NOT&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NULL&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION &lt;SPAN class="hljs-keyword"&gt;DROP&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;ROW&lt;/SPAN&gt;,&lt;BR /&gt;  &lt;SPAN class="hljs-keyword"&gt;CONSTRAINT&lt;/SPAN&gt; valid_region &lt;BR /&gt;    EXPECT (shipping_region &lt;SPAN class="hljs-keyword"&gt;IS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NOT&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NULL&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION FAIL &lt;SPAN class="hljs-keyword"&gt;UPDATE&lt;/SPAN&gt;&lt;BR /&gt;)&lt;BR /&gt;COMMENT &lt;SPAN class="hljs-string"&gt;'Cleansed orders with quality expectations enforced'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt;&lt;BR /&gt;  order_id,&lt;BR /&gt;  customer_id,&lt;BR /&gt;  product_id,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;CAST&lt;/SPAN&gt;(quantity &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;INT&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; quantity,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;CAST&lt;/SPAN&gt;(unit_price &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;DOUBLE&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; unit_price,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;CAST&lt;/SPAN&gt;(quantity &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;INT&lt;/SPAN&gt;) &lt;SPAN class="hljs-operator"&gt;*&lt;/SPAN&gt; &lt;SPAN class="hljs-built_in"&gt;CAST&lt;/SPAN&gt;(unit_price &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;DOUBLE&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; line_total,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;CAST&lt;/SPAN&gt;(order_timestamp &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;TIMESTAMP&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; order_timestamp,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;UPPER&lt;/SPAN&gt;(&lt;SPAN class="hljs-built_in"&gt;TRIM&lt;/SPAN&gt;(shipping_region)) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; shipping_region,&lt;BR /&gt;  ingestion_timestamp&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; STREAM(bronze_orders);&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;File:&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;gold_daily_revenue.sql&lt;/CODE&gt;&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-comment"&gt;-- Gold layer: daily revenue metrics by region&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH MATERIALIZED &lt;SPAN class="hljs-keyword"&gt;VIEW&lt;/SPAN&gt; gold_daily_revenue&lt;BR /&gt;COMMENT &lt;SPAN class="hljs-string"&gt;'Daily revenue aggregation by shipping region'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt;&lt;BR /&gt;  &lt;SPAN class="hljs-type"&gt;DATE&lt;/SPAN&gt;(order_timestamp) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; order_date,&lt;BR /&gt;  shipping_region,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;COUNT&lt;/SPAN&gt;(&lt;SPAN class="hljs-keyword"&gt;DISTINCT&lt;/SPAN&gt; order_id) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; total_orders,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;COUNT&lt;/SPAN&gt;(&lt;SPAN class="hljs-keyword"&gt;DISTINCT&lt;/SPAN&gt; customer_id) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; unique_customers,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;SUM&lt;/SPAN&gt;(line_total) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; total_revenue,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;AVG&lt;/SPAN&gt;(line_total) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; avg_order_value,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;SUM&lt;/SPAN&gt;(quantity) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; total_units_sold&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; silver_orders&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;GROUP&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;BY&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;DATE&lt;/SPAN&gt;(order_timestamp), shipping_region;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;File:&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;CODE class="db pk pl pm pn b"&gt;gold_top_products.sql&lt;/CODE&gt;&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-comment"&gt;-- Gold layer: top products by revenue&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH MATERIALIZED &lt;SPAN class="hljs-keyword"&gt;VIEW&lt;/SPAN&gt; gold_top_products&lt;BR /&gt;COMMENT &lt;SPAN class="hljs-string"&gt;'Product performance ranked by total revenue'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt;&lt;BR /&gt;  product_id,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;COUNT&lt;/SPAN&gt;(&lt;SPAN class="hljs-keyword"&gt;DISTINCT&lt;/SPAN&gt; order_id) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; times_ordered,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;SUM&lt;/SPAN&gt;(quantity) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; total_units,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;SUM&lt;/SPAN&gt;(line_total) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; total_revenue,&lt;BR /&gt;  &lt;SPAN class="hljs-built_in"&gt;AVG&lt;/SPAN&gt;(unit_price) &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; avg_price&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; silver_orders&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;GROUP&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;BY&lt;/SPAN&gt; product_id;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;H2 id="26fd" class="nz oa gn bb ob oc qn oe of og qo oi oj ok qp om on oo qq oq or os qr ou ov ow bg" data-selectable-paragraph=""&gt;Step 4: Genie Code Runs and Validates&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;After generating the files, Genie Code asks for permission to run the pipeline. Once you approve it:&lt;/P&gt;
&lt;OL class=""&gt;
&lt;LI id="79c5" class="md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na qs pd pe bg" data-selectable-paragraph=""&gt;Triggers a pipeline update&lt;/LI&gt;
&lt;LI id="40e7" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na qs pd pe bg" data-selectable-paragraph=""&gt;Monitors execution across all flows&lt;/LI&gt;
&lt;LI id="b3f7" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na qs pd pe bg" data-selectable-paragraph=""&gt;Reads the output datasets to verify data landed correctly&lt;/LI&gt;
&lt;LI id="ae40" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na qs pd pe bg" data-selectable-paragraph=""&gt;Reports back with row counts, any expectation violations, and the DAG structure&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;If something fails — say a schema mismatch in the JSON files — Genie Code diagnoses the error, proposes a fix (like adjusting the schema inference or adding a&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;CAST&lt;/CODE&gt;), and iterates until the pipeline succeeds.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;H2 id="3e95" class="nz oa gn bb ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bg" data-selectable-paragraph=""&gt;Going Deeper: Python SDP with Genie Code&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;While SQL is the most common approach, SDP also supports Python for more complex transformation logic. The Python API uses decorators from the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;pyspark.pipelines&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;module (imported as&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;dp&lt;/CODE&gt;).&lt;/P&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Here’s what a Python-based silver layer might look like when you need custom transformation logic:&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-keyword"&gt;from&lt;/SPAN&gt; pyspark &lt;SPAN class="hljs-keyword"&gt;import&lt;/SPAN&gt; pipelines &lt;SPAN class="hljs-keyword"&gt;as&lt;/SPAN&gt; dp&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;from&lt;/SPAN&gt; pyspark.sql.functions &lt;SPAN class="hljs-keyword"&gt;import&lt;/SPAN&gt; col, upper, trim, when, lit&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-meta"&gt;@dp.table(&lt;SPAN class="hljs-params"&gt;&lt;BR /&gt;    name=&lt;SPAN class="hljs-string"&gt;"silver_orders_enriched"&lt;/SPAN&gt;,&lt;BR /&gt;    comment=&lt;SPAN class="hljs-string"&gt;"Orders enriched with derived customer segments"&lt;/SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-meta"&gt;@dp.expect(&lt;SPAN class="hljs-params"&gt;&lt;SPAN class="hljs-string"&gt;"valid_order_id"&lt;/SPAN&gt;, &lt;SPAN class="hljs-string"&gt;"order_id IS NOT NULL"&lt;/SPAN&gt;, on_violation=&lt;SPAN class="hljs-string"&gt;"drop"&lt;/SPAN&gt;&lt;/SPAN&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-meta"&gt;@dp.expect(&lt;SPAN class="hljs-params"&gt;&lt;SPAN class="hljs-string"&gt;"valid_amount"&lt;/SPAN&gt;, &lt;SPAN class="hljs-string"&gt;"line_total &amp;gt; 0"&lt;/SPAN&gt;, on_violation=&lt;SPAN class="hljs-string"&gt;"drop"&lt;/SPAN&gt;&lt;/SPAN&gt;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;def&lt;/SPAN&gt; &lt;SPAN class="hljs-title.function"&gt;silver_orders_enriched&lt;/SPAN&gt;():&lt;BR /&gt;    &lt;SPAN class="hljs-keyword"&gt;return&lt;/SPAN&gt; (&lt;BR /&gt;        spark.readStream.table(&lt;SPAN class="hljs-string"&gt;"bronze_orders"&lt;/SPAN&gt;)&lt;BR /&gt;        .withColumn(&lt;SPAN class="hljs-string"&gt;"line_total"&lt;/SPAN&gt;, col(&lt;SPAN class="hljs-string"&gt;"quantity"&lt;/SPAN&gt;) * col(&lt;SPAN class="hljs-string"&gt;"unit_price"&lt;/SPAN&gt;))&lt;BR /&gt;        .withColumn(&lt;SPAN class="hljs-string"&gt;"shipping_region"&lt;/SPAN&gt;, upper(trim(col(&lt;SPAN class="hljs-string"&gt;"shipping_region"&lt;/SPAN&gt;))))&lt;BR /&gt;        .withColumn(&lt;BR /&gt;            &lt;SPAN class="hljs-string"&gt;"customer_segment"&lt;/SPAN&gt;,&lt;BR /&gt;            when(col(&lt;SPAN class="hljs-string"&gt;"line_total"&lt;/SPAN&gt;) &amp;gt;= &lt;SPAN class="hljs-number"&gt;500&lt;/SPAN&gt;, lit(&lt;SPAN class="hljs-string"&gt;"premium"&lt;/SPAN&gt;))&lt;BR /&gt;            .when(col(&lt;SPAN class="hljs-string"&gt;"line_total"&lt;/SPAN&gt;) &amp;gt;= &lt;SPAN class="hljs-number"&gt;100&lt;/SPAN&gt;, lit(&lt;SPAN class="hljs-string"&gt;"standard"&lt;/SPAN&gt;))&lt;BR /&gt;            .otherwise(lit(&lt;SPAN class="hljs-string"&gt;"basic"&lt;/SPAN&gt;))&lt;BR /&gt;        )&lt;BR /&gt;        .withColumn(&lt;SPAN class="hljs-string"&gt;"order_date"&lt;/SPAN&gt;, col(&lt;SPAN class="hljs-string"&gt;"order_timestamp"&lt;/SPAN&gt;).cast(&lt;SPAN class="hljs-string"&gt;"date"&lt;/SPAN&gt;))&lt;BR /&gt;    )&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;You can ask Genie Code specifically for Python implementations:&lt;/P&gt;
&lt;BLOCKQUOTE class="qt qu qv"&gt;
&lt;P class="md me nb mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;&lt;EM class="gn"&gt;Your prompt:&lt;/EM&gt;&lt;/STRONG&gt;&lt;EM class="gn"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;“Add a Python-based silver transformation that enriches orders with a customer loyalty tier based on historical order count from the customers table in analytics.core.”&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Genie Code will search your Unity Catalog for the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;customers&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;table, understand its schema, and generate a Python file that joins and enriches appropriately.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="v cf nc nd ne nf" role="separator"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;H2 id="97be" class="nz oa gn bb ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bg" data-selectable-paragraph=""&gt;Handling Change Data Capture (CDC)&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;One of SDP’s most powerful features is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;AUTO CDC&lt;/CODE&gt;, which handles change data capture with full support for out-of-order events. This is where things get genuinely hard in traditional pipelines — and trivial in SDP.&lt;/P&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;SQL example for CDC with SCD Type 2:&lt;/STRONG&gt;&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-comment"&gt;-- Streaming table to capture raw CDC events&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH STREAMING &lt;SPAN class="hljs-keyword"&gt;TABLE&lt;/SPAN&gt; customers_cdc_raw&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt; &lt;SPAN class="hljs-operator"&gt;*&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; STREAM read_files(&lt;BR /&gt;  &lt;SPAN class="hljs-string"&gt;'/Volumes/raw_data/customers_cdc/'&lt;/SPAN&gt;,&lt;BR /&gt;  format &lt;SPAN class="hljs-operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;'json'&lt;/SPAN&gt;&lt;BR /&gt;);&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;-- Cleansed CDC with expectations&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH STREAMING &lt;SPAN class="hljs-keyword"&gt;TABLE&lt;/SPAN&gt; customers_cdc_clean (&lt;BR /&gt;  &lt;SPAN class="hljs-keyword"&gt;CONSTRAINT&lt;/SPAN&gt; valid_id EXPECT (customer_id &lt;SPAN class="hljs-keyword"&gt;IS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NOT&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;NULL&lt;/SPAN&gt;) &lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION &lt;SPAN class="hljs-keyword"&gt;DROP&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;ROW&lt;/SPAN&gt;&lt;BR /&gt;)&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt;&lt;BR /&gt;  customer_id,&lt;BR /&gt;  name,&lt;BR /&gt;  email,&lt;BR /&gt;  address,&lt;BR /&gt;  operation,&lt;BR /&gt;  operation_timestamp&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; STREAM(customers_cdc_raw);&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-comment"&gt;-- Apply CDC changes with SCD Type 2 history tracking&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH STREAMING &lt;SPAN class="hljs-keyword"&gt;TABLE&lt;/SPAN&gt; customers;&lt;BR /&gt;&lt;BR /&gt;AUTO CDC &lt;SPAN class="hljs-keyword"&gt;INTO&lt;/SPAN&gt; customers&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; STREAM(customers_cdc_clean)&lt;BR /&gt;KEYS (customer_id)&lt;BR /&gt;SEQUENCE &lt;SPAN class="hljs-keyword"&gt;BY&lt;/SPAN&gt; operation_timestamp&lt;BR /&gt;STORED &lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; SCD TYPE &lt;SPAN class="hljs-number"&gt;2&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;You can prompt Genie Code with something like:&lt;/P&gt;
&lt;BLOCKQUOTE class="qt qu qv"&gt;
&lt;P class="md me nb mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;&lt;EM class="gn"&gt;Your prompt:&lt;/EM&gt;&lt;/STRONG&gt;&lt;EM class="gn"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;“Add change data capture for customer updates from Debezium CDC events. I need SCD Type 2 to track historical changes to customer addresses.”&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Genie Code understands the CDC patterns and generates the appropriate&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;AUTO CDC&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;declarations.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="v cf nc nd ne nf" role="separator"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;H2 id="8cfb" class="nz oa gn bb ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bg" data-selectable-paragraph=""&gt;Data Quality Expectations: Your Safety Net&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Expectations are SDP’s built-in data quality framework. There are three violation behaviors:&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;BR /&gt;Behavior What Happens Use &lt;SPAN class="hljs-keyword"&gt;When&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION &lt;SPAN class="hljs-keyword"&gt;DROP&lt;/SPAN&gt; &lt;SPAN class="hljs-type"&gt;ROW&lt;/SPAN&gt; Invalid &lt;SPAN class="hljs-keyword"&gt;rows&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;are&lt;/SPAN&gt; silently dropped Tolerating messy source data&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;ON&lt;/SPAN&gt; VIOLATION FAIL &lt;SPAN class="hljs-keyword"&gt;UPDATE&lt;/SPAN&gt; Entire pipeline &lt;SPAN class="hljs-keyword"&gt;update&lt;/SPAN&gt; fails Critical fields that must exist&lt;BR /&gt;(&lt;SPAN class="hljs-keyword"&gt;no&lt;/SPAN&gt; action specified) Invalid &lt;SPAN class="hljs-keyword"&gt;rows&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;are&lt;/SPAN&gt; logged but kept Monitoring &lt;SPAN class="hljs-keyword"&gt;without&lt;/SPAN&gt; blocking&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;FIGURE class="nn no np nq nr ns nk nl paragraph-image"&gt;
&lt;DIV class="nk nl qx"&gt;&lt;PICTURE&gt;&lt;SOURCE srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*JdnpPtnz_EA8b0i-NeY-4Q.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*JdnpPtnz_EA8b0i-NeY-4Q.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*JdnpPtnz_EA8b0i-NeY-4Q.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*JdnpPtnz_EA8b0i-NeY-4Q.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*JdnpPtnz_EA8b0i-NeY-4Q.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JdnpPtnz_EA8b0i-NeY-4Q.png 1100w, https://miro.medium.com/v2/resize:fit:1162/format:webp/1*JdnpPtnz_EA8b0i-NeY-4Q.png 1162w" type="image/webp" sizes="auto, (min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 581px"&gt;&lt;/SOURCE&gt;&lt;SOURCE srcset="https://miro.medium.com/v2/resize:fit:640/1*JdnpPtnz_EA8b0i-NeY-4Q.png 640w, https://miro.medium.com/v2/resize:fit:720/1*JdnpPtnz_EA8b0i-NeY-4Q.png 720w, https://miro.medium.com/v2/resize:fit:750/1*JdnpPtnz_EA8b0i-NeY-4Q.png 750w, https://miro.medium.com/v2/resize:fit:786/1*JdnpPtnz_EA8b0i-NeY-4Q.png 786w, https://miro.medium.com/v2/resize:fit:828/1*JdnpPtnz_EA8b0i-NeY-4Q.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*JdnpPtnz_EA8b0i-NeY-4Q.png 1100w, https://miro.medium.com/v2/resize:fit:1162/1*JdnpPtnz_EA8b0i-NeY-4Q.png 1162w" sizes="auto, (min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 581px" data-testid="og"&gt;&lt;/SOURCE&gt;&lt;/PICTURE&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="shwetav1407_2-1781633756700.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/27851iD9527053953A76C4/image-size/medium?v=v2&amp;amp;px=400" role="button" title="shwetav1407_2-1781633756700.png" alt="shwetav1407_2-1781633756700.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/FIGURE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Pro tip:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Use Genie Code to add expectations iteratively. After an initial pipeline run, ask:&lt;/P&gt;
&lt;BLOCKQUOTE class="qt qu qv"&gt;
&lt;P class="md me nb mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;EM class="gn"&gt;“Analyze the bronze_orders data and suggest quality expectations for the silver layer based on the actual data distribution.”&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Genie Code can read the output datasets, profile the data, and propose expectations that make sense for your actual data — not just generic null checks.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;H2 id="c541" class="nz oa gn bb ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bg" data-selectable-paragraph=""&gt;Production Patterns and Best Practices&lt;/H2&gt;
&lt;H3 id="86c7" class="po oa gn bb ob pp pq pr of ps pt pu oj mo pv pw px ms py pz qa mw qb qc qd qe bg" data-selectable-paragraph=""&gt;1. Pipeline Configuration with YAML Spec&lt;/H3&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Your pipeline project uses a YAML spec file for top-level configuration:&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-comment"&gt;# pipeline.yaml&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-attr"&gt;name:&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;ecommerce_analytics&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-attr"&gt;target_catalog:&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;analytics&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-attr"&gt;target_schema:&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;ecommerce&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-attr"&gt;libraries:&lt;/SPAN&gt;&lt;BR /&gt;  &lt;SPAN class="hljs-bullet"&gt;-&lt;/SPAN&gt; &lt;SPAN class="hljs-attr"&gt;path:&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;./bronze_orders.sql&lt;/SPAN&gt;&lt;BR /&gt;  &lt;SPAN class="hljs-bullet"&gt;-&lt;/SPAN&gt; &lt;SPAN class="hljs-attr"&gt;path:&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;./silver_orders.sql&lt;/SPAN&gt;&lt;BR /&gt;  &lt;SPAN class="hljs-bullet"&gt;-&lt;/SPAN&gt; &lt;SPAN class="hljs-attr"&gt;path:&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;./gold_daily_revenue.sql&lt;/SPAN&gt;&lt;BR /&gt;  &lt;SPAN class="hljs-bullet"&gt;-&lt;/SPAN&gt; &lt;SPAN class="hljs-attr"&gt;path:&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;./gold_top_products.sql&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class="hljs-attr"&gt;configuration:&lt;/SPAN&gt;&lt;BR /&gt;  &lt;SPAN class="hljs-attr"&gt;spark.sql.shuffle.partitions:&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;"auto"&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;H3 id="0336" class="po oa gn bb ob pp pq pr of ps pt pu oj mo pv pw px ms py pz qa mw qb qc qd qe bg" data-selectable-paragraph=""&gt;2. Parameterize with SET&lt;/H3&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Use&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE class="db pk pl pm pn b"&gt;SET&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;to inject environment-specific configurations:&lt;/P&gt;
&lt;PRE class="nn no np nq nr qf pn qg bl qh ax bg"&gt;&lt;SPAN class="qi oa gn pn b bc qj qk e ql qm" data-selectable-paragraph=""&gt;&lt;SPAN class="hljs-keyword"&gt;SET&lt;/SPAN&gt; env &lt;SPAN class="hljs-operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;'production'&lt;/SPAN&gt;;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;SET&lt;/SPAN&gt; raw_path &lt;SPAN class="hljs-operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;'/Volumes/${env}/raw_data/orders/'&lt;/SPAN&gt;;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;CREATE&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;OR&lt;/SPAN&gt; REFRESH STREAMING &lt;SPAN class="hljs-keyword"&gt;TABLE&lt;/SPAN&gt; bronze_orders&lt;BR /&gt;&lt;SPAN class="hljs-keyword"&gt;AS&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;SELECT&lt;/SPAN&gt; &lt;SPAN class="hljs-operator"&gt;*&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;FROM&lt;/SPAN&gt; STREAM read_files(&lt;BR /&gt;  &lt;SPAN class="hljs-string"&gt;'${raw_path}'&lt;/SPAN&gt;,&lt;BR /&gt;  format &lt;SPAN class="hljs-operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="hljs-operator"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;'json'&lt;/SPAN&gt;&lt;BR /&gt;);&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;H2 id="5033" class="nz oa gn bb ob oc qn oe of og qo oi oj ok qp om on oo qq oq or os qr ou ov ow bg" data-selectable-paragraph=""&gt;3. Mix SQL and Python Files&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;A single pipeline can contain both SQL and Python source files. Use SQL for straightforward transformations and Python when you need UDFs, ML feature engineering, or complex business logic.&lt;/P&gt;
&lt;H2 id="a2f1" class="nz oa gn bb ob oc qn oe of og qo oi oj ok qp om on oo qq oq or os qr ou ov ow bg" data-selectable-paragraph=""&gt;4. Use Genie Code for Ongoing Maintenance&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;Genie Code doesn’t just build pipelines — it monitors them. It can:&lt;/P&gt;
&lt;UL class=""&gt;
&lt;LI id="5269" class="md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Triage failures&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;when a pipeline run breaks&lt;/LI&gt;
&lt;LI id="1554" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Investigate anomalies&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;in data quality metrics&lt;/LI&gt;
&lt;LI id="389e" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Handle DBR upgrades&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;by updating deprecated syntax&lt;/LI&gt;
&lt;LI id="648c" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Optimize resource allocation&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;based on observed workload patterns&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;Ask it things like:&lt;/P&gt;
&lt;BLOCKQUOTE class="qt qu qv"&gt;
&lt;P class="md me nb mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;EM class="gn"&gt;“The silver_orders pipeline has been failing since yesterday. Diagnose the issue.”&lt;/EM&gt;&lt;/P&gt;
&lt;P class="md me nb mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;EM class="gn"&gt;“Optimize the compute configuration for this pipeline — it’s running slowly on large backfills.”&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;H2 id="9665" class="nz oa gn bb ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bg" data-selectable-paragraph=""&gt;Wrapping Up&lt;/H2&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg ox mi mj mk oy mm mn mo oz mq mr ms pa mu mv mw pb my mz na gg bg" data-selectable-paragraph=""&gt;The combination of SDP and Genie Code represents a genuine paradigm shift for data engineering on Databricks. SDP eliminates the boilerplate of pipeline orchestration, and Genie Code eliminates the boilerplate of writing SDP. What used to take days of manual pipeline construction can now happen in a single conversation.&lt;/P&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;The key takeaways:&lt;/P&gt;
&lt;UL class=""&gt;
&lt;LI id="bf76" class="md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Start with SDP&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— even without Genie Code, the declarative approach saves enormous amounts of manual orchestration code.&lt;/LI&gt;
&lt;LI id="aacf" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Use Genie Code Agent mode&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;in the Lakeflow Pipelines Editor to plan, generate, and validate entire pipelines from natural language.&lt;/LI&gt;
&lt;LI id="7f69" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Build iteratively&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— start with a basic bronze-silver-gold structure, then ask Genie Code to add CDC handling, expectations, and enrichments.&lt;/LI&gt;
&lt;LI id="d742" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Trust the loop&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— Genie Code’s ability to run the pipeline, read outputs, diagnose errors, and fix them autonomously is the real superpower.&lt;/LI&gt;
&lt;LI id="d545" class="md me gn mf b mg pf mi mj mk pg mm mn mo ph mq mr ms pi mu mv mw pj my mz na pc pd pe bg" data-selectable-paragraph=""&gt;&lt;STRONG class="mf go"&gt;Keep humans in control&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;— every destructive action requires your approval. Genie Code proposes; you decide.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;SDP and Genie Code are both generally available today at no additional cost for all Databricks customers. Open the Lakeflow Pipelines Editor, flip on Agent mode, and start talking to your data infrastructure.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="gg gh gi gj gk"&gt;
&lt;DIV class="v cf"&gt;
&lt;DIV class="cm bd fs ft fu fv"&gt;
&lt;P class="pw-post-body-paragraph md me gn mf b mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na gg bg" data-selectable-paragraph=""&gt;&lt;EM class="nb"&gt;Ready to get started? Check out the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;A class="z qy" href="https://docs.databricks.com/aws/en/ldp/" rel="noopener ugc nofollow" target="_blank"&gt;&lt;EM class="nb"&gt;Databricks SDP documentation&lt;/EM&gt;&lt;/A&gt;&lt;EM class="nb"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;A class="z qy" href="https://docs.databricks.com/aws/en/ldp/de-agent" rel="noopener ugc nofollow" target="_blank"&gt;&lt;EM class="nb"&gt;Genie Code guide for pipeline development&lt;/EM&gt;&lt;/A&gt;&lt;EM class="nb"&gt;.&lt;/EM&gt;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Tue, 16 Jun 2026 18:22:36 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/building-production-ready-sdp-pipelines-with-genie-code-the/m-p/159195#M11</guid>
      <dc:creator>shwetav1407</dc:creator>
      <dc:date>2026-06-16T18:22:36Z</dc:date>
    </item>
    <item>
      <title>Metric Views in AI/BI Dashboards &amp; Genie (Part 2 of 3)</title>
      <link>https://community.databricks.com/t5/genie-hub/metric-views-in-ai-bi-dashboards-amp-genie-part-2-of-3/m-p/158795#M14</link>
      <description>&lt;P class=""&gt;&lt;STRONG&gt;&lt;EM&gt;This is part 2 of 3 in a series where I take you through working with Metric Views.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Part 1: Introduction to Metric Views&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Part 2: Metric Views in AI/BI Dashboards &amp;amp; Genie&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Part 3: Metric Views with Power BI and Tabular Editor&lt;/LI&gt;&lt;/UL&gt;&lt;H3 id="ember654"&gt;Introduction&lt;/H3&gt;&lt;P class=""&gt;In Part 1, we defined what metric views are, how you build and maintain them. Now we shift focus to how these views become &lt;EM&gt;consumable&lt;/EM&gt; by business-users, via dashboards and conversational analytics. To do this, we will start by setting up a simple semantic model based on the TPCH sample data, and then get to work understanding how Metric Views work across the Databricks platform. Specifically we will cover:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Defining a Semantic Model and Metric Views using the new yaml version 1.1, which includes metadata, formatting and lots of other neat new features&lt;/LI&gt;&lt;LI&gt;How metric views can be used AI/BI dashboards&lt;/LI&gt;&lt;LI&gt;How metric views feed into Genie for natural-language analytics&lt;/LI&gt;&lt;LI&gt;Best practices, sharing, and governance aspects&lt;/LI&gt;&lt;/UL&gt;&lt;H3 id="ember657"&gt;Setup&lt;/H3&gt;&lt;P class=""&gt;To make things tangible, I have built a small Star Schema based model in Databricks based on the &lt;STRONG&gt;TPCH sample &lt;/STRONG&gt;dataset. Apart from a bit of renaming, the main thing that has been set up, is definition of business keys, surrogate keys and primary/foreign key relations. The goal is to demonstrate how Metric Views work, and for that we need a model, but nothing too fancy. The model represents a simplified sales domain built around a single Fact table and its related Dimensions.&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;Fact table:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;fact_lineitem; transactional data including quantity, price, discount, and order references.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;STRONG&gt;Dimension tables:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;dim_customer; customer attributes such as name, market segment, and nation.&lt;/LI&gt;&lt;LI&gt;dim_orders; order-level attributes including order date, status, and total price.&lt;/LI&gt;&lt;LI&gt;dim_part; product-level attributes (part key, name, type, and brand).&lt;/LI&gt;&lt;LI&gt;dim_supplier; supplier-level attributes (supplier key, name, nation).&lt;/LI&gt;&lt;LI&gt;dim_date; calendar table that is used as a role-playing dimension across 3 different dates on the fact.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;STRONG&gt;Metric View&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;The metric view is designed using the new yaml version 1.1. This opens up a lot of new opportunities for metadata including comments, synonyms and data type configurations, which are useful not only for your Business Users, for context and documentation, but also for Genie which relies on metadata to better understand your logic. For more context around the semantic metadata the full &lt;A href="https://docs.databricks.com/aws/en/business-semantics/agent-metadata" target="_self"&gt;documentation&lt;/A&gt; is available at Databricks&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;Source Code&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;The solution is created using a notebook, and a sql script, which allows you to set up the solution in your own workspace and follow along. The code is shared here on &lt;A href="https://github.com/Krijztianj/semantic_model_demo" target="_self"&gt;GitHub&lt;/A&gt;.&lt;/P&gt;&lt;HR /&gt;&lt;H2 id="ember667"&gt;Consuming Metric Views&lt;/H2&gt;&lt;P class=""&gt;Both AI/BI Dashboards and Genie Spaces can be built directly on top of tables across your Unity Catalog. The advantage of Metric Views is, that it allows you to combine Facts and Dimensions, and define measures, relationships and metadata definitions that can be re-used across your entire domain.&lt;/P&gt;&lt;H3 id="ember669"&gt;AI/BI Dashboards&lt;/H3&gt;&lt;P class=""&gt;AI/BI Dashboards is Databricks' product which offers a native end-to-end BI experience. It is built on top of Unity Catalog, supports self-service creation of analytical datasets, visualizations, and integration with conversational analytics. When you have a Metric view defined, the dashboard layer can simply consume this, instead of consuming tables directly.&lt;/P&gt;&lt;P class=""&gt;To create an AI/BI Dashboard on top of a Metric View:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;In Databricks SQL workspace, navigate to Dashboards.&lt;/LI&gt;&lt;LI&gt;Create a new dashboard and go to the Data tab and select Add Data Source and select your Metric View.&lt;/LI&gt;&lt;LI&gt;Now you are ready to start the visualization part of the work; Create graphs, filters, text boxes and enjoy the existing dimensions and measures, or create new dashboard specific measures based on existing logic.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3 id="ember676"&gt;Genie&lt;/H3&gt;&lt;P class=""&gt;Genie is the natural-language interface inside Databricks aimed at business users: you ask “What was our revenue last quarter in EMEA?”. Genie translates your SQL, runs it, returns tabular and/or visual output. Because metric views encapsulate business logic and semantics, Genie can leverage that metadata and mappings to deliver accurate, governed answers.&lt;/P&gt;&lt;P class=""&gt;The initial setup of using a Metric View in Genie is very similar to what we just saw above for AI/BI Dashboards:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;In Databricks SQL workspace, navigate to Genie.&lt;/LI&gt;&lt;LI&gt;Create a new Genie Space and select your Metric View as tour data source&lt;/LI&gt;&lt;LI&gt;Now you are ready to start configuring the Genie. Provide sample questions and/or queries, teach it additional synonyms or instructions or attach additional data for cross-collaborations&lt;/LI&gt;&lt;/OL&gt;&lt;H3 id="ember681"&gt;SQL querying&lt;/H3&gt;&lt;P class=""&gt;I just want to include this here as an honorable mention. While business users may prefer interacting with Genie and Dashboards, business analysts might prefer being able to query data directly themselves, or you might want to use a Metric View to expose data to a subsequent solution outside&lt;/P&gt;&lt;P class=""&gt;Metric Views are queryable directly, allowing re-use of existing Metric View definitions in subsequent data models or even building Metric Views on top of other Metric Views (... that one might get a little messy down the road). To query a metric view, the main distinction from regular SQL is the use of the MEASURE command as shown below:&lt;/P&gt;&lt;PRE&gt;SELECT 
  `Customer Region`,
  `Ship Year`,
  MEASURE(`Total Net Amount`) AS revenue,
  MEASURE(`Total Orders`) AS orders,
  MEASURE(`Average Order Value`) AS aov
FROM main.demo_tpch.order_metrics_mv
WHERE `Ship Year` = 1997
GROUP BY `Customer Region`, `Ship Year`
ORDER BY revenue DESC;&lt;/PRE&gt;&lt;H2 id="ember684"&gt;So for all that work, what do we actually get?&lt;/H2&gt;&lt;P class=""&gt;Building a semantic layer, is all about enabling your business users to get closer to that self-service analytics dream. By keeping the entire solution inside of Databricks, we enable the re-use of all the key governance, lineage and security features that already exist across the Data Platform. Being able to define relations, computing measures and adding additional semantics are options that we do not normally see as part of a Lakehouse. This options extends the reach of the Lakehouse platform all the way to the end-users.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="KrisJohannesen_2-1781178574338.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/27719iDCD9F35B02A21C0C/image-size/medium?v=v2&amp;amp;px=400" role="button" title="KrisJohannesen_2-1781178574338.png" alt="KrisJohannesen_2-1781178574338.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;DIV class=""&gt;&lt;EM&gt;Genie and Dashboards working side-by-side and in unison. Sorry for the lack of attention to the dashboard. They can actually get really pretty now with themes, colors and text, if you know what you are doing.&lt;/EM&gt;&lt;/DIV&gt;&lt;P class=""&gt;The key benefits of using Metric Views as the source for your solution, can be summarized to;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Consistency&lt;/STRONG&gt;: all visuals and conversational queries rely on the same metric definitions.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Governance&lt;/STRONG&gt;: because the metric view is under Unity Catalog governance, access controls and lineage apply.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Scalability&lt;/STRONG&gt;: business users get self-service via dashboards, Genie and also SQL analytics directly on the Metric view.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Extendibility&lt;/STRONG&gt;: when a new measure or dimension is added in the metric view, dashboards and Genie automatically pick it up (once surfaced in UI) without redefining logic everywhere.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;The ability for end-users to query, talk to and analyze data using consistent definitions and extend these are where we get to the actual value creation of the Data Platform.&lt;/P&gt;&lt;HR /&gt;&lt;H3 id="ember690"&gt;Summary and next steps&lt;/H3&gt;&lt;P class=""&gt;In this article we moved from definition to consumption, using the built-in Databricks tools.&lt;/P&gt;&lt;P class=""&gt;In the next and final part of the series we’ll explore &lt;STRONG&gt;Part 3: Metric Views and Power BI + Tabular Editor&lt;/STRONG&gt;, demonstrating how those same semantic definitions can be surfaced in external BI tools.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2026 11:50:26 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/metric-views-in-ai-bi-dashboards-amp-genie-part-2-of-3/m-p/158795#M14</guid>
      <dc:creator>KrisJohannesen</dc:creator>
      <dc:date>2026-06-11T11:50:26Z</dc:date>
    </item>
    <item>
      <title>Databricks now supports importing Tableau and Power BI files into Genie Code to automatically build</title>
      <link>https://community.databricks.com/t5/genie-hub/databricks-now-supports-importing-tableau-and-power-bi-files/m-p/157527#M9</link>
      <description>&lt;P&gt;With&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Genie Code&lt;/STRONG&gt;, you can now add a Tableau or Power BI file and have it build an&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;AI/BI dashboard&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;that replicates your existing visualizations - while connecting them to&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;metric views&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;that mirror the underlying business logic.&lt;/P&gt;&lt;P&gt;&lt;A class="" href="https://learn.microsoft.com/en-us/azure/databricks/dashboards/manage/import-bi#requirements" target="_blank" rel="noopener nofollow ugc"&gt;Import BI files using Genie Code - Azure Databricks | Microsoft Learn&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Many organizations have years of BI logic embedded inside workbooks, reports, templates, and semantic layers. Rebuilding that logic manually in a new platform can be slow, error-prone, and difficult to govern.&lt;/P&gt;&lt;P&gt;This new workflow helps accelerate that migration path:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P&gt;Upload a Tableau or Power BI file directly into Genie Code Supported formats include&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;.twb,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;.twbx,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;.tds,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;.tdsx, and&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;.pbit.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Use the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;/importBI&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;command in Agent mode Genie Code imports the BI asset and generates an AI/BI dashboard.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Review the generated dashboard and metric views Measures and dimensions from the original file are transformed into metric views.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Promote metric views to Unity Catalog This makes them reusable across dashboards, Genie Spaces, and notebooks, while adding governance, lineage, access controls, and discoverability.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Currently, there is also a 100 MB limit for direct file uploads. For larger files, the recommended path is to store the file in a Unity Catalog volume and reference it directly, for example:&lt;/P&gt;&lt;P&gt;/importBI @/Volumes/my_catalog/my_schema/my_volume/sales_workbook.twb&lt;/P&gt;</description>
      <pubDate>Sat, 23 May 2026 07:24:40 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/databricks-now-supports-importing-tableau-and-power-bi-files/m-p/157527#M9</guid>
      <dc:creator>szymon_dybczak</dc:creator>
      <dc:date>2026-05-23T07:24:40Z</dc:date>
    </item>
    <item>
      <title>Re: How Databricks Genie Turns Collaboration Tools into AI-Powered Intelligence Platforms</title>
      <link>https://community.databricks.com/t5/genie-hub/how-databricks-genie-turns-collaboration-tools-into-ai-powered/m-p/156453#M3</link>
      <description>&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="The Dashboard Era Is Ending. Conversation Is Replacing It." style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/26777iDA0071AEE4F64791/image-size/large?v=v2&amp;amp;px=999" role="button" title="databricks genie for microsoft teams and slack sq.png" alt="The Dashboard Era Is Ending. Conversation Is Replacing It." /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;The Dashboard Era Is Ending. Conversation Is Replacing It.&lt;/span&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 08 May 2026 12:53:10 GMT</pubDate>
      <guid>https://community.databricks.com/t5/genie-hub/how-databricks-genie-turns-collaboration-tools-into-ai-powered/m-p/156453#M3</guid>
      <dc:creator>Hammad-Arbisoft</dc:creator>
      <dc:date>2026-05-08T12:53:10Z</dc:date>
    </item>
  </channel>
</rss>

