<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Rui Carvalho on Medium]]></title>
        <description><![CDATA[Stories by Rui Carvalho on Medium]]></description>
        <link>https://medium.com/@ruimigueltcarvalho?source=rss-b9b2cde34283------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*r5_J03IXjmfxVIMU7oBASA.png</url>
            <title>Stories by Rui Carvalho on Medium</title>
            <link>https://medium.com/@ruimigueltcarvalho?source=rss-b9b2cde34283------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 16:28:35 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@ruimigueltcarvalho/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Running SQL on an External Database From Databricks. What Are Your Options?]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/the-data-therapy/running-sql-on-an-external-database-from-databricks-what-are-your-options-2ef5808416a0?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/1136/1*25nDYj0XUj8oEdzEXYU72g.png" width="1136"></a></p><p class="medium-feed-snippet">A practical guide to running DDL on Azure SQL from a Databricks notebook.</p><p class="medium-feed-link"><a href="https://medium.com/the-data-therapy/running-sql-on-an-external-database-from-databricks-what-are-your-options-2ef5808416a0?source=rss-b9b2cde34283------2">Continue reading on The Data Therapy »</a></p></div>]]></description>
            <link>https://medium.com/the-data-therapy/running-sql-on-an-external-database-from-databricks-what-are-your-options-2ef5808416a0?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/2ef5808416a0</guid>
            <category><![CDATA[sql]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[sql-database]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Fri, 13 Mar 2026 17:47:36 GMT</pubDate>
            <atom:updated>2026-03-13T17:47:53.792Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Built an Automated Expiration Monitor for Databricks Tokens and Azure Key Vault]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/the-data-therapy/built-an-automated-expiration-monitor-for-databricks-tokens-and-azure-key-vault-8feca7a81c91?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/1227/1*bS45EYtF9ubQ3lU_7gFuHA.png" width="1227"></a></p><p class="medium-feed-snippet">How to make sure a pipeline never fails due to token and secrets expiration alerts via Microsoft Teams</p><p class="medium-feed-link"><a href="https://medium.com/the-data-therapy/built-an-automated-expiration-monitor-for-databricks-tokens-and-azure-key-vault-8feca7a81c91?source=rss-b9b2cde34283------2">Continue reading on The Data Therapy »</a></p></div>]]></description>
            <link>https://medium.com/the-data-therapy/built-an-automated-expiration-monitor-for-databricks-tokens-and-azure-key-vault-8feca7a81c91?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/8feca7a81c91</guid>
            <category><![CDATA[data-visualization]]></category>
            <category><![CDATA[data-monitoring]]></category>
            <category><![CDATA[office-365]]></category>
            <category><![CDATA[azure-key-vault]]></category>
            <category><![CDATA[databricks]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Fri, 06 Mar 2026 09:39:20 GMT</pubDate>
            <atom:updated>2026-03-06T09:41:11.061Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[I Work a 9–5, Build Content and Study. Here Is How I Stay Balanced]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@ruimigueltcarvalho/i-work-a-9-5-build-content-and-study-here-is-how-i-stay-balanced-5f1894d9fbef?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/800/1*AeoP1YDS6ZXAFpSU9hRcxA.jpeg" width="800"></a></p><p class="medium-feed-snippet">A simple system built over the years that helps me do more without paying the price.</p><p class="medium-feed-link"><a href="https://medium.com/@ruimigueltcarvalho/i-work-a-9-5-build-content-and-study-here-is-how-i-stay-balanced-5f1894d9fbef?source=rss-b9b2cde34283------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@ruimigueltcarvalho/i-work-a-9-5-build-content-and-study-here-is-how-i-stay-balanced-5f1894d9fbef?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/5f1894d9fbef</guid>
            <category><![CDATA[books]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[work-life-balance]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[training]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Fri, 27 Feb 2026 16:31:00 GMT</pubDate>
            <atom:updated>2026-02-27T17:53:19.152Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How Autoloader Solved My File Ingestion Problem in Databricks]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/the-data-therapy/how-autoloader-solved-my-file-ingestion-problem-in-databricks-b57a8197c4dd?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/916/1*UX7YL589V_PHu5IRWCZdiA.png" width="916"></a></p><p class="medium-feed-snippet">How Databricks Autoloader handles incremental file ingestion from cloud storage to Delta Lake without custom tracking code</p><p class="medium-feed-link"><a href="https://medium.com/the-data-therapy/how-autoloader-solved-my-file-ingestion-problem-in-databricks-b57a8197c4dd?source=rss-b9b2cde34283------2">Continue reading on The Data Therapy »</a></p></div>]]></description>
            <link>https://medium.com/the-data-therapy/how-autoloader-solved-my-file-ingestion-problem-in-databricks-b57a8197c4dd?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/b57a8197c4dd</guid>
            <category><![CDATA[data]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[autoloader]]></category>
            <category><![CDATA[data-lake]]></category>
            <category><![CDATA[streaming]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Thu, 19 Feb 2026 11:04:35 GMT</pubDate>
            <atom:updated>2026-02-19T11:06:47.063Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How I Replaced 180 Lines of Schema Definition With a Single VARIANT Column]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/the-data-therapy/how-i-replaced-180-lines-of-schema-definition-with-a-single-variant-column-cfd4d6f78b89?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/780/1*9Bnfx6p3BAeIcOeIcFFaeQ.png" width="780"></a></p><p class="medium-feed-snippet">Using Databricks VARIANT to handle unpredictable JSON from external APIs without constant schema maintenance</p><p class="medium-feed-link"><a href="https://medium.com/the-data-therapy/how-i-replaced-180-lines-of-schema-definition-with-a-single-variant-column-cfd4d6f78b89?source=rss-b9b2cde34283------2">Continue reading on The Data Therapy »</a></p></div>]]></description>
            <link>https://medium.com/the-data-therapy/how-i-replaced-180-lines-of-schema-definition-with-a-single-variant-column-cfd4d6f78b89?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/cfd4d6f78b89</guid>
            <category><![CDATA[data]]></category>
            <category><![CDATA[json]]></category>
            <category><![CDATA[sql]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[databricks]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Wed, 11 Feb 2026 10:20:38 GMT</pubDate>
            <atom:updated>2026-02-11T10:20:53.675Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How Databricks Fixed the Materialized View Cost Problem]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/the-data-therapy/how-databricks-fixed-the-materialized-view-cost-problem-e625e71280aa?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/958/1*ULajzMtruq5gX6HaE8GSmw.png" width="958"></a></p><p class="medium-feed-snippet">New REFRESH POLICY and EXPLAIN commands give you control over incremental refresh behavior before surprise full table scans drain your&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/the-data-therapy/how-databricks-fixed-the-materialized-view-cost-problem-e625e71280aa?source=rss-b9b2cde34283------2">Continue reading on The Data Therapy »</a></p></div>]]></description>
            <link>https://medium.com/the-data-therapy/how-databricks-fixed-the-materialized-view-cost-problem-e625e71280aa?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/e625e71280aa</guid>
            <category><![CDATA[sql-view]]></category>
            <category><![CDATA[lake-house]]></category>
            <category><![CDATA[sql]]></category>
            <category><![CDATA[warehouse]]></category>
            <category><![CDATA[databricks]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Mon, 02 Feb 2026 20:51:10 GMT</pubDate>
            <atom:updated>2026-02-02T20:51:31.735Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Databricks Materialized Views and why the Enzyme engine matters]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/the-data-therapy/databricks-materialized-views-and-why-the-enzyme-engine-matters-7c427c41cb16?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/994/1*Jzyh_apMKsLNTbjCYeovVA.jpeg" width="994"></a></p><p class="medium-feed-snippet">A deep technical guide to Databricks SQL materialized views, Enzyme refresh logic, incremental vs full recompute, performance trade offs&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/the-data-therapy/databricks-materialized-views-and-why-the-enzyme-engine-matters-7c427c41cb16?source=rss-b9b2cde34283------2">Continue reading on The Data Therapy »</a></p></div>]]></description>
            <link>https://medium.com/the-data-therapy/databricks-materialized-views-and-why-the-enzyme-engine-matters-7c427c41cb16?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/7c427c41cb16</guid>
            <category><![CDATA[lake-house]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[sql]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[sql-view]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Mon, 05 Jan 2026 10:31:01 GMT</pubDate>
            <atom:updated>2026-01-05T10:31:14.775Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Spark Join Types Explained]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/the-data-therapy/spark-join-types-explained-dbb28dfe2db8?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/1136/1*g9lDlgRzLGGny70A5e9spA.png" width="1136"></a></p><p class="medium-feed-snippet">Learn Broadcast Hash Join, Sort Merge Join and Shuffle Hash Join with a simple mental model and real explain patterns to debug slow Spark&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/the-data-therapy/spark-join-types-explained-dbb28dfe2db8?source=rss-b9b2cde34283------2">Continue reading on The Data Therapy »</a></p></div>]]></description>
            <link>https://medium.com/the-data-therapy/spark-join-types-explained-dbb28dfe2db8?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/dbb28dfe2db8</guid>
            <category><![CDATA[big-data-performance]]></category>
            <category><![CDATA[big-data]]></category>
            <category><![CDATA[apache-spark]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[pyspark-joins]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Fri, 26 Dec 2025 11:54:41 GMT</pubDate>
            <atom:updated>2025-12-26T11:55:06.582Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Fixing Databricks Deployments When Python Modules Get Turned Into Notebooks]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/the-data-therapy/fixing-databricks-deployments-when-python-modules-get-turned-into-notebooks-6af58144cc5e?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/1213/1*caXjskE8WoIvR9IX34wBUQ.png" width="1213"></a></p><p class="medium-feed-snippet">Refactoring a Databricks deployment pipeline when Python modules started to break</p><p class="medium-feed-link"><a href="https://medium.com/the-data-therapy/fixing-databricks-deployments-when-python-modules-get-turned-into-notebooks-6af58144cc5e?source=rss-b9b2cde34283------2">Continue reading on The Data Therapy »</a></p></div>]]></description>
            <link>https://medium.com/the-data-therapy/fixing-databricks-deployments-when-python-modules-get-turned-into-notebooks-6af58144cc5e?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/6af58144cc5e</guid>
            <category><![CDATA[azure-devops]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[data-engineering]]></category>
            <category><![CDATA[cicd]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Tue, 23 Dec 2025 13:52:27 GMT</pubDate>
            <atom:updated>2025-12-26T11:53:36.954Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Databricks SQL INSERT REPLACE Explained—REPLACE USING and REPLACE ON for Delta Tables]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/learning-sql/databricks-sql-insert-replace-explained-replace-using-and-replace-on-for-delta-tables-49c5a2cb58f0?source=rss-b9b2cde34283------2"><img src="https://cdn-images-1.medium.com/max/1024/1*0mi5NaBHMCpMc7lP0WGJRg.png" width="1024"></a></p><p class="medium-feed-snippet">A cleaner way to refresh partitions and fix keys without writing long MERGE statements</p><p class="medium-feed-link"><a href="https://medium.com/learning-sql/databricks-sql-insert-replace-explained-replace-using-and-replace-on-for-delta-tables-49c5a2cb58f0?source=rss-b9b2cde34283------2">Continue reading on Learning SQL »</a></p></div>]]></description>
            <link>https://medium.com/learning-sql/databricks-sql-insert-replace-explained-replace-using-and-replace-on-for-delta-tables-49c5a2cb58f0?source=rss-b9b2cde34283------2</link>
            <guid isPermaLink="false">https://medium.com/p/49c5a2cb58f0</guid>
            <category><![CDATA[data-warehouse]]></category>
            <category><![CDATA[databricks]]></category>
            <category><![CDATA[data-lakehouse]]></category>
            <category><![CDATA[delta-lake]]></category>
            <category><![CDATA[sql]]></category>
            <dc:creator><![CDATA[Rui Carvalho]]></dc:creator>
            <pubDate>Tue, 16 Dec 2025 13:11:54 GMT</pubDate>
            <atom:updated>2025-12-16T13:37:14.930Z</atom:updated>
        </item>
    </channel>
</rss>