<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Data Engineering Central]]></title><description><![CDATA[Long Live the Data Engineer. No holds barred.]]></description><link>https://dataengineeringcentral.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!pIVQ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F880c179a-d4f4-4f41-a70c-48e557c48f38_256x256.png</url><title>Data Engineering Central</title><link>https://dataengineeringcentral.substack.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 05 Nov 2026 01:40:33 GMT</lastBuildDate><atom:link href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Ffeed" rel="self" type="application/rss+xml"/><copyright><![CDATA[dataengineeringdude]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[dataengineeringcentral@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[dataengineeringcentral@substack.com]]></itunes:email><itunes:name><![CDATA[Daniel Beach]]></itunes:name></itunes:owner><itunes:author><![CDATA[Daniel Beach]]></itunes:author><googleplay:owner><![CDATA[dataengineeringcentral@substack.com]]></googleplay:owner><googleplay:email><![CDATA[dataengineeringcentral@substack.com]]></googleplay:email><googleplay:author><![CDATA[Daniel Beach]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Life After Big Tech]]></title><description><![CDATA[Bears, Mountains, and Finding Purpose]]></description><link>https://dataengineeringcentral.substack.com/p/life-after-big-tech</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/life-after-big-tech</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Wed, 04 Nov 2026 14:34:31 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fapi.substack.com%2Ffeed%2Fpodcast%2F222405165%2F0508bd7553ebc230d0d46b8ac71cb9fd.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>What happens when you finally achieve financial independence, walk away from a successful career in Big Tech, and have the freedom to do whatever you want? Is it everything you imagined it would be?</p><p>In this episode of the Data Engineering Central Podcast, <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fhe-quite-apple-after-13-years">I&#8217;m joined once again by Kevin Martin, who spent nearly 13 years working at Apple before deciding he&#8217;d had enough of the corporate grind</a>. When we last spoke, Kevin had just left Apple and was preparing to spend much of 2026 backpacking some of America&#8217;s most beautiful wilderness.</p><div class="embedded-publication-wrap" data-attrs="{&quot;id&quot;:7003054,&quot;embedding_publication_id&quot;:1224799,&quot;name&quot;:&quot;Unmapped &quot;,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!xXwE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97f2e0ab-2a07-44df-95e9-37934976b25d_1024x1024.png&quot;,&quot;base_url&quot;:&quot;https://unmappedyear.substack.com&quot;,&quot;hero_text&quot;:&quot;Left Apple after ~13 years to backpack 1,000 miles. What happens when you stop optimizing and let the trail shape what&#8217;s next?&quot;,&quot;author_name&quot;:&quot;Kevin&quot;,&quot;show_subscribe&quot;:true,&quot;logo_bg_color&quot;:&quot;#ffffff&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPublicationToDOMWithSubscribe"><div class="embedded-publication show-subscribe"><a class="embedded-publication-link-part" native="true" href="iframe.php?url=https%3A%2F%2Funmappedyear.substack.com%3Futm_source%3Dsubstack%26amp%3Butm_campaign%3Dpublication_embed%26amp%3Butm_medium%3Dweb%26amp%3Bembedding_publication_id%3D1224799"><img class="embedded-publication-logo" src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21xXwE%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F97f2e0ab-2a07-44df-95e9-37934976b25d_1024x1024.png" width="56" height="56" style="background-color: rgb(255, 255, 255);"><span class="embedded-publication-name">Unmapped </span><div class="embedded-publication-hero-text">Left Apple after ~13 years to backpack 1,000 miles. What happens when you stop optimizing and let the trail shape what&#8217;s next?</div><div class="embedded-publication-author-name">By Kevin</div></a><form class="embedded-publication-subscribe" method="GET" action="iframe.php?url=https%3A%2F%2Funmappedyear.substack.com%2Fsubscribe%3Fembedding_publication_id%3D1224799"><input type="hidden" name="source" value="publication-embed"><input type="hidden" name="autoSubmit" value="true"><input type="email" class="email-input" name="email" placeholder="Type your email..."><input type="submit" class="button primary" value="Subscribe"></form></div></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/life-after-big-tech?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/life-after-big-tech?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Flife-after-big-tech%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p>Well, <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fhe-quite-apple-after-13-years">Kevin is back</a>, and he&#8217;s got some stories to tell.</p><blockquote><p><em>Since our last conversation, Kevin has completed hundreds of miles of backpacking, including the Benton MacKaye Trail and the legendary John Muir Trail. Along the way, he spent a terrifying night with multiple black bears circling his tent in the Smoky Mountains, experienced the incredible beauty of the Sierra Nevada, and learned some unexpected lessons about himself.</em></p></blockquote><p>One of the most interesting things Kevin discovered was that <strong>leaving the corporate world doesn&#8217;t necessarily mean leaving behind the mindset that made you successful there.</strong> After years of working in a high-performance environment at Apple, he found himself approaching retirement and backpacking with the same intensity, planning, and expectations that he&#8217;d brought to his career.</p><ul><li><p>We dig into that realization and what it means to actually enjoy the financial freedom you&#8217;ve worked so hard to achieve.</p></li></ul><p>Of course, we also wander into plenty of other topics, including the changing landscape of Big Tech, AI-driven layoffs, whether anyone&#8217;s job is really safe anymore, and the importance of building financial independence in an increasingly uncertain world.</p><ul><li><p>We talk about lifestyle inflation, the FIRE movement, the psychology of money, and why doing difficult things in the outdoors can completely change your perspective on everyday problems.</p></li></ul><p>Perhaps my favorite part of the conversation is our discussion about happiness and the tendency to constantly chase the next big milestone. Whether it&#8217;s a promotion, a financial goal, retirement, or climbing a mountain, there&#8217;s always something else waiting on the horizon.</p><div class="callout-block" data-callout="true"><p><strong>At what point do we stop chasing the next thing and actually enjoy the life we&#8217;ve built?</strong></p></div><p>It&#8217;s a fun, thoughtful conversation that goes well beyond technology and money. If you work in tech, dream about financial independence, love the outdoors, or simply find yourself wondering what life might look like outside the traditional career path, I think you&#8217;ll enjoy this one.</p><p>Grab a cup of coffee and join us!</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/life-after-big-tech?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/life-after-big-tech?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Flife-after-big-tech%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Databricks. Data Quality. MPC Server. SDK.]]></title><description><![CDATA[we live in a new world]]></description><link>https://dataengineeringcentral.substack.com/p/databricks-data-quality-mpc-server</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/databricks-data-quality-mpc-server</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Tue, 03 Nov 2026 13:19:51 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21WUzx%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21WUzx%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WUzx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!WUzx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!WUzx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!WUzx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21WUzx%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1963987,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/222653196?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WUzx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!WUzx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!WUzx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!WUzx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0da2fb24-4619-46a4-acad-8ead97870143_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="callout-block" data-callout="true"><p>Note: This is NOT a sponsored post. Sometimes I just find interesting content/projects people are working on and like to talk about them. Deal with it.</p></div><p>As the world changes, especially the data world &#8230; with the advent of Agentic capabilities &#8230; like it or not &#8230; your data job is going to change; you either get on board and go along for the ride, or put your head in the sand and leave the rest to chance. I encourage you to be skeptical, but honest about the positive benefits of LLMs/AI in your day-to-day work.</p><blockquote><p><em><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Andreas Kretz&quot;,&quot;id&quot;:181692620,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30eec9a4-a54a-4412-b304-761478dcccb6_4000x6000.jpeg&quot;,&quot;uuid&quot;:&quot;78bba949-58bf-4a30-ab04-bf050625147d&quot;}" data-component-name="MentionToDOM"></span> is a creator I watch closely and of course h<a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fai-is-changing-data-engineering-fast">e&#8217;s been on the the podcast before</a>. We need to get him to come back.</em></p></blockquote><p>Recently, <a href="iframe.php?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DO7gVSDB44d0">Andreas published a YouTube video</a> that is probably one of the best, honest, and simple examples of NOT just more AI hype &#8230; but how Agentic capabilities can become part of our everyday Data Platform in ways that can make our lives easier, better, and provide real ROI by breaking down barriers and solving problems in novel ways. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgo.learndataengineering.com%2Fekwpanrm" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f7OP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png 424w, https://substackcdn.com/image/fetch/$s_!f7OP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png 848w, https://substackcdn.com/image/fetch/$s_!f7OP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png 1272w, https://substackcdn.com/image/fetch/$s_!f7OP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21f7OP%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png" width="1438" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1438,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1244913,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://go.learndataengineering.com/ekwpanrm&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/222653196?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f7OP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png 424w, https://substackcdn.com/image/fetch/$s_!f7OP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png 848w, https://substackcdn.com/image/fetch/$s_!f7OP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png 1272w, https://substackcdn.com/image/fetch/$s_!f7OP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d28fe52-3b17-4229-ae40-e204ec3e98b3_1438x812.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In this video, Andreas walks through building a Data Quality Assistant, connected to Databricks and Google Drive, and using MPC and SDKs from Zapier. What stood out to me is that my data analysis workflows have changed drastically over the last few years. It almost happened imperceptibly.</p><p>Of course, I use Databricks daily, and I spend that time researching, answering questions, inspecting data, etc. In the past, of course, this was very time-consuming. Sure, I had the product and business knowledge, combined with the technical skills of SQL and Spark &#8230; I could, but not without a lot of work, build a needed dashboard or chart, research a topic, and find proof in the data. These days my workflow has changed.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fsubscribe%3F"><span>Subscribe now</span></a></p><blockquote><p><em>Now I use English + my domain knowledge to instruct Agents and research the data to find the needed answers, or to explore various possible avenues and results &#8230; and it can do it quickly, find answers I wasn&#8217;t looking for &#8230; and generally take *most of the technical burden off myself &#8230; leaving me in the role of researcher &#8230; with an assistant.</em></p></blockquote><p><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">If you are still skeptical about AI and LLMs, especially in a data context &#8230;&nbsp;</mark><a href="iframe.php?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DO7gVSDB44d0"><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">I highly recommend you watch this 1-hour+ free video from Andreas.</mark></a><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);"> </mark></p><p>Instead of your typical &#8220;Hello World,&#8221; or marketing drivel that takes up most of our feeds &#8230; this video is a refreshing approach to showing you generally what is possible in a simple and straightforward way. It&#8217;s not over the top; it&#8217;s just saying &#8230; &#8220;<em>Hey, this is the sort of thing that is possible now.</em>&#8221;</p><ul><li><p>At the end of the day, the particular tools are sorta irrelevant in some sense.</p></li></ul><div class="callout-block" data-callout="true"><p>I think the main takeaways for most data people should be simply &#8230; &#8220;There are new tools that have been created and are useful in the context of data &#8230; MPC servers, LLMs, Agents, RAG &#8230; can I use these new tools to extend my own capabilities and solve novel problems quickly?&#8221;</p></div><p>What you shouldn&#8217;t do is stick your head in the sand, decry the AI slop being produced &#8230; and ignore new technology. The technology and the data community will move on with or without you. It&#8217;s unfortunately brutal. Ok, if you are worried about AI slop, then you can, as usual, ensure the tools are doing things correctly and producing accurate results. <mark data-color="#fff2cc" style="background-color: rgb(255, 242, 204); color: rgb(0, 0, 0);">Just like you did when you were the one producing the code or writing the SQL.</mark></p><p>Imagine yourself as the Senior+ level engineer who has a junior working for you &#8230; just that it&#8217;s a digital agent and not flesh and blood. But you can approach it much the same way.</p><p>If you haven&#8217;t followed his work, <a href="iframe.php?url=https%3A%2F%2Flearndataengineering.com%2Fp%2Ffree-labs">he&#8217;s got a ton of free content and courses</a>; we all still need to be learning in this agentic world! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgo.learndataengineering.com%2Fd9fdrag5" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Tps!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png 424w, https://substackcdn.com/image/fetch/$s_!3Tps!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png 848w, https://substackcdn.com/image/fetch/$s_!3Tps!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png 1272w, https://substackcdn.com/image/fetch/$s_!3Tps!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213Tps%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png" width="1456" height="747" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:747,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1524688,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://go.learndataengineering.com/d9fdrag5&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/222653196?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3Tps!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png 424w, https://substackcdn.com/image/fetch/$s_!3Tps!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png 848w, https://substackcdn.com/image/fetch/$s_!3Tps!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png 1272w, https://substackcdn.com/image/fetch/$s_!3Tps!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1092b48b-5bfc-4451-8aa4-26e3b487a159_2252x1156.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/databricks-data-quality-mpc-server?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/databricks-data-quality-mpc-server?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdatabricks-data-quality-mpc-server%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Polars 2.0 vs DuckDB 2.0]]></title><description><![CDATA[who&#8217;s been up to what?]]></description><link>https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 02 Nov 2026 13:11:02 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21h84y%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21h84y%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h84y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!h84y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!h84y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!h84y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21h84y%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:2255545,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h84y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!h84y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!h84y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!h84y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84f7b7ab-3603-4a14-8846-694ca64b4591_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s been hard to ignore all the 2.0 chitter-chatter of late. I could stop doomscrolling LinkedIn looking for a human-written data take, but then I would have missed both the Polars and DuckDB announcements about their (supposed) big and exciting 2.0 releases. I&#8217;ve used both tools on and off, both personally and in production settings for a long time. I started out with Polars, even using it with Unity Catalog and Databricks long before it was cool. Of late (the last few years), I&#8217;ve since changed my allegiance from the Dark Lord to the Lord of Light &#8230; aka DuckDB. I even went as far as to rip Polars out of a number of production jobs and replace it with DuckDB because of stability issues.</p><div><hr></div><p><em>The best way to support this Substack is to click the links below and <a href="iframe.php?url=https%3A%2F%2Flakesentry.io%2F%3Futm_source%3Ddataengineeringcentral%26amp%3Butm_medium%3Dnewsletter%26amp%3Butm_campaign%3Dinfluencer-2026q4%26amp%3Butm_content%3Dbeach-slot-01">checkout todays sponsor, LakeSentry!</a> Sponsors like this are what make this content possible!</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="iframe.php?url=https%3A%2F%2Flakesentry.io%2F%3Futm_source%3Ddataengineeringcentral%26amp%3Butm_medium%3Dnewsletter%26amp%3Butm_campaign%3Dinfluencer-2026q4%26amp%3Butm_content%3Dbeach-slot-01" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_f7F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg 424w, https://substackcdn.com/image/fetch/$s_!_f7F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg 848w, https://substackcdn.com/image/fetch/$s_!_f7F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg 1272w, https://substackcdn.com/image/fetch/$s_!_f7F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21_f7F%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg" width="1456" height="234" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:234,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4612,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/svg+xml&quot;,&quot;href&quot;:&quot;https://lakesentry.io/?utm_source=dataengineeringcentral&amp;utm_medium=newsletter&amp;utm_campaign=influencer-2026q4&amp;utm_content=beach-slot-01&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_f7F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg 424w, https://substackcdn.com/image/fetch/$s_!_f7F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg 848w, https://substackcdn.com/image/fetch/$s_!_f7F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg 1272w, https://substackcdn.com/image/fetch/$s_!_f7F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe56642e1-47c0-4a1f-a9c0-c1531fc9cf0f_374x60.svg 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><div class="callout-block" data-callout="true"><p><strong>See your Databricks costs before the bill arrives</strong><br><br><a href="iframe.php?url=https%3A%2F%2Flakesentry.io%2F%3Futm_source%3Ddataengineeringcentral%26amp%3Butm_medium%3Dnewsletter%26amp%3Butm_campaign%3Dinfluencer-2026q4%26amp%3Butm_content%3Dbeach-slot-01">LakeSentry</a>&nbsp;shows you where your Databricks and cloud costs are going, and how to allocate them across cost centers - teams, departments, and users. It automatically highlights anomalies such as idle warehouses, orphaned clusters, and cost spikes, including Genie costs, Lakebase, and Databricks Apps. Built-in MCP allows you to explore costs using your favorite agent. <a href="iframe.php?url=https%3A%2F%2Flakesentry.io%2F%3Futm_source%3Ddataengineeringcentral%26amp%3Butm_medium%3Dnewsletter%26amp%3Butm_campaign%3Dinfluencer-2026q4%26amp%3Butm_content%3Dbeach-slot-01">LakeSentry</a> works across workspaces, accounts, and different clouds. Customers can connect their Databricks environments instantly - LakeSentry works either as a managed service or a Databricks App.</p><p></p><p><a href="iframe.php?url=https%3A%2F%2Flakesentry.io%2F%3Futm_source%3Ddataengineeringcentral%26amp%3Butm_medium%3Dnewsletter%26amp%3Butm_campaign%3Dinfluencer-2026q4%26amp%3Butm_content%3Dbeach-slot-01"><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">Connect your workspace and see your first insights today &#8594;</mark></a></p></div><div><hr></div><p>Anywho, I&#8217;m sure you&#8217;re tired of me beating that dead horse.</p><p>Today I would like to make the teeth grind and gnash in as many inner circles as possible. To me, no golden calf is holy or off limits. The plan is simple, like me.</p><ul><li><p>Review changes and improvements called out in 2.0 for both DuckDB and Polars.</p></li><li><p>Run my own hairbrained benchmark against datasets in Iceberg on S3 with lots of aggregation and window functions.</p><ul><li><p><em><mark data-color="#c9daf8" style="background-color: rgb(201, 218, 248); color: rgb(0, 0, 0);">Of course, using undersized compute with oversized data</mark></em></p></li></ul></li></ul><p>We shall throw off the shackles of those squirrely little marketers and their TCP benchmarks that have been buggered with. Who else is going to keep them all honest? Both of these tools, Polars and DuckDB, are used by legions of data folk for all sorts of work. <mark data-color="#ff9900" style="background-color: rgb(255, 153, 0); color: rgb(0, 0, 0);">It&#8217;s interesting to examine these big release changes, like 2.0, to see exactly what they are working on and what direction they are going.</mark></p><blockquote><p>It can tell us a lot about what the future holds and where smart people are placing their bets. All sorts of learnings for data professionals can be found. If we can identify where the winds of change are blowing these tools and their new features- we can get ahead of the pack, pick up and learn new skills now, and beat the rest of the lemmings to the punch. ex. learn Apache Arrow.</p></blockquote><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><div class="callout-block" data-callout="true"><p>FYI. I&#8217;m just an average engineer. I&#8217;m no expert in either DuckDB or Polars. Yes, I&#8217;ve used them in production for years. </p></div><div><hr></div><h2>Polars 2.0</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fpola.rs%2Fposts%2Frelease-polars-2%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e67t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png 424w, https://substackcdn.com/image/fetch/$s_!e67t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png 848w, https://substackcdn.com/image/fetch/$s_!e67t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png 1272w, https://substackcdn.com/image/fetch/$s_!e67t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21e67t%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png" width="1456" height="567" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:567,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:204867,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://pola.rs/posts/release-polars-2/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e67t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png 424w, https://substackcdn.com/image/fetch/$s_!e67t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png 848w, https://substackcdn.com/image/fetch/$s_!e67t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png 1272w, https://substackcdn.com/image/fetch/$s_!e67t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde936756-ac0a-442d-89b4-75f33e9c35f5_2156x840.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ok, so let&#8217;s get after it. I saw a few LinkedIn posts about the <a href="iframe.php?url=https%3A%2F%2Fpola.rs%2Fposts%2Frelease-polars-2%2F">Polars 2.0 release</a>, pretty much what I expected to see after having worked with Polars alot over the last many years. Again, I like to see what the powers that be say about any release, as those are the topics and direction they deem important and set the direction for future changes, most likely. So what can we infer from their posts?</p><ul><li><p><strong>Streaming engine default</strong> (<em>this has been in the works for a while</em>)</p><ul><li><p>Faster and doesn&#8217;t cause OOM</p></li></ul></li><li><p><strong>SQL as a first-class citizen</strong> (<em>kinda funny for a dataframe tool</em>)</p><ul><li><p>Necessary to go far in the data world, chasing DuckDB</p></li></ul></li><li><p><strong>Spill to disk support</strong></p><ul><li><p>DuckDB has been good at this; Polars was behind in the past.</p></li></ul></li><li><p>Classic &#8220;we are fast&#8221; benchmarks.</p><ul><li><p>I&#8217;m not sure anyone doubts that Polars is fast; if they do, they need their head checked.</p></li></ul></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Flnkd.in%2Fp%2Fgp4Mp7MG" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YJUg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png 424w, https://substackcdn.com/image/fetch/$s_!YJUg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png 848w, https://substackcdn.com/image/fetch/$s_!YJUg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png 1272w, https://substackcdn.com/image/fetch/$s_!YJUg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21YJUg%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png" width="1456" height="788" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:788,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:265353,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://lnkd.in/p/gp4Mp7MG&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YJUg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png 424w, https://substackcdn.com/image/fetch/$s_!YJUg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png 848w, https://substackcdn.com/image/fetch/$s_!YJUg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png 1272w, https://substackcdn.com/image/fetch/$s_!YJUg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d09a5-fc77-4a5f-9bcb-2437dff97a02_1496x810.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The whole streaming engine change is a good one; it&#8217;s been available for a long time via <code>Lazy</code> frames and <code>collect(streaming)</code> but has not been the default mode. What we would have known as <code>eagar</code> Polars before pulls everything into memory. With <code>streaming</code> a person can work on datasets larger than memory without worrying about OOM. </p><p>So this is <code>eagar</code> Polars &#8230;</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import polars as pl

df = pl.read_csv("data.csv")
df = df.with_columns(
    (pl.col("price") * 1.10).alias("new_price")
)
df.write_parquet("output.parquet")</code></pre></div><p>&#8230; and before <code>2.0</code> we could get <code>Lazy</code> and <code>Streaming</code>.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import polars as pl

df = pl.scan_csv("data.csv")
df = df.with_columns(
    (pl.col("price") * 1.10).alias("new_price")
)
df.collect(streaming=True).write_parquet("output.parquet")</code></pre></div><p>Now this is the default with <code>Lazy</code> and <code>collect()</code> , this is good for a lot of data folk who use Polars, maybe switch from something like Pandas, and don&#8217;t really take the time to understand the features of the tool, and that <code>lazy</code> and <code>eagar</code> is even a thing.</p><p>The next change is probably one that should have been done so long ago. It&#8217;s always been a major issue for me when testing and using Polars on very large datasets on a single-node commodity machine. They were behind DuckDB on this feature, and now have finally caught up. <mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">Spill to Disk.</mark></p><div class="pullquote"><p>&#8220;Out-of-core (spill to disk) is now enabled by default. It starts spilling at ~80% of RAM (this may need tuning). Operations that support out-of-core at this moment (sort, window functions, many expressions) can now start spilling to disk to finish a query.&#8221; - <a href="iframe.php?url=https%3A%2F%2Fpola.rs%2Fposts%2Frelease-polars-2%2F">Polars</a></p></div><p>This feature is a big deal for Polars; it should go a long way toward making it more stable in large production environments where data pushes Polars to the max.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fpolars-20-vs-duckdb-20%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p><h4>Kinda funny, SQL as a first-class citizen in Polars.</h4><p>Next, I found this so funny &#8230; just because. I mean, it&#8217;s not Polars fault that the data community is married to SQL and will never let it go. <a href="iframe.php?url=https%3A%2F%2Fwww.confessionsofadataguy.com%2Fwhy-you-should-replace-pandas-with-polars%2F">Polars is now the de facto DataFrame tool to replace old Pandas</a>. But you just can&#8217;t have SQL support. Especially with AI writing all the code these days, data analysts and the like are more likely to know and learn SQL first before they get into DataFrame operations.</p><blockquote><p>This is a very smart move by Polars.</p></blockquote><p>To use SQL in Polars, you have two options: SQLContext or .sql on an existing DataFrame.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;sql&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-sql">import polars as pl

df = pl.scan_csv("sales.csv")
ctx = pl.SQLContext(sales=df)
result = ctx.execute("""
    SELECT
        customer_id,
        SUM(amount) AS total_spent,
        COUNT(*) AS orders
    FROM sales
    WHERE amount &gt; 100
    GROUP BY customer_id
    HAVING COUNT(*) &gt; 5
    ORDER BY total_spent DESC
""")
result.sink_parquet("output.parquet")</code></pre></div><p>&#8230; or</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import polars as pl

sales = pl.DataFrame({
    "customer_id": [1, 1, 2, 2, 3],
    "amount": [100, 200, 300, 400, 500]
})
result = pl.sql("""
    SELECT
        customer_id,
        SUM(amount) AS total_spent
    FROM sales
    GROUP BY customer_id
    ORDER BY total_spent DESC
""")
result.collect()</code></pre></div><p>Also, Polars, being a Rust-based tool in the backend, they also moving towards having a &#8220;strict&#8221; tool where they fail fast for obvious errors. Example, <code>collect_schema()</code> will &#8220;<em><mark data-color="#f6b26b" style="background-color: rgb(246, 178, 107); color: rgb(0, 0, 0);">resolves types and catches schema-level mismatches without materializing any data</mark></em>&#8221; for example.</p><blockquote><p>In summary, it appears Polars 2.0 from my point of view is just about hardening the core of how the tool works and performs. This is work that has been sorely needed. Sure we like fast tools, but we need reliable tools. Default <code>streaming</code> and <code>out of core</code> spilling to disk, along with first class <code>SQL</code> support are exactly the kind of things that will take Polars to the next level.</p></blockquote><p>Polars has been the premier single-core dataframe tool for years; these changes solidify its spot in the data processing pantheon and will only lead to more adoption and larger use-cases.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fpolars-20-vs-duckdb-20%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><h2>DuckDB 2.0</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fduckdb.org%2F2026%2F10%2F21%2Fannouncing-duckdb-200" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!saGt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png 424w, https://substackcdn.com/image/fetch/$s_!saGt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png 848w, https://substackcdn.com/image/fetch/$s_!saGt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png 1272w, https://substackcdn.com/image/fetch/$s_!saGt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21saGt%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png" width="1456" height="567" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1742874-965e-4dc2-955f-c93a3947869a_2156x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:567,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157920,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://duckdb.org/2026/10/21/announcing-duckdb-200&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!saGt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png 424w, https://substackcdn.com/image/fetch/$s_!saGt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png 848w, https://substackcdn.com/image/fetch/$s_!saGt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png 1272w, https://substackcdn.com/image/fetch/$s_!saGt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1742874-965e-4dc2-955f-c93a3947869a_2156x840.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ok, so now we get to flip the coin to the other side and see what is coming forth in the tool that has taken the data world by storm, even going so far as to get&nbsp;<a href="iframe.php?url=https%3A%2F%2Fwww.confessionsofadataguy.com%2Fduckdb-labs-acquired-by-aws-what-does-it-mean%2F">DuckDB Labs acquired by AWS,</a>&nbsp;which is quite amazing. I&#8217;m looking forward to seeing what is in this new release, if it&#8217;s just the same old stuff, or something new and exciting &#8230; giving us a taste of what the future might hold.</p><p>Honestly, it&#8217;s hard for me to imagine what they could possibly be adding to DuckDB. The extensions are already complete and all-encompassing; the speed at which DuckDB can process data is already top-notch. They are also known to be very stable and very developer-friendly; what else can they really do?</p><blockquote><p>Ok, let&#8217;s just see what THEY quote as the top changes in this Cinnamon Teal release. This is important because it tells us what they (the project) care about, and the direction they are taking the tool.</p></blockquote><div class="callout-block" data-callout="true"><p>&#8220;&#8230; <em><strong>Quack protocol, asynchronous I/O, a first-class </strong></em><code>VARIANT</code><em><strong> type, agent mode, triggers, an extensible SQL parser &#8230;&#8221; </strong></em></p></div><p>Ok, so I&#8217;m not too surprised here with the initial list, and what they put on the FRONT of the list. <mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">Quack protocol. </mark>Historically, DuckDB has been an embedded database, an in-process tool to work on data. You run it inside Python, Rust, or another application or data pipeline. It&#8217;s been that perfect ad hoc query tool, and has been slowly working its way into being the next SQLite-type tool: bulletproof, fast, easy to use and install.</p><p>DuckDB 2.0 expands this model with the Quack protocol, which allows DuckDB instances to communicate over a network.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fduckdb.org%2Fquack%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GA87!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png 424w, https://substackcdn.com/image/fetch/$s_!GA87!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png 848w, https://substackcdn.com/image/fetch/$s_!GA87!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png 1272w, https://substackcdn.com/image/fetch/$s_!GA87!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21GA87%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png" width="1456" height="719" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:719,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:273647,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://duckdb.org/quack/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GA87!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png 424w, https://substackcdn.com/image/fetch/$s_!GA87!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png 848w, https://substackcdn.com/image/fetch/$s_!GA87!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png 1272w, https://substackcdn.com/image/fetch/$s_!GA87!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9fca331-4034-4d3f-9b47-8f043603c78d_2348x1160.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>DuckDB is clearly moving toward a larger audience with features that let it become more than a single-node, in-process database &#8230; it works great for that, the best &#8230; but it&#8217;s obvious where they think the future lies. This probably has something to do with AI and Agents, but also AWS and going bigger. The release notes really focus on this new idea they are introducing to the DuckDB community &#8230; <mark data-color="#ea9999" style="background-color: rgb(234, 153, 153); color: rgb(0, 0, 0);">DuckDB as a Server.</mark></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fduckdb.org%2F2026%2F10%2F21%2Fannouncing-duckdb-200" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VNuc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png 424w, https://substackcdn.com/image/fetch/$s_!VNuc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png 848w, https://substackcdn.com/image/fetch/$s_!VNuc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!VNuc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21VNuc%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png" width="1354" height="1014" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1014,&quot;width&quot;:1354,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:188881,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://duckdb.org/2026/10/21/announcing-duckdb-200&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VNuc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png 424w, https://substackcdn.com/image/fetch/$s_!VNuc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png 848w, https://substackcdn.com/image/fetch/$s_!VNuc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!VNuc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fed1dc3-2015-4478-9d3a-f5660d6c9011_1354x1014.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">source - <a href="iframe.php?url=https%3A%2F%2Fduckdb.org%2F2026%2F10%2F21%2Fannouncing-duckdb-200">DuckDB release notes</a></figcaption></figure></div><p>Wow, this is obviously worthy of a number of blog posts in itself, which I will surely do. I like this idea of DuckDB as a server. We will return to this in future blogs.</p><blockquote><p><em><strong>Next, they did something which I think is core and fundemental to the way we deal with data today.</strong></em></p></blockquote><p>Where is all our data stored these days? The Lakehouse, of course &#8230; on cloud storage systems like S3. Because of this, when it comes to queries and data pipelines &#8230; anything a tool can do to improve network reads and how that data is handled across the network and interacts with the rest of the pipeline &#8230; is a huge win. This is why DuckDB released better &#8220;<a href="iframe.php?url=https%3A%2F%2Fduckdb.org%2Fdocs%2F2.0%2Fdata%2Fio.html"><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);">asynchronous I/O</mark></a><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);"> for reading Parquet and CSV files.</mark>&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21X4U-%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X4U-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png 424w, https://substackcdn.com/image/fetch/$s_!X4U-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png 848w, https://substackcdn.com/image/fetch/$s_!X4U-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png 1272w, https://substackcdn.com/image/fetch/$s_!X4U-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21X4U-%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png" width="1416" height="894" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:894,&quot;width&quot;:1416,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85202,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X4U-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png 424w, https://substackcdn.com/image/fetch/$s_!X4U-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png 848w, https://substackcdn.com/image/fetch/$s_!X4U-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png 1272w, https://substackcdn.com/image/fetch/$s_!X4U-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbf5a4ae-5c39-4864-937c-e23114a0840e_1416x894.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="iframe.php?url=https%3A%2F%2Fduckdb.org%2F2026%2F10%2F21%2Fannouncing-duckdb-200%23asynchronous-io">source - DuckDB release notes</a></figcaption></figure></div><p>This only bodes well for DuckDB, an already fast tool. Next, they released full support for <code>VARIANT</code> data types. This is no surprise; in the age of the Agent &#8230; we have seen all sorts of data types like this come into play in the Lakehouse formats. The days when tabular data reigned supreme might not be dead, but times are changing, and first-class support for this ragged and semi-structured sort of data is a must.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21R9Xw%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R9Xw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png 424w, https://substackcdn.com/image/fetch/$s_!R9Xw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png 848w, https://substackcdn.com/image/fetch/$s_!R9Xw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png 1272w, https://substackcdn.com/image/fetch/$s_!R9Xw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21R9Xw%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png" width="1346" height="864" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:864,&quot;width&quot;:1346,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134341,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R9Xw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png 424w, https://substackcdn.com/image/fetch/$s_!R9Xw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png 848w, https://substackcdn.com/image/fetch/$s_!R9Xw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png 1272w, https://substackcdn.com/image/fetch/$s_!R9Xw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f555d3-8a45-482d-a3fc-73a2825a97ad_1346x864.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="iframe.php?url=https%3A%2F%2Fduckdb.org%2F2026%2F10%2F21%2Fannouncing-duckdb-200%23asynchronous-io">source - DuckDB release notes</a></figcaption></figure></div><p>DuckDB is just covering all its bases.</p><p>Then it appears that DuckDB is still pulled into that tractor beam of SQL Server &#8230; even though they should have fought it and said no because it&#8217;s a bad idea &#8230; those nasty <code>TRIGGERS</code> have been added into DuckDB 2.0. Hey, I get it, they can be useful, and all the SQL hobbits probably have been licking their lips for this crap. I&#8217;m just old, grumpy, and scarred from by days of yore&#8217; when SQL Server was the Data Warehouse. Stupid triggers.</p><p>Well, DuckDB has fallen prey to old evils; you can now <code>TRIGGER</code> your way into oblivion.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21AlCr%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AlCr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png 424w, https://substackcdn.com/image/fetch/$s_!AlCr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png 848w, https://substackcdn.com/image/fetch/$s_!AlCr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png 1272w, https://substackcdn.com/image/fetch/$s_!AlCr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21AlCr%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png" width="1372" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1372,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70706,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AlCr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png 424w, https://substackcdn.com/image/fetch/$s_!AlCr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png 848w, https://substackcdn.com/image/fetch/$s_!AlCr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png 1272w, https://substackcdn.com/image/fetch/$s_!AlCr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F595cc88d-fab2-4437-a1cd-e4220152231e_1372x490.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="iframe.php?url=https%3A%2F%2Fduckdb.org%2F2026%2F10%2F21%2Fannouncing-duckdb-200%23asynchronous-io">source - DuckDB release note</a></figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Benchmarking DuckDB 2.0 vs Polars 2.0</h3><p>Look, I know this is what you little beggars have been waiting for this whole time. You know you like it; I know you do. Little benchmarking of our own to get those angry zealots frothing at the mouth and howling at the moon. Don&#8217;t say I didn&#8217;t warn you. We will see what we will see. No slippery TCP benchmarks here, just real life stuff.</p><p>What I will do is spin up a whopping 2GB node on <a href="iframe.php?url=https%3A%2F%2Fcloud.linode.com%2F">Linode/Akamai</a> (<em>highly suggest if you&#8217;ve never used</em>), then we will put a bunch of CSV data into S3 (<em>a lot more than 2GB</em>) and come up with some query to run that has to do a ton of aggregation. We will do this with both Polars 2.0 and DuckDB 2.0. I don&#8217;t really care if you finish faster; they are both fast tools &#8230; I just want to see if both hold up to their 2.0 claims. In DuckDB&#8217;s case, efficient S3 network I/O (they already spill to disk, etc.), and in Polars case &#8230; their default streaming and spill-to-disk ability.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21xvUq%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xvUq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png 424w, https://substackcdn.com/image/fetch/$s_!xvUq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png 848w, https://substackcdn.com/image/fetch/$s_!xvUq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png 1272w, https://substackcdn.com/image/fetch/$s_!xvUq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21xvUq%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png" width="1456" height="595" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:595,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94835,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xvUq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png 424w, https://substackcdn.com/image/fetch/$s_!xvUq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png 848w, https://substackcdn.com/image/fetch/$s_!xvUq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png 1272w, https://substackcdn.com/image/fetch/$s_!xvUq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3d6c55f-80d5-4d13-8044-9fedc273e4f0_1610x658.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We will use the Backblaze hard drive dataset, about <code>23</code> GB of CSV files on S3 &#8230; see if we can&#8217;t choke out Polars or DuckDB.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.backblaze.com%2Fcloud-storage%2Fresources%2Fhard-drive-test-data" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3btK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png 424w, https://substackcdn.com/image/fetch/$s_!3btK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png 848w, https://substackcdn.com/image/fetch/$s_!3btK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png 1272w, https://substackcdn.com/image/fetch/$s_!3btK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213btK%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png" width="1456" height="241" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:241,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57096,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.backblaze.com/cloud-storage/resources/hard-drive-test-data&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3btK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png 424w, https://substackcdn.com/image/fetch/$s_!3btK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png 848w, https://substackcdn.com/image/fetch/$s_!3btK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png 1272w, https://substackcdn.com/image/fetch/$s_!3btK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc5cce97-ddd1-4508-8e67-30173de8f50f_1656x274.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21kANK%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kANK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png 424w, https://substackcdn.com/image/fetch/$s_!kANK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png 848w, https://substackcdn.com/image/fetch/$s_!kANK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png 1272w, https://substackcdn.com/image/fetch/$s_!kANK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21kANK%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png" width="1456" height="584" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:584,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:305277,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kANK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png 424w, https://substackcdn.com/image/fetch/$s_!kANK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png 848w, https://substackcdn.com/image/fetch/$s_!kANK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png 1272w, https://substackcdn.com/image/fetch/$s_!kANK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627e0de7-823f-440d-b100-67bd0b2b599d_2982x1196.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now I&#8217;m not going to give either tool any help at all. I will install them on this small Linux box with <code>uv</code> and then just run the scripts; what happens is what happens. If one, or either of them fails, I will keep sizing up the Linode by 2GB a bump, and see at what point it can finish.</p><blockquote><p>182 CSV files should give &#8216;em a run for the money.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21ua69%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ua69!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png 424w, https://substackcdn.com/image/fetch/$s_!ua69!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png 848w, https://substackcdn.com/image/fetch/$s_!ua69!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png 1272w, https://substackcdn.com/image/fetch/$s_!ua69!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21ua69%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png" width="1456" height="584" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:584,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:356305,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ua69!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png 424w, https://substackcdn.com/image/fetch/$s_!ua69!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png 848w, https://substackcdn.com/image/fetch/$s_!ua69!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png 1272w, https://substackcdn.com/image/fetch/$s_!ua69!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4da19a79-27eb-4bcb-a055-3352a4306faa_2982x1196.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ok, over to the code. The data itself is just a bunch of hard drive failure indicators from a bunch of data centers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Wq3a%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wq3a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png 424w, https://substackcdn.com/image/fetch/$s_!Wq3a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png 848w, https://substackcdn.com/image/fetch/$s_!Wq3a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png 1272w, https://substackcdn.com/image/fetch/$s_!Wq3a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Wq3a%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png" width="1456" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:331294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wq3a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png 424w, https://substackcdn.com/image/fetch/$s_!Wq3a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png 848w, https://substackcdn.com/image/fetch/$s_!Wq3a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png 1272w, https://substackcdn.com/image/fetch/$s_!Wq3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e717ad-e5f4-4176-b46b-06263f09ff17_1798x1088.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Just a few command on our Linux box should do the trick. Python 3.12 is good enough eh. Then we get <code>uv</code> onboard.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">root@localhost:~# python3 --version
Python 3.12.3
&gt;&gt; curl -LsSf https://astral.sh/uv/install.sh | sh
&gt;&gt; uv init bigtest
&gt;&gt; uv add duckdb==2.0 polars==2.0 boto3 fsspec s3fs psutil</code></pre></div><p>Easy peasy lemon squeezy. Now for the code I hope can at least choke one of the tools, put them hobbits back in their place. Nothing like 23GB of data on a 2GB machine over the network! We shall see, we shall see! I&#8217;m going to be amazed if these tools can get it done; the query isn&#8217;t exactly easy.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fsubscribe%3F"><span>Subscribe now</span></a></p><div><hr></div><h4>DuckDB 2.0 first!</h4><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import duckdb
import time
import psutil
import os

SOURCE = "s3://confessions-of-a-data-guy/testing-data/*.csv"

OUTPUT = (
    "s3://confessions-of-a-data-guy/"
    "benchmark-results/duckdb/results.csv"
)

start = time.perf_counter()

con = duckdb.connect()

con.execute("INSTALL httpfs;")
con.execute("LOAD httpfs;")

con.execute("""
    CREATE OR REPLACE SECRET benchmark_s3 (
        TYPE s3,
        PROVIDER credential_chain
    );
""")

con.execute("SET temp_directory = '/tmp/duckdb_benchmark';")

query = f"""
COPY (
    WITH drive_data AS (
        SELECT
            CAST(date AS DATE) AS date,
            serial_number,
            model,
            datacenter,
            CAST(failure AS INTEGER) AS failure,
            TRY_CAST(smart_9_raw AS DOUBLE) AS power_on_hours,
            TRY_CAST(smart_5_raw AS BIGINT) AS reallocated_sectors,
            TRY_CAST(smart_197_raw AS BIGINT) AS pending_sectors

        FROM read_csv(
            '{SOURCE}',
            header = true,
            all_varchar = true,
            union_by_name = true
        )

        WHERE serial_number IS NOT NULL
          AND model IS NOT NULL
          AND datacenter IS NOT NULL
    ),

    windowed AS (
        SELECT
            *,
            LAG(power_on_hours) OVER (
                PARTITION BY serial_number
                ORDER BY date
            ) AS previous_power_on_hours

        FROM drive_data
    ),

    analytics AS (
        SELECT
            date,
            datacenter,
            model,
            COUNT(*) AS drive_count,
            SUM(failure) AS failure_count,
            AVG(power_on_hours) AS avg_power_on_hours,
            AVG(
                power_on_hours - previous_power_on_hours
            ) AS avg_daily_power_on_change,
            SUM(
                CASE
                    WHEN reallocated_sectors &gt; 0 THEN 1
                    ELSE 0
                END
            ) AS drives_with_reallocated_sectors,

            SUM(
                CASE
                    WHEN pending_sectors &gt; 0 THEN 1
                    ELSE 0
                END
            ) AS drives_with_pending_sectors
        FROM windowed
        GROUP BY
            date,
            datacenter,
            model
    )

    SELECT *
    FROM analytics

    ORDER BY
        date,
        datacenter,
        model

) TO '{OUTPUT}' (
    FORMAT CSV,
    HEADER TRUE
);
"""

con.execute(query)

elapsed = time.perf_counter() - start

print(f"DuckDB 2.0 elapsed: {elapsed:.2f} seconds")
print(f"Output: {OUTPUT}")

con.close()</code></pre></div><p>Any guesses?</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">uv run benchmark_duckdb.py</code></pre></div><p>Well, it&#8217;s working hard according to Linode! Good to see that Disk in use, means we&#8217;ve got spill going on!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Mm6_%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mm6_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png 424w, https://substackcdn.com/image/fetch/$s_!Mm6_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png 848w, https://substackcdn.com/image/fetch/$s_!Mm6_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png 1272w, https://substackcdn.com/image/fetch/$s_!Mm6_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Mm6_%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png" width="1456" height="776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:213240,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Mm6_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png 424w, https://substackcdn.com/image/fetch/$s_!Mm6_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png 848w, https://substackcdn.com/image/fetch/$s_!Mm6_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png 1272w, https://substackcdn.com/image/fetch/$s_!Mm6_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66c113b-019b-42bd-a18e-ee0d4001c19c_2528x1348.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Hot-diggy-dog! DuckDB 2.0 pulled through! I had my doubts cooking dinner for the family and keeping one eye pointed at the terminal &#8230; I was worried for a minute or two!</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">DuckDB 2.0 elapsed: 837.32 seconds
Output: s3://confessions-of-a-data-guy/benchmark-results/duckdb/results.csv</code></pre></div><p>That is almost 14 minutes, but dang, starved for memory and CPU, to be able to process that much data over the network and then run the analytics! What a tool. Dang.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fpolars-20-vs-duckdb-20%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h4>Polars 2.0 second!</h4><p>Ok, so here it goes. Got any guesses? I do. But I&#8217;m also cautiously optimistic that the new spill-to-disk features will finally throw those nasty OOM errors to the wind! I&#8217;ve been waiting for this moment since I started using Polars so many years ago!</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import polars as pl
import time

SOURCE = "s3://confessions-of-a-data-guy/testing-data/*.csv"

OUTPUT = (
    "s3://confessions-of-a-data-guy/"
    "benchmark-results/polars_lazy/results.csv"
)

start = time.perf_counter()

# Lazy S3 CSV scan
lf = pl.scan_csv(
    SOURCE,
    infer_schema=False,
    storage_options={
        "aws_region": "us-east-1"
    }
)

lf = (
    lf.select(
        pl.col("date").str.to_date().alias("date"),
        pl.col("serial_number"),
        pl.col("model"),
        pl.col("datacenter"),
        pl.col("failure")
          .cast(pl.Int32, strict=False)
          .alias("failure"),
        pl.col("smart_9_raw")
          .cast(pl.Float64, strict=False)
          .alias("power_on_hours"),
        pl.col("smart_5_raw")
          .cast(pl.Int64, strict=False)
          .alias("reallocated_sectors"),
        pl.col("smart_197_raw")
          .cast(pl.Int64, strict=False)
          .alias("pending_sectors")
    )
    .filter(
        pl.col("serial_number").is_not_null()
        &amp; pl.col("model").is_not_null()
        &amp; pl.col("datacenter").is_not_null()
    )
)

lf = (
    lf.sort(["serial_number", "date"])
    .with_columns(
        pl.col("power_on_hours")
          .shift(1)
          .over("serial_number")
          .alias("previous_power_on_hours")
    )
)

lf = (
    lf.group_by(
        ["date", "datacenter", "model"]
    )
    .agg(
        pl.len().alias("drive_count"),
        pl.col("failure")
          .sum()
          .alias("failure_count"),
        pl.col("power_on_hours")
          .mean()
          .alias("avg_power_on_hours"),
        (
            pl.col("power_on_hours")
            - pl.col("previous_power_on_hours")
        )
        .mean()
        .alias("avg_daily_power_on_change"),
        (
            pl.col("reallocated_sectors") &gt; 0
        )
        .sum()
        .alias("drives_with_reallocated_sectors"),
        (
            pl.col("pending_sectors") &gt; 0
        )
        .sum()
        .alias("drives_with_pending_sectors")
    )
    .sort(["date", "datacenter", "model"])
)

lf.sink_csv(
    OUTPUT,
    engine="streaming"
)

elapsed = time.perf_counter() - start

print(f"Polars 2.0 LazyFrame elapsed: {elapsed:.2f} seconds")
print(f"Output: {OUTPUT}")</code></pre></div><p>Man, we are asking alot of those two work-horse engines today, aren&#8217;t we? It just shows how far we have come in the data world over the decades. I remember the days when your only options were Pandas, Spark, or vanilla Python with some NumPy. Or, more usually, push the data to some RDBMS via ODBC and let that engine take over. Those were the days.</p><blockquote><p><mark data-color="#f9cb9c" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">Ahh &#8230; I figured! Dang Polars 2.0 &#8230; you failed me!</mark></p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">root@localhost:~/bigtest# uv run benchmark_polars_lazy.py 

root@localhost:~/bigtest# </code></pre></div><p>OOM most likely. Bugger all, I seriously had my hopes up for this. Let&#8217;s do another Linode and give &#8216;er some more juice &#8230; see if it can get the job done. We will take it up to <code>4GB</code> and see if that is enough for Polars not to choke.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NsJZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png 424w, https://substackcdn.com/image/fetch/$s_!NsJZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png 848w, https://substackcdn.com/image/fetch/$s_!NsJZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png 1272w, https://substackcdn.com/image/fetch/$s_!NsJZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21NsJZ%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png" width="1456" height="244" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:244,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61034,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NsJZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png 424w, https://substackcdn.com/image/fetch/$s_!NsJZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png 848w, https://substackcdn.com/image/fetch/$s_!NsJZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png 1272w, https://substackcdn.com/image/fetch/$s_!NsJZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e197f3-5ce7-406a-98d3-2a9770bb902b_2272x380.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Ok, so now Polars has an unfair advantage over DuckDB 2.0, twice the memory and CPU.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21h4RX%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h4RX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png 424w, https://substackcdn.com/image/fetch/$s_!h4RX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png 848w, https://substackcdn.com/image/fetch/$s_!h4RX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png 1272w, https://substackcdn.com/image/fetch/$s_!h4RX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21h4RX%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png" width="798" height="562" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1759a6cd-8371-4413-9df8-84e43913609f_798x562.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:562,&quot;width&quot;:798,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53600,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h4RX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png 424w, https://substackcdn.com/image/fetch/$s_!h4RX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png 848w, https://substackcdn.com/image/fetch/$s_!h4RX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png 1272w, https://substackcdn.com/image/fetch/$s_!h4RX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1759a6cd-8371-4413-9df8-84e43913609f_798x562.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Son of a weasel! Still can&#8217;t do it!</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">root@localhost:~/bigtest# uv run benchmark_polars_lazy.py 
root@localhost:~/bigtest# </code></pre></div><p>Blasted Gandalf&#8217;s beard, now let&#8217;s go up to 8GB and see if Polars 2.0 can come through for us at all.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21PlFN%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PlFN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png 424w, https://substackcdn.com/image/fetch/$s_!PlFN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png 848w, https://substackcdn.com/image/fetch/$s_!PlFN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png 1272w, https://substackcdn.com/image/fetch/$s_!PlFN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21PlFN%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png" width="922" height="598" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:598,&quot;width&quot;:922,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59392,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PlFN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png 424w, https://substackcdn.com/image/fetch/$s_!PlFN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png 848w, https://substackcdn.com/image/fetch/$s_!PlFN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png 1272w, https://substackcdn.com/image/fetch/$s_!PlFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98c2abac-14fa-4f04-ad70-09dd6432859a_922x598.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Dang, not even that was enough.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">root@localhost:~/bigtest# uv run benchmark_polars_lazy.py 
root@localhost:~/bigtest# </code></pre></div><p>Clearly, something about the query means Polars can&#8217;t stream and spill to disk. Y&#8217;all have no idea how disappointed I am. Polars has been doing this for years &#8230; leaving me in a lurch. Dang it! Heck, that spill-to-disk had me so excited.</p><p>Well, this explains it &#8230; reading the release notes more closely&#8230; Polars doesn&#8217;t support spill-to-disk on any <code>groupBy</code>. Welp, there goes 90% of data users who would use this functionality; <mark data-color="#ead1dc" style="background-color: rgb(234, 209, 220); color: rgb(0, 0, 0);">back to DuckDB we go!</mark></p><div class="pullquote"><p>&#8220;Out-of-core (spill to disk) is now enabled by default. It starts spilling at ~80% of RAM (this may need tuning). Operations that support out-of-core at this moment (sort, window functions, many expressions) can now start spilling to disk to finish a query. The default disk budget is 64GB. In the coming time, we will enable out-of-core for joins and group-bys as well.</p><p>These two changes will make Polars much more resilient in high-memory workloads for casual data practitioners. And with out-of-core <code>join</code> and <code>group-by</code> on our roadmap, this resilience will improve even more.&#8221; <br>- <a href="iframe.php?url=https%3A%2F%2Fpola.rs%2Fposts%2Frelease-polars-2%2F">Polars release notes</a></p></div><p>I personally can&#8217;t think of a more important spill-to-disk feature than a <code>groupBy</code> , but whatever.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fpolars-20-vs-duckdb-20%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h3>DuckDB 2.0 vs Polars 2.0 in review.</h3><p>Well, we had fun, didn&#8217;t we? For some reason, this stuff never seems to disappoint; always a good time. I&#8217;m pretty pleased overall when I look at where these tools are generally going in the future. It&#8217;s important to read between the lines to figure out where the projects are headed and what they deem as important. It&#8217;s interesting to watch Polars try to catch up to DuckDB in terms of being able to work on large datasets that need to spill to disk and stream to finish on a single-core machine. </p><blockquote><p>It seems Polars is trying to become more stable and able to have that reputation, like DuckDB, that it can eat anything and not break. Clearly Polars has some work to do yet there. Hey, at least that got the first-class SQL going for them now!</p></blockquote><p>DuckDB 2.0 is very interesting; they&#8217;ve been chasing this Client/Server architecture for a little bit, and it&#8217;s super interesting to see the Duck transition to this sort of architecture. They have conquered every other data challenge and become practically a household data name. It makes one wonder, with AWS involved, where it will go in the future.</p><p>I&#8217;m super glad we took the time to go through both released AND throw some work at em. There is plenty to still learn and play with these days; no need to think that AI is taking over your job. Being creative and staying up-to-date with what is changing will never lead you astray!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>UPDATE: This isn&#8217;t DuckDB 2.0 vs Polars 2.1</h3><p>Of course, a week after I did my testing &#8230; Polars 2.1 was released, and I saw a little tidbit: &#8220;<em><a href="iframe.php?url=https%3A%2F%2Flnkd.in%2Fp%2FeQJwDGiJ">spill to disk for group-by and window functions</a></em><a href="iframe.php?url=https%3A%2F%2Flnkd.in%2Fp%2FeQJwDGiJ">.</a>&#8221; Well, it isn&#8217;t really fair for me to compare Polars 2.1 to DuckDB 2.0, but I was so darn unhappy that Polars couldn&#8217;t operate on the dataset no matter how much RAM I gave it that I had no choice but to test it again.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Flnkd.in%2Fp%2FeQJwDGiJ" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jUL_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png 424w, https://substackcdn.com/image/fetch/$s_!jUL_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png 848w, https://substackcdn.com/image/fetch/$s_!jUL_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png 1272w, https://substackcdn.com/image/fetch/$s_!jUL_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jUL_%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png" width="1122" height="948" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:948,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:238915,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://lnkd.in/p/eQJwDGiJ&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jUL_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png 424w, https://substackcdn.com/image/fetch/$s_!jUL_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png 848w, https://substackcdn.com/image/fetch/$s_!jUL_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png 1272w, https://substackcdn.com/image/fetch/$s_!jUL_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ce754b-8e90-4a39-9587-b776eae8d73e_1122x948.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Back to ye&#8217; ole&#8217; <code>2GB</code> Lindoe machine.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">&gt;&gt; curl -LsSf https://astral.sh/uv/install.sh | sh
&gt;&gt; uv init bigtest
&gt;&gt; uv add polars==2.1 boto3 fsspec s3fs psutil
...
&gt;&gt; root@localhost:~/bigtest# uv run bugger_all.py </code></pre></div><blockquote><p>Well, Polars didn&#8217;t lie about 2.1 feature upgrades!</p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">Polars 2.0 LazyFrame elapsed: 438.47 seconds
Output: s3://confessions-of-a-data-guy/benchmark-results/polars_lazy/results.csv</code></pre></div><p>I hate to say it, but it&#8217;s twice as fast as DuckDB!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vZK3%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vZK3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png 424w, https://substackcdn.com/image/fetch/$s_!vZK3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png 848w, https://substackcdn.com/image/fetch/$s_!vZK3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png 1272w, https://substackcdn.com/image/fetch/$s_!vZK3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vZK3%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:122257,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/221499431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vZK3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png 424w, https://substackcdn.com/image/fetch/$s_!vZK3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png 848w, https://substackcdn.com/image/fetch/$s_!vZK3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png 1272w, https://substackcdn.com/image/fetch/$s_!vZK3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92bb32df-dc5e-44f0-ab2b-0ce306ace06f_1536x864.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/polars-20-vs-duckdb-20?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fpolars-20-vs-duckdb-20%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div id="youtube2-2dbFPJnbVYo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;2dbFPJnbVYo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="iframe.php?url=https%3A%2F%2Fwww.youtube-nocookie.com%2Fembed%2F2dbFPJnbVYo%3Frel%3D0%26amp%3Bautoplay%3D0%26amp%3Bshowinfo%3D0%26amp%3Benablejsapi%3D0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div>]]></content:encoded></item><item><title><![CDATA[AI Provider support in Apache Airflow.]]></title><description><![CDATA[LLM and Agents in Airflow]]></description><link>https://dataengineeringcentral.substack.com/p/ai-provider-support-in-apache-airflow</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/ai-provider-support-in-apache-airflow</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 26 Oct 2026 13:31:03 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Bpv9%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Bpv9%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bpv9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!Bpv9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!Bpv9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!Bpv9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Bpv9%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2057023,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218835190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Bpv9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!Bpv9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!Bpv9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!Bpv9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8aa2fd-81d7-4914-ae44-6d238d8a3556_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Firstly, I must tell you that I have mixed feelings about this; maybe it&#8217;s my crusty old age coming out to haunt me. We surely must accept that AI is here to stay, and it&#8217;s amazing the places it manages to wiggle and squirm its way into. That being said, it&#8217;s not like we could actually keep a #blessed tool like Apache Airflow clean and free from agentic sugar that keeps getting sprinkled into every possible corner. But here we are, and now it&#8217;s official; <a href="iframe.php?url=https%3A%2F%2Fairflow.apache.org%2Fblog%2Fcommon-ai-provider%2F">Apache Airflow supports LLM calls and Agentic actions.</a> So, since the data boat has landed yet once again on this LLM shore, I will do my best to bring you all up to speed on the new LLM operators that now have first-class support in Airflow.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fairflow.apache.org%2Fblog%2Fcommon-ai-provider%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DjHi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png 424w, https://substackcdn.com/image/fetch/$s_!DjHi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png 848w, https://substackcdn.com/image/fetch/$s_!DjHi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png 1272w, https://substackcdn.com/image/fetch/$s_!DjHi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21DjHi%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png" width="1456" height="499" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:499,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114825,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://airflow.apache.org/blog/common-ai-provider/&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218835190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DjHi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png 424w, https://substackcdn.com/image/fetch/$s_!DjHi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png 848w, https://substackcdn.com/image/fetch/$s_!DjHi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png 1272w, https://substackcdn.com/image/fetch/$s_!DjHi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb32de72-9ee7-4f2c-a3a9-7bcac8dd902d_1714x588.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Today, I just want to do nothing more than introduce this topic. I&#8217;m sure most of you use Apache Airflow a fair bit, and it&#8217;s good to keep up to speed on the happenings, if for no other reason than to look smarter than our coworkers. Honestly, I&#8217;ve used Airflow for so long that when upgrading AWS MWAA to a 3.0+ version and dealing with the new UI layout, it reminded me how set in our ways and comfortable we get. Comfortable is not good. It&#8217;s just an important reminder that in all things tech, we should keep our ears to the ground and make sure we know which way the cattle are moving.</p><div><hr></div><h3>Exploring the new AI Operators and Task Decorators in Airflow.</h3><p>I&#8217;m fairly certain I don&#8217;t need to cover this, and I&#8217;m just an everyday Airflow user, not an expert. I try to use it only for pipeline orchestration and monitoring, leaving data processing to other tools. For that reason, I&#8217;ve used it for a decade but also tried to avoid learning too much about it &#8230; other than that, I hate <a href="iframe.php?url=https%3A%2F%2Fairflow.apache.org%2Fdocs%2Fapache-airflow%2Fstable%2Fhowto%2Fdynamic-dag-generation.html">dynamic DAGs</a>. <a href="iframe.php?url=https%3A%2F%2Fairflow.apache.org%2Fdocs%2Fapache-airflow%2Fstable%2Fauthoring-and-scheduling%2Fdynamic-task-mapping.html">Dynamic Tasks</a>&#8230; fine; dynamic DAGs? Straight to jail.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21f-hM%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f-hM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png 424w, https://substackcdn.com/image/fetch/$s_!f-hM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png 848w, https://substackcdn.com/image/fetch/$s_!f-hM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png 1272w, https://substackcdn.com/image/fetch/$s_!f-hM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21f-hM%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png" width="1286" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1286,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:497800,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218835190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f-hM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png 424w, https://substackcdn.com/image/fetch/$s_!f-hM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png 848w, https://substackcdn.com/image/fetch/$s_!f-hM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png 1272w, https://substackcdn.com/image/fetch/$s_!f-hM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb7169a-ea74-4016-9be8-6074322dc978_1286x582.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Anywho, I&#8217;m probably only going to cover two things in this post about the addition of AI to Apache Airflow.</p><ul><li><p><strong>Operators</strong></p><ul><li><p>6 new AI-specific <code>operators</code></p></li></ul></li><li><p><strong>Tasks</strong></p><ul><li><p>6 new AI-specific <code>tasks</code></p></li></ul></li></ul><p>We will probably use that Airflow GOAT Astro CLI to spin up a local environment and maybe play with a few of the Operators and Tasks, build a little something something, and see what&#8217;s cracking. Might be boring, might not. At least we will know our stuff when that CTO comes sniffing around asking about how we are integrating AI into our pipelines.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdeterministic-agentic-data-systems" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eWyh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png 424w, https://substackcdn.com/image/fetch/$s_!eWyh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png 848w, https://substackcdn.com/image/fetch/$s_!eWyh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png 1272w, https://substackcdn.com/image/fetch/$s_!eWyh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21eWyh%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F92867002-c630-442c-a077-d76fc930bf04_1690x874.png" width="1456" height="753" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92867002-c630-442c-a077-d76fc930bf04_1690x874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:753,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:937346,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://dataengineeringcentral.substack.com/p/deterministic-agentic-data-systems&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218835190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eWyh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png 424w, https://substackcdn.com/image/fetch/$s_!eWyh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png 848w, https://substackcdn.com/image/fetch/$s_!eWyh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png 1272w, https://substackcdn.com/image/fetch/$s_!eWyh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92867002-c630-442c-a077-d76fc930bf04_1690x874.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When we are reviewing these new Tasks and Operators &#8230; remember to think about <code>deterministic</code> vs <code>non-deterministic</code> workflows. Meaning, when you put the same input in, you get the same result every  time. With other tasks, you could put something in and get who knows what out the other end. <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdeterministic-agentic-data-systems">This is a small but important concept when you start diving into AI inside workflows.</a> Read the article above for more detail.</p><p>Let&#8217;s get back to our new Airflow Operators and Tasks. Let&#8217;s go through a few of them and try them out, see what we see.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%2184dQ%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!84dQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!84dQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!84dQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!84dQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%2184dQ%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1407576,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218835190?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!84dQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!84dQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!84dQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!84dQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c151fe3-b7f4-49a4-bea2-8fd7af8f0067_1536x1024.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Also, I&#8217;m going to use the&nbsp;<a href="iframe.php?url=https%3A%2F%2Fwww.astronomer.io%2Fdocs%2Fcli%2Fv1.44%2Foverview">Astronomer CLI they provide</a>, probably the best way to run Airflow, especially locally. </p>
      <p>
          <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fai-provider-support-in-apache-airflow">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[DuckDB + ArrowFlight = GizmoData ]]></title><description><![CDATA[let the games begin!]]></description><link>https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Wed, 21 Oct 2026 13:36:34 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21d3N-%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21d3N-%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d3N-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!d3N-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!d3N-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!d3N-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21d3N-%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4c42b07-53d8-448e-b310-d2e654890662_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2028957,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!d3N-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!d3N-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!d3N-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!d3N-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c42b07-53d8-448e-b310-d2e654890662_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I was recently chatting with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Hoyt Emerson&quot;,&quot;id&quot;:7776215,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e4051af-ed5b-416e-89ec-a3f2e3c6ac2f_1750x1750.png&quot;,&quot;uuid&quot;:&quot;a3a7c881-c35a-496e-a077-8f0b00f75ff7&quot;}" data-component-name="MentionToDOM"></span> of <a href="iframe.php?url=https%3A%2F%2Fwww.earlysignal.tech%2F">Early Signal</a> fame, and he said two words that caught my attention before they barely escaped his lips &#8230; DuckDB and ArrowFlight &#8230; that&#8217;s all it took, I was hooked. If there are two weaknesses I have, it would be those two tools; put them together, and it should be illegal! I find it absolutely amazing we live in the age where we have raged against the machine (like Spark), and embraced these fast and lightweight tools &#8230; to build other tools! </p><blockquote><p><em>Anyways, this has led me to be able to <a href="iframe.php?url=https%3A%2F%2Fgizmodata.com%2F">partner with GizmoData</a>, which I am excited to introduce to you, and play around with myself. </em></p></blockquote><p><mark data-color="#f6b26b" style="background-color: rgb(246, 178, 107); color: rgb(0, 0, 0);">Everyone else is crying into their socks and moaning about the end of all things with AI doing everything, </mark><mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">not me and you!</mark> Heck, this is a great time to be alive and working in data! GizmoData proves there are still very smart people out there building amazingly fun tools on top of open-source tooling like Arrow and DuckDB. For ages, we didn&#8217;t have anything to pick from when it came to data tooling. I grew up and cut my teeth in an era when you chose between Pandas and Spark. That was it. One or the other.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fgizmodata%2Fgizmosql" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UnSB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png 424w, https://substackcdn.com/image/fetch/$s_!UnSB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png 848w, https://substackcdn.com/image/fetch/$s_!UnSB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!UnSB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21UnSB%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png" width="1456" height="811" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:370167,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://github.com/gizmodata/gizmosql&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UnSB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png 424w, https://substackcdn.com/image/fetch/$s_!UnSB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png 848w, https://substackcdn.com/image/fetch/$s_!UnSB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!UnSB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4269d54a-6b0e-4319-b0d0-415b19138fb2_1806x1006.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Concepts first &#8230; then we play.</h3><p>As much as I want to simply start pumping data through the system and seeing what happens, you know I love new tools; let&#8217;s get our feet under us first and just take a glance at what we are dealing with. First, things first &#8230; what is GizmoData?</p><div class="pullquote"><p>&#8220;<mark data-color="#f9cb9c" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">GizmoData builds analytical SQL infrastructure around DuckDB and Apache Arrow Flight SQL, offering both open-source software and commercially managed deployments.</mark>&#8221;</p></div><p>The key concepts and capabilities of the <strong>open-source version </strong>&#8230;</p><ul><li><p><em>DuckDB and SQLite execution backends.</em></p></li><li><p><em>Apache Arrow Flight SQL for remote query execution and columnar result transport.</em></p></li><li><p><em>Authentication, TLS, JWT, and query timeouts.</em></p></li><li><p><em>Concurrent client connections and server-side sessions.</em></p></li><li><p><em>Support for native binaries, Docker containers, and Kubernetes.</em></p></li><li><p><em>Integration with JDBC, ADBC, Python, Ibis, SQLAlchemy, and BI tools.</em></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%217kbA%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7kbA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg 424w, https://substackcdn.com/image/fetch/$s_!7kbA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg 848w, https://substackcdn.com/image/fetch/$s_!7kbA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg 1272w, https://substackcdn.com/image/fetch/$s_!7kbA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%217kbA%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg" width="1456" height="1071" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1071,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2208,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/svg+xml&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7kbA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg 424w, https://substackcdn.com/image/fetch/$s_!7kbA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg 848w, https://substackcdn.com/image/fetch/$s_!7kbA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg 1272w, https://substackcdn.com/image/fetch/$s_!7kbA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02b67dba-5fc4-4a65-8a6d-0067837de43b_340x250.svg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To be sure, GizmoData is a complete data platform with an elegant UI and pretty much offers what one would expect these days. Things like, Compute, Data, Notebooks, etc. But before we get all set on our own feet, let&#8217;s start with the open-source version and explore at its core what GizmoSQL is, and then later return to the Enterprise Cloud to compare and contrast.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vOL4%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vOL4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png 424w, https://substackcdn.com/image/fetch/$s_!vOL4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png 848w, https://substackcdn.com/image/fetch/$s_!vOL4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png 1272w, https://substackcdn.com/image/fetch/$s_!vOL4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vOL4%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png" width="1456" height="687" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:687,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:353373,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vOL4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png 424w, https://substackcdn.com/image/fetch/$s_!vOL4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png 848w, https://substackcdn.com/image/fetch/$s_!vOL4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png 1272w, https://substackcdn.com/image/fetch/$s_!vOL4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58d236d9-b7df-40d3-bb86-2a17a9b9e5ab_3000x1416.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fduckdb-arrowflight-gizmodata%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h3>Playing with open-source GizmoSQL.</h3><p>One thing is clear when starting to familiarize oneself with the GizmoData GitHub repo(s) is that there is more than just a single tool. From what I can tell, and this just based on what I can read between the lines, they have built, and are building, an data ecosystem around the core product <a href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fgizmodata%2Fgizmosql">GizmoSQL Server</a>. This makes sense and points to the fact that data vendors are learning their lessons, realizing that the hearts and minds of the data community is often won in the wider arena of integrations and implementations of any technology.</p><p>Sure, we want fast and slick tools. But, what we also want is &#8230;</p><ul><li><p><em>simplicity</em></p></li><li><p><em>ease of use</em></p></li><li><p><em>control</em></p></li></ul><p>For example, Gizmo publishes an <code>Operator</code> specifically for running on Kubernetes &#8230; making less work for those wanting to easily deploy and run the tech stack.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fgizmodata%2Fgizmosql-operator" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZJPd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png 424w, https://substackcdn.com/image/fetch/$s_!ZJPd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png 848w, https://substackcdn.com/image/fetch/$s_!ZJPd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJPd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21ZJPd%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png" width="1456" height="523" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:523,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152444,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://github.com/gizmodata/gizmosql-operator&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZJPd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png 424w, https://substackcdn.com/image/fetch/$s_!ZJPd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png 848w, https://substackcdn.com/image/fetch/$s_!ZJPd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJPd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85eb5198-ae1c-408c-817c-3eb1819eb0a8_1804x648.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Heck, they even provide an <a href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fgizmodata%2Fgizmosql-ui">open-source UI</a> for you to use and run if you want! I like this approach: be open and honest about what you are building, and if folk find it enticing and helpful, they could later turn into customers. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fgizmodata%2Fgizmosql-ui" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z7J2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png 424w, https://substackcdn.com/image/fetch/$s_!Z7J2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png 848w, https://substackcdn.com/image/fetch/$s_!Z7J2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png 1272w, https://substackcdn.com/image/fetch/$s_!Z7J2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Z7J2%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png" width="1456" height="736" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:736,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:291064,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://github.com/gizmodata/gizmosql-ui&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z7J2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png 424w, https://substackcdn.com/image/fetch/$s_!Z7J2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png 848w, https://substackcdn.com/image/fetch/$s_!Z7J2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png 1272w, https://substackcdn.com/image/fetch/$s_!Z7J2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F670e31bb-bc59-49b6-95d1-a7afba55fd48_1816x918.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s get back to the main <code>core</code> of the product GizmoSQL. Since it&#8217;s open source, let&#8217;s just play around with it using some <a href="iframe.php?url=https%3A%2F%2Fdivvy-tripdata.s3.amazonaws.com%2Findex.html">Divvy Bike Trip data</a>. We can build a little <code>docker</code> project around it to simply dip our toes in the water and see what happens, what kind of feelings we get when playing with it. This is an often missed but simple fact when identifying and researching new data tools of any kind. <mark data-color="#a2c4c9" style="background-color: rgb(162, 196, 201); color: rgb(0, 0, 0);">You can learn alot about the feel and ease with which you can play with &#8220;a thing.&#8221; </mark></p><p>Here is a simple <code>docker-compose.yml</code> for our initial playing.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">services:
  gizmosql:
    image: gizmodata/gizmosql:latest
    container_name: gizmosql
    init: true
    tty: true
    ports:
      - "31337:31337"
    environment:
      GIZMOSQL_USERNAME: gizmosql_user
      GIZMOSQL_PASSWORD: gizmosql_password
      TLS_ENABLED: "1"
      PRINT_QUERIES: "1"
      DATABASE_FILENAME: data/divvy.duckdb
    volumes:
      - ./data:/opt/gizmosql/data</code></pre></div><p>Now you might be asking &#8230; sure &#8230; we have some sort of SQL Server running and DuckDB running somewhere, but how do I actually write code &#8230; or do a thing? I mean how do we run our SQL &#8230; the lingua franca of data? If you&#8217;ve been reading my Substack you will know I&#8217;m a big fan of Arrow, and the <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fadbc-arrow-driver-for-databricks%3Futm_source%3Dpublication-search">ADBC drivers built on arrow</a>. We can use the gizmo ADBC driver to send our requests and get data back and forth.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import time
from adbc_driver_gizmosql import dbapi as gizmosql

CSV_GLOB = "/opt/gizmosql/data/*.csv"

QUERIES = {
    "Rows and date range across all CSV files": """
        SELECT count(*)                     AS trips,
               count(DISTINCT filename)     AS csv_files,
               min(started_at)              AS first_trip,
               max(started_at)              AS last_trip
        FROM trips
    """,
    "Members vs casual riders": """
        SELECT member_casual,
               count(*)                                                AS trips,
               round(avg(date_diff('second', started_at, ended_at)) / 60, 1) AS avg_minutes
        FROM trips
        GROUP BY ALL
        ORDER BY trips DESC
    """,
    "Bike types": """
        SELECT rideable_type, count(*) AS trips
        FROM trips
        GROUP BY ALL
        ORDER BY trips DESC
    """,
    "Top 10 start stations": """
        SELECT start_station_name, count(*) AS trips
        FROM trips
        WHERE start_station_name IS NOT NULL
        GROUP BY ALL
        ORDER BY trips DESC
        LIMIT 10
    """,
    "Busiest hours of the day": """
        SELECT hour(started_at) AS hour_of_day, count(*) AS trips
        FROM trips
        GROUP BY ALL
        ORDER BY trips DESC
        LIMIT 5
    """,
}


def main() -&gt; None:
    with gizmosql.connect(
        "gizmosql://localhost:31337",
        username="gizmosql_user",
        password="gizmosql_password",
        tls_skip_verify=True,
    ) as conn, conn.cursor() as cur:
        cur.execute("SELECT version() AS duckdb_version")
        print(f"Connected to GizmoSQL &#8212; DuckDB {cur.fetchone()[0]}\n")

        cur.execute(f"""
            CREATE OR REPLACE VIEW trips AS
            SELECT * FROM read_csv('{CSV_GLOB}', union_by_name = true, filename = true)
        """)

        for title, sql in QUERIES.items():
            start = time.perf_counter()
            cur.execute(sql)
            table = cur.fetch_arrow_table()  # results arrive as Arrow over Flight SQL
            elapsed = time.perf_counter() - start
            print(f"== {title}  ({elapsed:.2f}s)")
            print(table.to_pandas().to_string(index=False))
            print()

if __name__ == "__main__":
    main()</code></pre></div><p>Here are the results from this test run. Of course it is fast, one would expect that when putting DuckDB and Arrow in the same sentence.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G71x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png 424w, https://substackcdn.com/image/fetch/$s_!G71x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png 848w, https://substackcdn.com/image/fetch/$s_!G71x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png 1272w, https://substackcdn.com/image/fetch/$s_!G71x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21G71x%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png" width="1456" height="358" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:358,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:477652,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!G71x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png 424w, https://substackcdn.com/image/fetch/$s_!G71x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png 848w, https://substackcdn.com/image/fetch/$s_!G71x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png 1272w, https://substackcdn.com/image/fetch/$s_!G71x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff79d5850-b49e-4aea-937b-e7b4c03e7ca7_1694x416.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>To me, it isn&#8217;t that code itself that is the real secret, or special sauce, yet in another sense &#8230; it is. The point is that anyone coming from any data background can look at the code and say &#8220;Ah ha, I see, this is easy to use.&#8221; There is nothing &#8220;funny&#8221; that needs to be done to start using GizmoSQL &#8230; other than just installing it. As long as you have a client to connect to, you can start to submit work to that client as needed. </p><blockquote><p><mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">The real magic is hidden, it&#8217;s what you don&#8217;t see.</mark></p></blockquote><p>Clearly what GizmoData has done is provide the underlying infrastructure to supply the power of DuckDB and Arrow Flight SQL in a hardened client-server architecture that can be run or shipped anywhere. They're extending the power of something that can run on one person's laptop to a server with the kind of features you'd need to run it as a proper Data Platform.</p><div class="callout-block" data-callout="true"><p>It&#8217;s so interesting to see <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fthe-single-node-rebellion%3Futm_source%3Dpublication-search">how the data community has morphed over the last 5+ years</a> in reaction to the Apache Spark&#8217;s of the world.</p></div><p>The fact that we can reach critical mass where it&#8217;s now cheaper and easier to have a self-hosted SQL endpoint for when you&#8217;d otherwise reach for Snowflake &#8230; amazing! What a time to be alive. But, of course I wouldn&#8217;t be me if I didn&#8217;t try to break something. I always need to break something to feel good, or at least attempt it.</p><blockquote><p><em>I&#8217;m curious, since this is at it&#8217;s core a server, I wonder what would happen if we tried to hammer it with writes. See what happens!</em></p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import argparse
import multiprocessing as mp
import os
import tempfile
import time
from collections import Counter
from concurrent.futures import ProcessPoolExecutor, as_completed
from pathlib import Path

import duckdb
import pyarrow as pa
import pyarrow.compute as pc
import pyarrow.csv as pacsv
from adbc_driver_gizmosql import dbapi as gizmosql

DATA_DIR = Path(__file__).parent / "data"
TARGET_TABLE = "trips_ingested"
LOG_TABLE = "ingest_log"

CONN_ARGS = dict(
    uri="gizmosql://localhost:31337",
    username="gizmosql_user",
    password="gizmosql_password",
    tls_skip_verify=True,
)
def connect():
    return gizmosql.connect(**CONN_ARGS)

def embedded_writer(db_path: str, worker: int, barrier) -&gt; str:
    barrier.wait()
    try:
        con = duckdb.connect(db_path)
        con.execute("CREATE TABLE IF NOT EXISTS t (worker INT, ts TIMESTAMP)")
        con.execute("INSERT INTO t VALUES (?, now())", [worker])
        time.sleep(1)  # hold the connection open, like a real long-lived client
        con.close()
        return "ok"
    except duckdb.Error as e:
        return f"FAILED: {str(e).splitlines()[0][:110]}"


def part_a(workers: int) -&gt; None:
    print(f"\n=== Part A: {workers} processes writing to ONE local DuckDB file directly ===")
    with tempfile.TemporaryDirectory() as tmp:
        db_path = str(Path(tmp) / "embedded.duckdb")
        with mp.Manager() as manager:
            barrier = manager.Barrier(workers)
            with ProcessPoolExecutor(max_workers=workers) as pool:
                results = list(pool.map(embedded_writer, [db_path] * workers, range(workers), [barrier] * workers))
    for i, r in enumerate(results):
        print(f"  process {i}: {r}")
    ok = results.count("ok")
    print(f"  -&gt; {ok}/{workers} succeeded. DuckDB allows only one read-write process per file.")

_conn = None

def init_worker() -&gt; None:
    global _conn
    _conn = connect()


def to_ipc(table: pa.Table) -&gt; bytes:
    sink = pa.BufferOutputStream()
    with pa.ipc.new_stream(sink, table.schema) as w:
        w.write_table(table)
    return sink.getvalue().to_pybytes()


def ingest_batch(batch_id: int, payload: bytes) -&gt; tuple[int, int, int, float]:
    batch = pa.ipc.open_stream(payload).read_all()
    start = time.perf_counter()
    with _conn.cursor() as cur:
        rows = cur.adbc_ingest(TARGET_TABLE, batch, mode="append")
        cur.execute(
            f"INSERT INTO {LOG_TABLE} VALUES (?, ?, ?, now())",
            parameters=[batch_id, os.getpid(), rows],
        )
    return batch_id, os.getpid(), rows, time.perf_counter() - start


def reader(stop, out) -&gt; None:
    """Poll row counts while writers are running: reads are never blocked."""
    seen = []
    with connect() as conn, conn.cursor() as cur:
        while not stop.is_set():
            cur.execute(f"SELECT count(*) FROM {TARGET_TABLE}")
            seen.append(cur.fetchone()[0])
            time.sleep(0.05)
    out.put(seen)


def load_source(limit_files: int | None) -&gt; pa.Table:
    files = sorted(DATA_DIR.glob("*.csv"))[:limit_files]
    if not files:
        raise SystemExit(f"No CSV files in {DATA_DIR}")
    tables = []
    for f in files:
        names = pacsv.open_csv(f).schema.names
        opts = pacsv.ConvertOptions(column_types={n: pa.string() for n in names}, strings_can_be_null=True)
        tables.append(pacsv.read_csv(f, convert_options=opts))
    print(f"Loaded {sum(t.num_rows for t in tables):,} rows from {len(files)} CSV file(s) on the client")
    return pa.concat_tables(tables, promote_options="default").combine_chunks()


def setup_tables(source: pa.Table) -&gt; None:
    with connect() as conn, conn.cursor() as cur:
        cols = ", ".join(f'"{name}" VARCHAR' for name in source.schema.names)  # CSVs read as strings
        cur.execute(f"CREATE OR REPLACE TABLE {TARGET_TABLE} ({cols})")
        cur.execute(f"DROP TABLE IF EXISTS {LOG_TABLE}")
        cur.execute(f"CREATE TABLE {LOG_TABLE} (batch_id INT, pid INT, rows BIGINT, written_at TIMESTAMP)")


def part_b(source: pa.Table, workers: int, batch_rows: int, readers: int) -&gt; tuple[list, float]:
    batches = [to_ipc(source.slice(off, batch_rows)) for off in range(0, source.num_rows, batch_rows)]
    print(f"\n=== Part B: {workers} processes x own ADBC session -&gt; GizmoSQL ===")
    print(f"  {len(batches)} batches of up to {batch_rows:,} rows, {readers} reader process(es) polling")

    setup_tables(source)

    stop, out = mp.Event(), mp.Queue()
    reader_procs = [mp.Process(target=reader, args=(stop, out)) for _ in range(readers)]
    for p in reader_procs:
        p.start()

    results, errors = [], []
    start = time.perf_counter()
    with ProcessPoolExecutor(max_workers=workers, initializer=init_worker) as pool:
        futures = [pool.submit(ingest_batch, i, b) for i, b in enumerate(batches)]
        for fut in as_completed(futures):
            try:
                results.append(fut.result())
            except Exception as e:  # report, don't hide
                errors.append(repr(e))
    elapsed = time.perf_counter() - start

    stop.set()
    reader_counts = [out.get() for _ in reader_procs]
    for p in reader_procs:
        p.join()

    print(f"  wrote {sum(r[2] for r in results):,} rows in {elapsed:.2f}s "
          f"({sum(r[2] for r in results) / elapsed:,.0f} rows/s, {len(results) * 2} write requests)")
    print(f"  errors: {len(errors)}")
    for e in errors[:5]:
        print(f"    {e}")
    lat = sorted(r[3] for r in results)
    print(f"  per-batch latency: p50 {lat[len(lat) // 2]:.3f}s, max {lat[-1]:.3f}s")
    for i, counts in enumerate(reader_counts):
        monotonic = all(a &lt;= b for a, b in zip(counts, counts[1:]))
        print(f"  reader {i}: {len(counts)} reads during writes, "
              f"saw {counts[0]:,} -&gt; {counts[-1]:,} rows, never went backwards: {monotonic}")
    return results, errors

def main() -&gt; None:
    ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
    ap.add_argument("--workers", type=int, default=8, help="writer processes")
    ap.add_argument("--batch-rows", type=int, default=5_000, help="rows per ingest request")
    ap.add_argument("--readers", type=int, default=2, help="reader processes polling during writes")
    ap.add_argument("--files", type=int, default=None, help="limit number of CSV files loaded")
    ap.add_argument("--skip-embedded", action="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fstore_true", help="skip Part A")
    args = ap.parse_args()

    if not args.skip_embedded:
        part_a(args.workers)

    source = load_source(args.files)
    results, errors = part_b(source, args.workers, args.batch_rows, args.readers)
    expected = -(-source.num_rows // args.batch_rows)</code></pre></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21-yGz%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-yGz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png 424w, https://substackcdn.com/image/fetch/$s_!-yGz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png 848w, https://substackcdn.com/image/fetch/$s_!-yGz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png 1272w, https://substackcdn.com/image/fetch/$s_!-yGz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21-yGz%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png" width="1022" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:1022,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:244030,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-yGz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png 424w, https://substackcdn.com/image/fetch/$s_!-yGz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png 848w, https://substackcdn.com/image/fetch/$s_!-yGz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png 1272w, https://substackcdn.com/image/fetch/$s_!-yGz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e0bdb04-edbd-402b-a9c6-d7bcf4d9e6a2_1022x364.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ok, so I&#8217;m a little disappointed I couldn&#8217;t break it, but again, DuckDB + Arrow Flight &#8230; what can I say.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fduckdb-arrowflight-gizmodata%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h2>GizmoData in the Cloud.</h2><p>I wanted to also take a moment to look at managed GizmoData in the cloud incase you are scared of Kubernetes (you should be), or don&#8217;t know how to clone a git repo. The UI in the Cloud is easy to use, easy to sign up and get an account, and also comes with features I&#8217;m familar with after playing around with other data platforms.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21X5co%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X5co!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png 424w, https://substackcdn.com/image/fetch/$s_!X5co!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png 848w, https://substackcdn.com/image/fetch/$s_!X5co!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!X5co!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21X5co%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png" width="1456" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:752142,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X5co!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png 424w, https://substackcdn.com/image/fetch/$s_!X5co!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png 848w, https://substackcdn.com/image/fetch/$s_!X5co!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png 1272w, https://substackcdn.com/image/fetch/$s_!X5co!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b9b47f-d821-4b24-a168-57f8e31c991c_2950x1458.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Of course we have options to create Clusters, but the most interesting to me were the <code>Data</code> and <code>Catalog</code> sections. Clusters are clusters, but data integration is many times key to a platform. You would be surprised how many data teams just start with some data source(s) they want to use, and then wrap a data platform around that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21oDON%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oDON!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png 424w, https://substackcdn.com/image/fetch/$s_!oDON!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png 848w, https://substackcdn.com/image/fetch/$s_!oDON!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png 1272w, https://substackcdn.com/image/fetch/$s_!oDON!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21oDON%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png" width="1456" height="470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:470,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260256,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oDON!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png 424w, https://substackcdn.com/image/fetch/$s_!oDON!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png 848w, https://substackcdn.com/image/fetch/$s_!oDON!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png 1272w, https://substackcdn.com/image/fetch/$s_!oDON!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e1ac5b-98aa-47f6-8933-1817c4cef3c0_2996x968.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>We can see here that we can use and register DuckDB database files as first-class citizens. </p></li><li><p>Also, we can create Catalogs for &#8230;</p><ul><li><p><em>DuckLake and PostgreSQL</em></p></li></ul></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%216XRK%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6XRK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png 424w, https://substackcdn.com/image/fetch/$s_!6XRK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png 848w, https://substackcdn.com/image/fetch/$s_!6XRK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png 1272w, https://substackcdn.com/image/fetch/$s_!6XRK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%216XRK%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png" width="1456" height="650" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:650,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:521597,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6XRK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png 424w, https://substackcdn.com/image/fetch/$s_!6XRK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png 848w, https://substackcdn.com/image/fetch/$s_!6XRK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png 1272w, https://substackcdn.com/image/fetch/$s_!6XRK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b55ef95-2c21-4f62-8e99-3f8da9e752d1_2992x1336.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One of the biggest pieces I would like to see added would be first-class support for the two major Lakehouse data storage layers, Delta Lake and Apache Iceberg, especially via Unity Catalog and Iceberg catalogs like Polaris. DuckDB itself integrates perfectly with both Delta Lake and Iceberg, including catalogs like Unity; so adding them as options seems like it would make perfect sense.</p><blockquote><p><em>That of course would not stop one from simply just integrating these data storage layers into your code, since DuckDB does support them.</em></p></blockquote><p>Just as a sanity check, in our local GizmoSQL instance, I made sure we could talk to both Iceberg and Delta Lake, which in both cases worked fine.</p><p>All this thinking about wanting first-class support for catalogs like Unity as far as integration (<em>because integration with a wide range of tech is always one of the most important things</em>), I started to wonder about data pipelines. When I think of a data platform, I think about pipelines, many of them running at the same time, here and there &#8230; different pieces here and there tied together and running as a &#8230; well &#8230; DAG. Apache Airflow is the GOAT of data orchestrators &#8230; how could we run a task against a GizmoSQL Server?</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from airflow.decorators import dag, task
from airflow.hooks.base import BaseHook
import pendulum

@dag(schedule="@daily", start_date=pendulum.datetime(2026, 1, 1), catchup=False)
def divvy_daily():
      @task
      def run_sql(sql: str):
          from adbc_driver_gizmosql import dbapi as gizmosql
          c = BaseHook.get_connection("gizmosql_default")  # creds live in Airflow, not code
          with gizmosql.connect(f"gizmosql://{c.host}:{c.port}",
                                username=c.login, password=c.password) as conn, conn.cursor() as cur:
              cur.execute(sql)
      raw = run_sql.override(task_id="load_raw")(
          "CREATE OR REPLACE TABLE raw_trips AS SELECT * FROM read_parquet('s3://bucket/divvy/*.parquet')")
      agg = run_sql.override(task_id="station_daily")(
          "CREATE OR REPLACE TABLE station_daily AS SELECT start_station_name, started_at::date d, count(*) n FROM raw_trips GROUP BY ALL")
      raw &gt;&gt; agg
  divvy_daily()</code></pre></div><p>Of course we could use the <code>adbc</code> driver for Gizmo and wire it into an Airflow DAG easy enough.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Of course, we could always switch that old friend &#8230; <a href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fgizmodata%2Fdbt-gizmosql">dbt, and wire up Gizmo that way.</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fgizmodata%2Fdbt-gizmosql" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hn6h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png 424w, https://substackcdn.com/image/fetch/$s_!hn6h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png 848w, https://substackcdn.com/image/fetch/$s_!hn6h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png 1272w, https://substackcdn.com/image/fetch/$s_!hn6h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21hn6h%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png" width="1456" height="412" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:412,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139571,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://github.com/gizmodata/dbt-gizmosql&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hn6h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png 424w, https://substackcdn.com/image/fetch/$s_!hn6h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png 848w, https://substackcdn.com/image/fetch/$s_!hn6h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png 1272w, https://substackcdn.com/image/fetch/$s_!hn6h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcee1104c-6c7c-46e5-8edb-f6076debd53f_2126x602.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">uv add dbt-core dbt-gizmosql</code></pre></div><p>I tested it out to make sure it would work. The <code>profiles.yml</code> points dbt at our GizmoSQL container over Arrow Flight SQL. Nothing exotic here, just a host, a port, and some credentials.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">divvy:
  target: dev
  outputs:
    dev:
      type: gizmosql
      host: "{{ env_var('GIZMOSQL_HOST', 'localhost') }}"
      port: 31337
      database: divvy
      user: gizmosql_user
      password: "{{ env_var('GIZMOSQL_PASSWORD') }}"
      use_encryption: True
      tls_skip_verify: True 
      threads: 4</code></pre></div><p>Then we write plain old dbt models. First, a staging view over the raw Divvy trips (the view sitting on top of our CSV files) &#8230;</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;sql&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-sql">- models/staging/stg_trips.sql
select
    ride_id,
    rideable_type,
    member_casual,
    start_station_name,
    end_station_name,
    started_at,
    ended_at,
    date_diff('second', started_at, ended_at) / 60.0 as ride_minutes
from {{ source('divvy_raw', 'trips') }}
where ended_at &gt; started_at</code></pre></div><p>&#8230; of course we could add models to our hearts desire, and then wire up <code>dbt</code> with Airflow to get the pipeline(s) running.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import os
import pendulum
from airflow.providers.standard.operators.bash import BashOperator
from airflow.sdk import DAG

DBT_DIR = os.environ.get("DIVVY_DBT_DIR", "/opt/airflow/divvy_dbt")
DBT = f"cd {DBT_DIR} &amp;&amp; dbt --no-use-colors"

with DAG(
    dag_id="divvy_dbt",
    schedule="@daily",
    start_date=pendulum.datetime(2026, 10, 1, tz="UTC"),
    catchup=False,
    tags=["gizmosql", "dbt"],
) as dag:
    dbt_run = BashOperator(task_id="dbt_run", bash_command=f"{DBT} run --profiles-dir .")
    dbt_test = BashOperator(task_id="dbt_test", bash_command=f"{DBT} test --profiles-dir .")

    dbt_run &gt;&gt; dbt_testimport os

import pendulum
from airflow.providers.standard.operators.bash import BashOperator
from airflow.sdk import DAG

DBT_DIR = os.environ.get("DIVVY_DBT_DIR", "/opt/airflow/divvy_dbt")
DBT = f"cd {DBT_DIR} &amp;&amp; dbt --no-use-colors"

with DAG(
    dag_id="divvy_dbt",
    schedule="@daily",
    start_date=pendulum.datetime(2026, 10, 1, tz="UTC"),
    catchup=False,
    tags=["gizmosql", "dbt"],
) as dag:
    dbt_run = BashOperator(task_id="dbt_run", bash_command=f"{DBT} run --profiles-dir .")
    dbt_test = BashOperator(task_id="dbt_test", bash_command=f"{DBT} test --profiles-dir .")

    dbt_run &gt;&gt; dbt_test</code></pre></div><p>easy enough &#8230;</p><p>The rest of the GizmoData Enterprise account has more features that would appeal to a larger data team. </p><ul><li><p>Environments</p></li><li><p>Secrets</p></li><li><p>Extensions</p></li><li><p> SSO / OAuth</p></li><li><p>Catalog Permissions</p></li><li><p>etc, etc.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21ctZo%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ctZo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png 424w, https://substackcdn.com/image/fetch/$s_!ctZo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png 848w, https://substackcdn.com/image/fetch/$s_!ctZo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png 1272w, https://substackcdn.com/image/fetch/$s_!ctZo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21ctZo%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png" width="1456" height="439" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:439,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:291556,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ctZo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png 424w, https://substackcdn.com/image/fetch/$s_!ctZo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png 848w, https://substackcdn.com/image/fetch/$s_!ctZo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png 1272w, https://substackcdn.com/image/fetch/$s_!ctZo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a7e675-a096-4e32-9405-a734bd6c9663_2974x896.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fduckdb-arrowflight-gizmodata%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><h2>Real Production workload on GizmoData. (remote s3 Iceberg Table)</h2><div class="callout-block" data-callout="true"><p>If you want to read a pretty sweet benchmark, <a href="iframe.php?url=https%3A%2F%2Fgizmodata.com%2Fblog%2Ftpch-1tb-horse-race-aws-gcp-azure">check out this </a><strong><a href="iframe.php?url=https%3A%2F%2Fgizmodata.com%2Fblog%2Ftpch-1tb-horse-race-aws-gcp-azure">1 TB TPC-H Horse Race on GizmoData Cloud.</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21W2cT%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W2cT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png 424w, https://substackcdn.com/image/fetch/$s_!W2cT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png 848w, https://substackcdn.com/image/fetch/$s_!W2cT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png 1272w, https://substackcdn.com/image/fetch/$s_!W2cT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21W2cT%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png" width="1456" height="553" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:553,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2042925,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W2cT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png 424w, https://substackcdn.com/image/fetch/$s_!W2cT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png 848w, https://substackcdn.com/image/fetch/$s_!W2cT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png 1272w, https://substackcdn.com/image/fetch/$s_!W2cT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb91b5b7-3f39-4296-8ea3-1046250fc385_1658x630.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></div><p>I really always try to do two types of tests when working with new tools: first, like we&#8217;ve already seen &#8230; do some local data testing to prove out the concepts and just see how things work. Secondly, it&#8217;s a good idea to just throw in some more realistic workloads, usually something that is simple on the surface, but forces a tool to do things like reading data over a network, etc. What I figured we could do in the GizmoData Cloud would be to run a large analytical query, maybe involving a window function on top of an Apache Iceberg table stored in S3.</p><blockquote><p><em>Theoretically, this should be no problem for DuckDB. But what we are testing here would be the GizmoDB Cloud with a cluster we set up, and just see how it handles that real-world load of a large dataset across a network. </em></p></blockquote><p>The truth is that in most production data teams, we have some sort of Lakehouse architecture backed by a remote storage system like S3, many times involving something like Hudi, Delta, or Iceberg. We would be remiss not to test this out.</p><ul><li><p><a href="iframe.php?url=https%3A%2F%2Fwww.backblaze.com%2Fcloud-storage%2Fresources%2Fhard-drive-test-data">For this test, we will use the open-source Backblaze Harddrive Dataset. They provide it as an Iceberg table on s3.</a></p></li></ul><p>First, I had to set up a Cluster; it&#8217;s pretty standard stuff, just selecting what you want.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b77fd33-1a2c-4b8a-8310-f3649325b35f_2118x1376.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d032ee6-587e-4715-9bce-7db5084ef071_2118x1376.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47b860d6-685f-42a8-95b0-59aa3752babb_2118x1376.png&quot;}],&quot;caption&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae6d707d-1be6-47ca-a3a8-8a0cab4cdb59_1456x474.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>Now that my cluster is running. I can get the endpoint + the user and password I created when building that cluster, and hopefully run the script below against it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%217c_V%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7c_V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png 424w, https://substackcdn.com/image/fetch/$s_!7c_V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png 848w, https://substackcdn.com/image/fetch/$s_!7c_V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png 1272w, https://substackcdn.com/image/fetch/$s_!7c_V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%217c_V%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png" width="1456" height="887" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:887,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:217941,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7c_V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png 424w, https://substackcdn.com/image/fetch/$s_!7c_V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png 848w, https://substackcdn.com/image/fetch/$s_!7c_V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png 1272w, https://substackcdn.com/image/fetch/$s_!7c_V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e27688-b95e-4f17-b8a3-a2cb50fe0ae1_2072x1262.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Anyways, let&#8217;s write a Python ABDC driver program that can run an analytical query over a bunch of this data, and then persist the results to a DuckDB table. Ok, this is going to be a mouthful, but again, we are wanting to do something real here, so bear with me.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import argparse
import os
import time
from datetime import date
from pathlib import Path

import duckdb
import pyarrow as pa
from adbc_driver_gizmosql import dbapi as gizmosql

# Read-only key published by Backblaze for the public Drive Stats bucket
B2_KEY_ID = os.environ.get("B2_KEY_ID", "0045f0571db506a0000000017")
B2_SECRET = os.environ.get("B2_SECRET", "K004Fs/bgmTk5dgo6GAVm2Waj3Ka+TE")
B2_REGION = "us-west-004"
B2_ENDPOINT = "s3.us-west-004.backblazeb2.com"
TABLE_ROOT = "s3://drivestats-iceberg/drivestats"

LOCAL_DB = Path(__file__).parent / "data" / "drivestats_results.duckdb"
RESULT_TABLE = "model_monthly_health"

CONN_ARGS = dict(
    uri=os.environ.get("GIZMOSQL_URI", "gizmosql://benchmark-97f775ae655c49188bd5159d953c4106.us-east-2.aws.sql.gizmodata.com:443"),
    username=os.environ.get("GIZMOSQL_USERNAME", "gizmosql_admin"),
    password=os.environ.get("GIZMOSQL_PASSWORD", "bingbongdingdong"),
    tls_skip_verify=os.environ.get("GIZMOSQL_TLS_SKIP_VERIFY", "0") == "1",  # set to 1 for the local container's self-signed cert
)

# Per drive, per day: window functions over each drive's daily history, then
# a rollup to model x month. RANGE frames use calendar days, so gaps in a
# drive's reporting don't stretch the windows.
#
# The query runs one chunk of whole months at a time so it fits in server
# memory. Every frame reaches at most 30 days back or forward, so each chunk
# scans MARGIN_DAYS of extra data on both sides, then keeps only its own
# months. Chunks never share a month, so their outputs just concatenate.
MARGIN_DAYS = 31
WINDOW_SQL = """
WITH daily AS (
    SELECT date, serial_number, model, capacity_bytes, failure,
           smart_5_raw   AS reallocated_sectors,
           smart_9_raw   AS power_on_hours,
           smart_194_raw AS temperature_c
    FROM drivestats
    WHERE date &gt;= DATE '{start}' - INTERVAL {margin} DAY AND date &lt; DATE '{end}' + INTERVAL {margin} DAY
),
per_drive AS (
    SELECT *,
           reallocated_sectors - lag(reallocated_sectors) OVER d                                      AS realloc_delta,
           avg(temperature_c)          OVER (d RANGE BETWEEN INTERVAL 6 DAYS PRECEDING AND CURRENT ROW) AS temp_7d_avg,
           max(temperature_c)          OVER (d RANGE BETWEEN INTERVAL 29 DAYS PRECEDING AND CURRENT ROW) AS temp_30d_max,
           max(failure)                OVER (d RANGE BETWEEN CURRENT ROW AND INTERVAL 29 DAYS FOLLOWING) AS fails_within_30d
    FROM daily
    WINDOW d AS (PARTITION BY serial_number ORDER BY date)
)
SELECT model,
       date_trunc('month', date)::DATE                                        AS month,
       any_value(capacity_bytes) / 1e12                                       AS capacity_tb,
       count(*)                                                               AS drive_days,
       count(DISTINCT serial_number)                                          AS drives,
       sum(failure)                                                           AS failures,
       round(sum(failure) * 365.0 * 100 / count(*), 3)                        AS annualized_failure_rate_pct,
       round(avg(temp_7d_avg), 2)                                             AS avg_temp_7d,
       max(temp_30d_max)                                                      AS max_temp_30d,
       round(avg(power_on_hours) / 24 / 365, 2)                               AS avg_age_years,
       count(*) FILTER (WHERE realloc_delta &gt; 0)                              AS realloc_growth_days,
       count(*) FILTER (WHERE fails_within_30d = 1)                           AS pre_failure_drive_days,
       round(avg(reallocated_sectors) FILTER (WHERE fails_within_30d = 1), 1) AS avg_realloc_pre_failure,
       round(avg(reallocated_sectors) FILTER (WHERE fails_within_30d = 0), 1) AS avg_realloc_healthy
FROM per_drive
WHERE date &gt;= DATE '{start}' AND date &lt; DATE '{end}'
GROUP BY ALL
ORDER BY month, model
"""


def setup_source(cur) -&gt; str:
    """Point the server session at the Iceberg table and return the metadata file used."""
    cur.execute("INSTALL httpfs; LOAD httpfs; INSTALL iceberg; LOAD iceberg;")
    cur.execute(f"""
        CREATE OR REPLACE SECRET drivestats_b2 (
            TYPE s3, KEY_ID '{B2_KEY_ID}', SECRET '{B2_SECRET}',
            REGION '{B2_REGION}', ENDPOINT '{B2_ENDPOINT}', URL_STYLE 'path',
            SCOPE '{TABLE_ROOT}'
        )
    """)
    # No version-hint.text in the bucket: pick the newest metadata file.
    # Names start with a zero-padded sequence number, so max() is the latest.
    cur.execute(f"SELECT max(file) FROM glob('{TABLE_ROOT}/metadata/*.metadata.json')")
    metadata = cur.fetchone()[0]
    cur.execute(f"CREATE OR REPLACE TEMP VIEW drivestats AS SELECT * FROM iceberg_scan('{metadata}')")
    return metadata


def show(cur, title: str, sql: str, max_rows: int = 50) -&gt; None:
    start = time.perf_counter()
    cur.execute(sql)
    df = cur.fetch_arrow_table().to_pandas()
    print(f"\n== {title}  ({time.perf_counter() - start:.2f}s)")
    print(df.to_string(index=False, max_rows=max_rows))


def stats(cur, metadata: str, start: str, end: str) -&gt; None:
    # File-level row counts come from the manifests, so nothing is scanned here.
    # Partition values are month strings, so filter on the date_month= path part.
    show(cur, f"Rows to process, {start} to {end} (from Iceberg manifests)", f"""
        WITH files AS (
            SELECT regexp_extract(file_path, 'date_month=([0-9-]+)', 1) AS month, record_count
            FROM iceberg_metadata('{metadata}')
            WHERE status &lt;&gt; 'DELETED'
        )
        SELECT left(month, 4) AS year, count(*) AS data_files, sum(record_count) AS rows
        FROM files
        WHERE month &gt;= left('{start}', 7) AND month &lt; left('{end}', 7)
        GROUP BY ALL
        UNION ALL
        SELECT 'TOTAL', count(*), sum(record_count)
        FROM files
        WHERE month &gt;= left('{start}', 7) AND month &lt; left('{end}', 7)
        ORDER BY year
    """)
    show(cur, "Whole table (current snapshot)", f"""
        SELECT count(*) AS data_files, sum(record_count) AS rows,
               min(regexp_extract(file_path, 'date_month=([0-9-]+)', 1)) AS first_month,
               max(regexp_extract(file_path, 'date_month=([0-9-]+)', 1)) AS last_month
        FROM iceberg_metadata('{metadata}')
        WHERE status &lt;&gt; 'DELETED'
    """)

    cur.execute("DESCRIBE drivestats")
    schema = cur.fetch_arrow_table().to_pandas()
    smart = schema[schema.column_name.str.startswith("smart_")]
    other = schema[~schema.column_name.str.startswith("smart_")]
    print(f"\n== Schema: {len(schema)} columns ({len(smart)} SMART attributes)")
    print(other[["column_name", "column_type"]].to_string(index=False))
    print(f"  + {len(smart)} smart_&lt;id&gt;_raw / smart_&lt;id&gt;_normalized BIGINT columns")

    show(cur, "Sample rows (columns used by the benchmark)", f"""
        SELECT date, serial_number, model, capacity_bytes, failure,
               smart_5_raw, smart_9_raw, smart_194_raw, datacenter
        FROM drivestats
        WHERE date = DATE '{start}'
        LIMIT 10
    """)


def month_chunks(start: str, end: str, months: int) -&gt; list[tuple[str, str]]:
    """Split [start, end) into consecutive ranges of whole months."""
    chunks, cur, stop = [], date.fromisoformat(start), date.fromisoformat(end)
    while cur &lt; stop:
        m = cur.month - 1 + months
        nxt = min(date(cur.year + m // 12, m % 12 + 1, 1), stop)
        chunks.append((cur.isoformat(), nxt.isoformat()))
        cur = nxt
    return chunks


def main() -&gt; None:
    parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument("--start", default="2023-01-01", help="inclusive, YYYY-MM-DD (default %(default)s)")
    parser.add_argument("--end", default="2026-01-01", help="exclusive, YYYY-MM-DD (default %(default)s)")
    parser.add_argument("--skip-stats", action="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fstore_true", help="only run the benchmark query")
    parser.add_argument("--chunk-months", type=int, default=3,
                        help="months per server query; lower it if the server runs out of memory (default %(default)s)")
    args = parser.parse_args()

    total_start = time.perf_counter()
    with gizmosql.connect(**CONN_ARGS) as conn, conn.cursor() as cur:
        cur.execute("SELECT version()")
        print(f"Connected to {CONN_ARGS['uri']} (DuckDB {cur.fetchone()[0]})")
        cur.execute("SELECT current_setting('threads'), current_setting('memory_limit')")
        threads, mem = cur.fetchone()
        print(f"Server: {threads} threads, memory_limit {mem}")

        metadata = setup_source(cur)
        print(f"Iceberg metadata: {metadata}")

        if not args.skip_stats:
            stats(cur, metadata, args.start, args.end)

        cur.execute("SET preserve_insertion_order = false")  # lets DuckDB spill more freely
        chunks = month_chunks(args.start, args.end, args.chunk_months)
        print(f"\n== Benchmark: window functions per drive, {args.start} to {args.end}"
              f" ({len(chunks)} chunks of {args.chunk_months} months, {MARGIN_DAYS}-day margins)")
        query_start = time.perf_counter()
        parts = []
        for chunk_start, chunk_end in chunks:
            t = time.perf_counter()
            cur.execute(WINDOW_SQL.format(start=chunk_start, end=chunk_end, margin=MARGIN_DAYS))
            parts.append(cur.fetch_arrow_table())  # Arrow over Flight SQL
            print(f"  {chunk_start} to {chunk_end}: {time.perf_counter() - t:7.2f}s"
                  f"  {sum(parts[-1].column('drive_days').to_pylist()):&gt;12,} drive-days")
        result = pa.concat_tables(parts)
        query_secs = time.perf_counter() - query_start

    write_start = time.perf_counter()
    LOCAL_DB.parent.mkdir(exist_ok=True)
    with duckdb.connect(str(LOCAL_DB)) as local:
        local.execute(f"CREATE OR REPLACE TABLE {RESULT_TABLE} AS SELECT * FROM result")
        rows_in, drive_days, failures = local.execute(
            f"SELECT count(*), sum(drive_days)::BIGINT, sum(failures)::BIGINT FROM {RESULT_TABLE}"
        ).fetchone()
        top = local.execute(f"""
            SELECT model, sum(drive_days)::BIGINT AS drive_days, sum(failures)::BIGINT AS failures,
                   round(sum(failures) * 365.0 * 100 / sum(drive_days), 2) AS afr_pct
            FROM {RESULT_TABLE}
            GROUP BY model
            HAVING sum(drive_days) &gt; 1000000
            ORDER BY afr_pct DESC
            LIMIT 10
        """).df()
    write_secs = time.perf_counter() - write_start

    print(f"  server scan + windows + fetch: {query_secs:.2f}s")
    print(f"  local DuckDB write:            {write_secs:.2f}s")
    print(f"  total wall clock:              {time.perf_counter() - total_start:.2f}s")
    print(f"  source rows processed:         {drive_days:,} drive-days, {failures:,} failures")
    print(f"  result:                        {rows_in:,} rows -&gt; {LOCAL_DB}:{RESULT_TABLE}")
    print("\n== Highest annualized failure rate (models with &gt;1M drive-days in range)")
    print(top.to_string(index=False))


if __name__ == "__main__":
    main()</code></pre></div><p>So, GizmoData Cloud gives you a ton of information and metrics about a running Cluster, how to connect to it from a variety of sources, etc. I was also able to check the Pod Logs in the UI and see a bunch of info; you can see our query running in the logs there. So we know it&#8217;s working!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21h2Fr%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h2Fr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png 424w, https://substackcdn.com/image/fetch/$s_!h2Fr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png 848w, https://substackcdn.com/image/fetch/$s_!h2Fr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png 1272w, https://substackcdn.com/image/fetch/$s_!h2Fr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21h2Fr%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png" width="1456" height="710" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:710,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:377352,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h2Fr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png 424w, https://substackcdn.com/image/fetch/$s_!h2Fr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png 848w, https://substackcdn.com/image/fetch/$s_!h2Fr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png 1272w, https://substackcdn.com/image/fetch/$s_!h2Fr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8a2e5c-0bb6-4a49-937c-6a7f891f7ee3_2424x1182.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I can also watch memory consumption on the cluster.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_EL7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png 424w, https://substackcdn.com/image/fetch/$s_!_EL7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png 848w, https://substackcdn.com/image/fetch/$s_!_EL7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png 1272w, https://substackcdn.com/image/fetch/$s_!_EL7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21_EL7%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png" width="1456" height="353" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:353,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:108809,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_EL7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png 424w, https://substackcdn.com/image/fetch/$s_!_EL7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png 848w, https://substackcdn.com/image/fetch/$s_!_EL7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png 1272w, https://substackcdn.com/image/fetch/$s_!_EL7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f0aae51-91ef-42dd-b5db-904a0e5af5f2_2384x578.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>So now, we just have to wait and get the results back.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash"> Monitor event: 2023-01-01 to 2023-04-01: 63.64s 21,454,992 drive-days &#183; cloud benchmark chunk progress
&#9210; The first chunk finished: Q1 2023, 21.5M drive-days in 63.6s.
&#9210; Monitor event: 2023-04-01 to 2023-07-01: 55.65s 21,835,156 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 2 of 12 (Q2 2023) finished: 21.8M drive-days in 55.7s.
&#9210; Monitor event: 2023-07-01 to 2023-10-01: 60.30s 23,601,986 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 3 of 12 (Q3 2023) took 60.3s and covered 23.6M drive-days.
&#9210; Monitor event: 2023-10-01 to 2024-01-01: 58.00s 24,790,999 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 4 of 12 (Q4 2023) finished in 58.0s, covering 24.8M drive-days.
&#9210; Monitor event: 2024-01-01 to 2024-04-01: 61.19s 25,189,213 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 5 of 12 (Q1 2024) finished in 61.2s and processed 25.2M drive-days. 
&#9210; Monitor event: 2024-04-01 to 2024-07-01: 64.88s 26,022,269 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 6 of 12 (Q2 2024) finished in 64.9s, 26.0M drive-days.
&#9210; Monitor event: 2024-07-01 to 2024-10-01: 65.45s 26,822,987 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 7 of 12 (Q3 2024) finished in 65.5s and covered 26.8M drive-days.
&#9210; Monitor event: 2024-10-01 to 2025-01-01: 87.33s 27,345,292 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 8 of 12 (Q4 2024) finished: 27.3M drive-days in 87.3s.
&#9210; Monitor event: 2025-01-01 to 2025-04-01: 128.81s 27,799,986 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 9 of 12 (Q1 2025) finished: 27.8M drive-days in 128.8s.
&#9210; Monitor event: 2025-04-01 to 2025-07-01: 137.52s 28,808,042 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 10 of 12 (Q2 2025) finished: 137.5s, 28.8M drive-days.
&#9210; Monitor event: 2025-07-01 to 2025-10-01: 141.31s 29,844,451 drive-days &#183; cloud benchmark chunk progress
&#9210; Chunk 11 of 12 (Q3 2025) finished in 141.3s, covering 29.8M drive-days. One chunk left.
&#9210; Monitor event: 2025-10-01 to 2026-01-01: 137.82s 30,941,708 drive-days</code></pre></div><ul><li><p>The 3-year run took 17 min 54 s (1,073.5s) on the 2-thread, 7.4 GiB Core cluster. </p></li></ul><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qAoL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png 424w, https://substackcdn.com/image/fetch/$s_!qAoL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png 848w, https://substackcdn.com/image/fetch/$s_!qAoL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png 1272w, https://substackcdn.com/image/fetch/$s_!qAoL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21qAoL%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png" width="1456" height="354" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:354,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:755629,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qAoL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png 424w, https://substackcdn.com/image/fetch/$s_!qAoL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png 848w, https://substackcdn.com/image/fetch/$s_!qAoL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png 1272w, https://substackcdn.com/image/fetch/$s_!qAoL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cc6b773-7011-41d3-90c8-37f64bd44beb_2212x538.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Well, if you look at the script, we made that small cluster work for its food! This is one of the things I love about these new DuckDB- and Arrow-based tools: you can run real workloads &#8230; hard ones &#8230; on affordable commodity hardware. <strong>They can handle it!</strong></p><div class="callout-block" data-callout="true"><p>For context, the GizmoData Cloud UI was easy to use and click around in, pretty straightforward; it only took me a few minutes to get the benchmark up and running. That&#8217;s always a good sign!</p></div><p>This is where you can really tell what a tool is made of. Lots of people will publish and release things with simple &#8220;Hello World&#8221; type benchmarks or local examples. The truth is you need to stress test a system.</p><ul><li><p><em>Throw cloud storage at it</em></p></li><li><p><em>Use small clusters to work on oversized data to see if it pukes</em></p></li><li><p><em>Use Iceberg or some other storage layer</em></p></li></ul><p>The time to test this sort of real-world use case isn&#8217;t after the fact.</p><h2>Thoughts on GizmoData</h2><p>I was pretty excited to try out Gizmo, especially given its large open-source footprint on GitHub. This is always one of the first things I look for, not that open-source is special &#8230; but it is. It lets us try something out and use it as much as we want, get to know it, understand it &#8230; in a way many companies don&#8217;t allow. </p><blockquote><p><em>Take DuckDB, wrap it in Arrow Flight SQL, harden it into a real client-server setup, and hand it to me. <mark data-color="#ffe599" style="background-color: rgb(255, 229, 153); color: rgb(0, 0, 0);">What more could a data guy ask for!?</mark> Within a few minutes of docker compose up, I was running SQL over Divvy CSV files, querying from Python through ADBC, and clicking around in an open-source UI. Then I did what I always do and tried to break it. </em></p></blockquote><p>Eight processes hammering it with writes and readers polling the whole time &#8230; and nothing broke. Add in dbt models, an Airflow DAG, and a quick sanity check that Iceberg and Delta Lake play nicely through DuckDB, and you start to see the picture.</p><p>I&#8217;m looking forward to seeing this platform grow and morph into something even bigger in the future. Some of the things I will be watching for in the future &#8230;</p><ul><li><p>First-class support for Unity and Polaris-type catalogs</p><ul><li><p><em>and then, by extension, Iceberg and Delta Lake</em></p></li></ul></li><li><p>First-class support for data pipelines</p><ul><li><p><em>could be from Airflow Operators or its own scheduling and DAG tool</em></p></li></ul></li></ul><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-arrowflight-gizmodata?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fduckdb-arrowflight-gizmodata%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="iframe.php?url=https%3A%2F%2Fgizmodata.com%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m-7l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp 424w, https://substackcdn.com/image/fetch/$s_!m-7l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp 848w, https://substackcdn.com/image/fetch/$s_!m-7l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp 1272w, https://substackcdn.com/image/fetch/$s_!m-7l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21m-7l%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp" width="860" height="200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:860,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17022,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://gizmodata.com/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219657209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m-7l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp 424w, https://substackcdn.com/image/fetch/$s_!m-7l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp 848w, https://substackcdn.com/image/fetch/$s_!m-7l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp 1272w, https://substackcdn.com/image/fetch/$s_!m-7l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc4e7bc3-db5b-4194-a37c-ce56690da581_860x200.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></a></figure></div><div id="youtube2-LiAKzVLbIyw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;LiAKzVLbIyw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="iframe.php?url=https%3A%2F%2Fwww.youtube-nocookie.com%2Fembed%2FLiAKzVLbIyw%3Frel%3D0%26amp%3Bautoplay%3D0%26amp%3Bshowinfo%3D0%26amp%3Benablejsapi%3D0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div>]]></content:encoded></item><item><title><![CDATA[Delta Kernel (with Rust). Doing stuff.]]></title><description><![CDATA[look at me go ma!]]></description><link>https://dataengineeringcentral.substack.com/p/delta-kernel-with-rust-doing-stuff</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/delta-kernel-with-rust-doing-stuff</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 19 Oct 2026 13:17:32 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21wTEQ%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21wTEQ%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wTEQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!wTEQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!wTEQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!wTEQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21wTEQ%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2119076,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wTEQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!wTEQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!wTEQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!wTEQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15a2ec6-48b1-4151-94e7-8856456c6925_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As the days and weeks trickle by and fall to the ground like the autumn leaves on the maple tree behind the house, my mind wanders back to the good ole&#8217; days when I had nothing in front of me except Notepad++, a terminal, and a problem to solve<strong> by myself</strong>. Those days are long gone, and Sir Claudius is threatening to turn me into a milquetoast programmer. Some days I feel like screaming (<em>in all caps</em>) at Claudius&#8230; &#8220;<em><mark data-color="#c9daf8" style="background-color: rgb(201, 218, 248); color: rgb(0, 0, 0);">Don&#8217;t you know I used to hand-roll Perl before you were born??!!!</mark></em>&#8221; Alas, I must find other ways to rage against the machine.</p><p>To keep my fingers young and flexible, and the grey matter inside my noggin pliable &#8230; I&#8217;ve written a few posts about going back to the basics <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fback-to-the-basics-threads">here</a> and <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fback-to-the-basics-recursion">here</a>, as well as <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fkeeping-technical-skills-in-the-age">how to keep our skills sharp in the age of AI</a>. Today builds on that topic. Not only are we going to write Rust by hand, but we are also going to flex the creativity muscles that seem to atrophy as quickly as they release new foundational models.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><blockquote><p>We will talk about something that might be new to most of you, the <a href="iframe.php?url=https%3A%2F%2Fdelta.io%2Fblog%2Fdelta-kernel%2F">Delta Kernel</a>, and then play with it in Rust, doing something useful.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fdelta.io%2Fblog%2Fdelta-kernel%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nv3H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png 424w, https://substackcdn.com/image/fetch/$s_!nv3H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png 848w, https://substackcdn.com/image/fetch/$s_!nv3H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!nv3H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21nv3H%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png" width="1456" height="411" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:411,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114896,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://delta.io/blog/delta-kernel/&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nv3H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png 424w, https://substackcdn.com/image/fetch/$s_!nv3H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png 848w, https://substackcdn.com/image/fetch/$s_!nv3H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png 1272w, https://substackcdn.com/image/fetch/$s_!nv3H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb769ca1f-720f-48f6-b7d9-fd3c4a3d95a4_2024x572.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>What and why of Delta Kernel.</h3><p>For anyone who&#8217;s played around in the Lakehouse world at all, you will be very familiar with <a href="iframe.php?url=https%3A%2F%2Fdelta.io%2F">Delta Lake</a>, one of the premier ways to build on data, a de facto standard for ACID interaction at scale. Of course, this rise in popularity of the Lakehouse architecture, combined with tools like Delta Lake to sit on top of storage systems like S3, has not been without its bumps in the road. These &#8230; &#8220;<em>opportunities for improvement</em>&#8221; have nothing to do with Delta itself, but with its popularity and the broader data tooling and community.</p><div><hr></div><div class="callout-block" data-callout="true"><p><a href="iframe.php?url=https%3A%2F%2Fnextquery.phoenixdata.ai%2F%3Futm_source%3Dpartner_email%26amp%3Butm_medium%3Demail%26amp%3Butm_campaign%3DFY26_PHX_OEV_NEXT_QUERY_2026%26amp%3Butm_content%3Dcreator-daniel-beach">Hosted by PhoenixAI, the creators of StarRocks, this free, one-day virtual summit takes place on November 4</a>. It brings together practitioners to talk about the systems behind modern analytics and AI: real-time data, lakehouse architectures, performance at scale, governance, and agentic workloads. </p><p>If you&#8217;re a data engineer wondering what happens to our data infrastructure as AI agents start asking the questions, <a href="iframe.php?url=https%3A%2F%2Fnextquery.phoenixdata.ai%2F%3Futm_source%3Dpartner_email%26amp%3Butm_medium%3Demail%26amp%3Butm_campaign%3DFY26_PHX_OEV_NEXT_QUERY_2026%26amp%3Butm_content%3Dcreator-daniel-beach"><mark data-color="rgb(249, 203, 156)" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">NEXT QUERY 2026 is worth checking out</mark></a>.</p><p>It&#8217;s less about AI hype and more about the hard engineering question: <strong>what does our data stack need to look like when the next query comes from an agent instead of a human?</strong> <a href="iframe.php?url=https%3A%2F%2Fnextquery.phoenixdata.ai%2F%3Futm_source%3Dpartner_email%26amp%3Butm_medium%3Demail%26amp%3Butm_campaign%3DFY26_PHX_OEV_NEXT_QUERY_2026%26amp%3Butm_content%3Dcreator-daniel-beach"><mark data-color="#f9cb9c" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">Check out NEXT QUERY 2026 and register for free.</mark></a></p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fnextquery.phoenixdata.ai%2F%3Futm_source%3Dpartner_email%26amp%3Butm_medium%3Demail%26amp%3Butm_campaign%3DFY26_PHX_OEV_NEXT_QUERY_2026%26amp%3Butm_content%3Dcreator-daniel-beach" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2eOC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png 424w, https://substackcdn.com/image/fetch/$s_!2eOC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png 848w, https://substackcdn.com/image/fetch/$s_!2eOC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!2eOC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%212eOC%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png" width="1456" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1508432,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://nextquery.phoenixdata.ai/?utm_source=partner_email&amp;utm_medium=email&amp;utm_campaign=FY26_PHX_OEV_NEXT_QUERY_2026&amp;utm_content=creator-daniel-beach&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2eOC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png 424w, https://substackcdn.com/image/fetch/$s_!2eOC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png 848w, https://substackcdn.com/image/fetch/$s_!2eOC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!2eOC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9b19b2-bfd8-43e0-b476-ac7b59b23570_2400x1260.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><blockquote><p>What happens when you have a large ecosystem of tooling, all running on their own clocks, using a single data layer?</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Nh0Y%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nh0Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png 424w, https://substackcdn.com/image/fetch/$s_!Nh0Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png 848w, https://substackcdn.com/image/fetch/$s_!Nh0Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png 1272w, https://substackcdn.com/image/fetch/$s_!Nh0Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Nh0Y%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png" width="654" height="323" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:323,&quot;width&quot;:654,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38585,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nh0Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png 424w, https://substackcdn.com/image/fetch/$s_!Nh0Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png 848w, https://substackcdn.com/image/fetch/$s_!Nh0Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png 1272w, https://substackcdn.com/image/fetch/$s_!Nh0Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2351db1d-ffc7-45ac-8c20-5eb377ed89e3_654x323.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Well, of course you run into many problems as the protocol changes, upgrades, improves, adds features, etc. I&#8217;ve had these issues for years when using tools like DuckDB and Polars in production, interacting with Databricks Delta Lake tables managed in and out of Unity. Versions change &#8230; deletion vectors are added; tools stop working &#8230; all of this is understandable. It&#8217;s hard for different orgs, probably overworked open-source hobbits, to keep up to date with each other.</p><ul><li><p>This is what Delta Kernel aims to solve.</p></li></ul><div class="callout-block" data-callout="true"><p><mark data-color="#d5a6bd" style="background-color: rgb(213, 166, 189); color: rgb(0, 0, 0);">Delta Kernel is a reusable library that lets any query engine correctly read and write Delta Lake tables without that engine having to implement the Delta Lake protocol itself.</mark></p></div><p>There are two versions of the Delta Kernel, and they are made to match the wider data ecosystems and the languages behind the tooling of the future; <a href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fdelta-io%2Fdelta-kernel-rs">Rust</a> and <a href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fdelta-io%2Fdelta%2Ftree%2Fmaster%2Fkernel">Java</a>. Part of the challenge external tools face when working with a Lakehouse and a protocol like the Delta Protocol is handling metadata, raw data, checkpoints, and all the necessary complexity that makes this technology possible. <strong>So, Delta Kernel gives tool builders and integrators a one-stop shop option to avoid some of that complexity.</strong></p><blockquote><p>Of course, we are going to test out that theory today by building a tool in Rust.</p></blockquote><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/delta-kernel-with-rust-doing-stuff?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/delta-kernel-with-rust-doing-stuff?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdelta-kernel-with-rust-doing-stuff%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h2>Trying out Rust + Delta Kernel.</h2><p>Ok, so the best way to learn the power of what the Delta Kernel can do for us is to thumb our nose at Claudius Maximus and build a tool ourselves to see what we can learn. Before we do that, let&#8217;s figure out the basic concepts behind the APIs Delta Kernel offers. Hopefully, we will find that it makes common Lakehouse functions very easy to perform. We will also need to come up with some little tool to build, something useful that will give the reason to write some Rust.</p><p><strong>Also, remember that the Delta Kernel is probably not for everyday use, but rather for those who want to build tools and integrations into existing tools.</strong></p><blockquote><p>I must say that the <a href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fdelta-io%2Fdelta-kernel-rs%2Ftree%2Fmain">GitHub for the Delta Kernel Rust</a> says it&#8217;s experimental, especially write, which is disappointing, but hopefully all comes to fruition.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fdelta-io%2Fdelta-kernel-rs%2Ftree%2Fmain" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RuTR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png 424w, https://substackcdn.com/image/fetch/$s_!RuTR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png 848w, https://substackcdn.com/image/fetch/$s_!RuTR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png 1272w, https://substackcdn.com/image/fetch/$s_!RuTR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21RuTR%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png" width="1456" height="406" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:406,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:166000,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://github.com/delta-io/delta-kernel-rs/tree/main&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RuTR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png 424w, https://substackcdn.com/image/fetch/$s_!RuTR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png 848w, https://substackcdn.com/image/fetch/$s_!RuTR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png 1272w, https://substackcdn.com/image/fetch/$s_!RuTR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf5c6c1e-ea3b-493c-b014-ca1672421a0a_1734x484.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The blog post that I was reading for my introduction to the Delta Kernel was already out of date. Sounds like things started with an easier <code>Table</code> API to read/write data, but that&#8217;s no more. Things are changing fast, and that&#8217;s ok; we will get through by hook or crook.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!67GS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png 424w, https://substackcdn.com/image/fetch/$s_!67GS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png 848w, https://substackcdn.com/image/fetch/$s_!67GS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png 1272w, https://substackcdn.com/image/fetch/$s_!67GS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%2167GS%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png" width="766" height="200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:766,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33837,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!67GS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png 424w, https://substackcdn.com/image/fetch/$s_!67GS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png 848w, https://substackcdn.com/image/fetch/$s_!67GS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png 1272w, https://substackcdn.com/image/fetch/$s_!67GS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3b12b22-1cfc-48d9-8d82-d273dd037106_766x200.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Let&#8217;s see if we can simply write some Rust code to read an existing Delta Lake table on <code>S3</code>. As far as I understand, what will happen when using the Delta Kernel for Rust &#8230; is this &#8230;</p><ul><li><p><code>Engine</code> is <code>how</code> to deal with <code>Delta</code></p></li><li><p><code>Snapshot</code> , <code>Scan</code>, or <code>Transaction</code> APIs for read/write</p></li></ul><p>Let&#8217;s say that we work for some consultant company that does a lot of Databricks and/or Delta Lake migrations of one sort or another. Play along with me here. We are some hobbits living in our mother's basement and are getting tired of trying to pull data in and out of Delta Lake to go between different accounts and systems. We need an <strong>Import</strong> and <strong>Export</strong> tool.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">cargo init delta-import-export</code></pre></div><p>Let&#8217;s start by dipping our toes in the water and simply reading a Delta Lake table stored in <code>S3</code>, see what the code looks like.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">cargo add delta_kernel
cargo add delta_kernel_default_engine --features rustls
cargo add clap --features derive
cargo add arrow
cargo add url
cargo add parquet --features arrow</code></pre></div><p>Ok, we have some of our core libraries we will use; next, let&#8217;s use <code>clap</code> as a way to build our import/export tool with some CLI command-line args that make sense in our case. Like <code>s3</code> location of a Delta table, <code>parquet</code> file location for data in/out, etc.</p><p>This will be our <code>lib.rs</code></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">use clap::{Parser, Subcommand};
use std::path::PathBuf;

#[derive(Parser, Debug)]
#[command(
    name = "delta-import-export",
    version,
    about = "Import and export Delta Lake tables"
)]
pub struct Args {
    #[command(subcommand)]
    pub command: Command,
}

#[derive(Subcommand, Debug)]
pub enum Command {
    Export {
        #[arg(short, long)]
        table: String,

        #[arg(short, long)]
        output: PathBuf,
    },

    Import {
        #[arg(short, long)]
        table: String,

        #[arg(short, long)]
        parquet: PathBuf,
    },
}</code></pre></div><p>And our <code>main.rs</code> stubbed out; we will talk about this all later. Honestly, it&#8217;s not that much code at all, and pretty much captures what I expected. The reason there is more code than you might think is because I&#8217;m not just printing the results of the <code>Delta Kernel</code> code to stdout; I&#8217;m actually using <code>Arrow</code> and <code>Parquet</code> crates, plus some logic with <code>clap</code> to capture command line args, and also push the results of the <code>Delta</code> table with <code>ArrowBatch</code> records out to a <code>parquet</code> file.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">use std::fs::File;
use std::path::PathBuf;
use std::sync::Arc;

use clap::Parser;
use delta_kernel::engine::arrow_data::EngineDataArrowExt;
use delta_kernel::object_store::aws::AmazonS3Builder;
use delta_kernel::Snapshot;
use delta_kernel_default_engine::DefaultEngineBuilder;
use parquet::arrow::ArrowWriter;
use parquet::basic::Compression;
use parquet::file::properties::WriterProperties;

#[derive(Parser, Debug)]
#[command(
    name = "delta-export",
    version,
    about = "Export an S3 Delta table to a local Parquet file"
)]
struct Args {
    #[arg(short, long)]
    table: String,

    #[arg(short, long)]
    output: PathBuf,
}

fn main() -&gt; Result&lt;(), Box&lt;dyn std::error::Error&gt;&gt; {
    let args = Args::parse();

    println!("Delta table: {}", args.table);
    println!("Output file: {}", args.output.display());

    let table_url = delta_kernel::try_parse_uri(&amp;args.table)?;
    let object_store = AmazonS3Builder::from_env()
        .with_url(&amp;args.table)
        .build()?;
    let engine = DefaultEngineBuilder::new(Arc::new(object_store)).build();

    let snapshot = Snapshot::builder_for(&amp;table_url).build(&amp;engine)?;
    println!("Delta version: {}", snapshot.version());
    let scan = snapshot.scan_builder().build()?;
    let batches = scan.execute(Arc::new(engine))?;

    let mut parquet_writer = None;
    let mut total_rows = 0usize;
    let mut batch_count = 0usize;

    for engine_data in batches {
        let batch = EngineDataArrowExt::try_into_record_batch(engine_data)?;

        if parquet_writer.is_none() {
            let file = File::create(&amp;args.output)?;

            let properties = WriterProperties::builder()
                .set_compression(Compression::SNAPPY)
                .build();

            parquet_writer = Some(ArrowWriter::try_new(
                file,
                batch.schema(),
                Some(properties),
            )?);
        }

        if let Some(writer) = parquet_writer.as_mut() {
            writer.write(&amp;batch)?;
        }

        total_rows += batch.num_rows();
        batch_count += 1;

        println!(
            "Batch {}: {} rows | total: {}",
            batch_count,
            batch.num_rows(),
            total_rows
        );
    }

    if let Some(writer) = parquet_writer {
        writer.close()?;
    }

    println!("Rows written: {}", total_rows);
    println!("Output: {}", args.output.display());

    Ok(())
}</code></pre></div><p>Here is a Delta Lake table for <code>hobbits</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21zhYM%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zhYM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png 424w, https://substackcdn.com/image/fetch/$s_!zhYM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png 848w, https://substackcdn.com/image/fetch/$s_!zhYM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png 1272w, https://substackcdn.com/image/fetch/$s_!zhYM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21zhYM%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png" width="1048" height="423" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:423,&quot;width&quot;:1048,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66955,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zhYM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png 424w, https://substackcdn.com/image/fetch/$s_!zhYM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png 848w, https://substackcdn.com/image/fetch/$s_!zhYM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png 1272w, https://substackcdn.com/image/fetch/$s_!zhYM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e5f3b5-a67b-4552-ab09-5a80f8f7da5b_1048x423.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This table is located at <code>s3://confessions-of-a-data-guy/hobbits</code>. Let&#8217;s get to the core of writing some simple code to read this <code>Delta</code> table we will pass in, and stream those records with <code>Arrow</code> out to a <code>parquet</code> file locally.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">cargo run -- \
  --table s3://confessions-of-a-data-guy/hobbits \
  --output ./hobbits.parquet

...

danielbeach@Daniels-MacBook-Pro-2 delta-import-export % cargo run -- \
  --table s3://confessions-of-a-data-guy/hobbits \
  --output ./hobbits.parquet
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.35s
     Running `target/debug/delta-import-export --table 's3://confessions-of-a-data-guy/hobbits' --output ./hobbits.parquet`
Delta table: s3://confessions-of-a-data-guy/hobbits
Output file: ./hobbits.parquet
Delta version: 1
Batch 1: 8 rows | total: 8
Rows written: 8
Output: ./hobbits.parquet</code></pre></div><p>There we go! We have less than 100 lines of <code>Rust</code> code all in, and we can export a remote <code>S3</code> Delta table to a <code>parquet</code> file. Of course, in the real world we would want to control batch sizes, etc in massive tables, but you get the drift. Of course, a little later we can add some code to do the opposite, maybe push local files <code>CSV</code>, <code>parquet</code>, etc.) back up to a brand new or existing <code>Delta</code> table. Let&#8217;s talk about some of the <code>Delta Kernel</code> API code we see exposed to us.</p><ul><li><p><em>First, we can see how easy the </em><code>Kernel</code><em> made it to use the </em><code>Engine</code><em> to set up a remote </em><code>S3</code><em> located bunch of tables without much fuss. This is a good thing because this is the real world after all. Nothing is worse than a good tool made to work locally that chokes on reality.</em></p></li></ul><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">let table_url = delta_kernel::try_parse_uri(&amp;args.table)?;

let object_store = AmazonS3Builder::from_env()
        .with_url(&amp;args.table)
        .build()?;

let engine = DefaultEngineBuilder::new(Arc::new(object_store)).build()</code></pre></div><p>Things that are happening here behind the hood are all the nitty-gritty details of dealing with the Delta <code>Protocol</code> itself. Remember, we are dealing with a layer on top of a storage engine with multiple files: data files, metadata files, checkpoints, etc., all stored in specific places and structures that need to be interacted with in a certain way. The <code>Kernel</code> is doing all that for us &#8230; on <code>S3</code>! This makes our life wayyyy easier.</p><ul><li><p>Where is the Delta Table located</p></li><li><p>How do I talk to <code>S3</code> to get what I need?</p></li><li><p>Build an <code>Engine</code> for the <code>Kernel</code> that can do this talk.</p></li></ul><p>Next, now that we have an <code>Engine</code> ready to go, we can do the very obvious task that is not surprising at all to anyone who&#8217;s played around with <code>Arrow</code> or any modern Lakehouse architecture.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">let snapshot = Snapshot::builder_for(&amp;table_url).build(&amp;engine)?;
println!("Delta version: {}", snapshot.version());
let scan = snapshot.scan_builder().build()?;
let batches = scan.execute(Arc::new(engine))?;</code></pre></div><p>We basically get the latest <code>snapshot</code> of the <code>Delta</code> table; in theory, we could get any point in time &#8230; <code>scan</code> it, so basically build a <code>query</code>, and then get an iterator on those results in <code>batches</code>. Pretty easy and obvious stuff. This is what makes the <code>Kernel</code> so powerful, as you can see. Think about how much easier this makes our life if we are maintainers of <code>DuckDB</code> , <code>Polars</code>, <code>Daft</code> or any other tool, like the one we are building. <mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">We don&#8217;t need to become experts in the </mark><code>Delta Protocol</code><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);"> just to read and write some data. The </mark><code>Kernel</code><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);"> does the hard work; we can just worry about integration into our tool.</mark></p><blockquote><p>I don&#8217;t really feel like going through the rest of the code to talk about how we flush those <code>batches</code> to <code>parquet</code>, that is just normal <code>io</code> and <code>file</code> work stuff.</p></blockquote><p>Let&#8217;s add some functionality to <code>create</code> a new <code>Delta</code> table and do the reverse, flush local records up to a remote table. This should show us what it&#8217;s like to do a <code>Transaction</code> for a Lakehouse, which is an extremely important feature and topic. We all like <code>READ</code> tools, but <code>WRITE</code> is where the power is at.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/delta-kernel-with-rust-doing-stuff?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/delta-kernel-with-rust-doing-stuff?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdelta-kernel-with-rust-doing-stuff%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">use std::fs::File;
use std::path::PathBuf;
use std::sync::Arc;

use arrow_csv::reader::Format;
use arrow_csv::ReaderBuilder;
use clap::Parser;
use delta_kernel::committer::FileSystemCommitter;
use delta_kernel::engine::arrow_conversion::TryIntoKernel;
use delta_kernel::engine::arrow_data::ArrowEngineData;
use delta_kernel::object_store::aws::AmazonS3Builder;
use delta_kernel::transaction::create_table::create_table;
use delta_kernel::transaction::{CommitResult, RetryableTransaction};
use delta_kernel::Snapshot;
use delta_kernel_default_engine::DefaultEngineBuilder;

#[derive(Parser, Debug)]
#[command(name = "delta-import", version)]
struct Args {
    #[arg(short, long)]
    table: String,

    #[arg(short, long)]
    csv: PathBuf,
}

#[tokio::main]
async fn main() -&gt; Result&lt;(), Box&lt;dyn std::error::Error&gt;&gt; {
    let args = Args::parse();

    println!("CSV: {}", args.csv.display());
    println!("Delta table: {}", args.table);

    let table_url = delta_kernel::try_parse_uri(&amp;args.table)?;
    let object_store = AmazonS3Builder::from_env()
        .with_url(&amp;args.table)
        .build()?;

    let engine = DefaultEngineBuilder::new(Arc::new(object_store)).build();
    let schema_file = File::open(&amp;args.csv)?;
    let format = Format::default().with_header(true);
    let (arrow_schema, _) = format.infer_schema(schema_file, Some(1000))?;

    println!("Schema: {arrow_schema:#?}");

    let kernel_schema = Arc::new(
        (&amp;arrow_schema).try_into_kernel()?
    );

    println!("Creating Delta table...");

    create_table(
        &amp;args.table,
        kernel_schema,
        "delta-import-export/0.1.0",
    )
    .build(
        &amp;engine,
        Box::new(FileSystemCommitter::new()),
    )?
    .commit(&amp;engine)?;

    println!("Delta table created.");

    let snapshot = Snapshot::builder_for(table_url.clone())
        .build(&amp;engine)?;

    let mut transaction = snapshot
        .transaction(
            Box::new(FileSystemCommitter::new()),
            &amp;engine,
        )?
        .with_operation("WRITE".to_string())
        .with_engine_info("delta-import-export/0.1.0")
        .with_data_change(true);

    let write_context = transaction
        .write_state()?
        .write_context_builder()
        .build()?;

    let csv_file = File::open(&amp;args.csv)?;

    let csv_reader = ReaderBuilder::new(
        Arc::new(arrow_schema)
    )
    .with_header(true)
    .with_batch_size(8192)
    .build(csv_file)?;

    let mut total_rows = 0usize;

    for batch in csv_reader {
        let batch = batch?;
        total_rows += batch.num_rows();
        println!("Writing batch: {} rows", batch.num_rows());
        let data = ArrowEngineData::new(batch);

        let file_metadata = engine
            .write_parquet(
                &amp;data,
                &amp;write_context,
            )
            .await?;
        transaction.add_files(file_metadata);
    }

    let mut retries = 0;
    let committed = loop {
        if retries &gt; 5 {
            return Err("Exceeded maximum commit retries".into());
        }
        transaction = match transaction.commit(&amp;engine)? {
            CommitResult::Committed(committed) =&gt; {
                break committed;
            }
            CommitResult::Conflicted(conflicted) =&gt; {
                return Err(
                    format!(
                        "Transaction conflict at version {}",
                        conflicted.conflict_version()
                    )
                    .into()
                );
            }
            CommitResult::Retryable(
                RetryableTransaction {
                    transaction,
                    error,
                }
            ) =&gt; {
                println!("Retrying commit: {error}");
                transaction
            }
        };
        retries += 1;
    };

    println!(
        "Committed Delta version: {}",
        committed.commit_version()
    );
    println!("Rows written: {}", total_rows);
    Ok(())
}</code></pre></div><p>And let&#8217;s run it before we talk about the code.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">danielbeach@Daniels-MacBook-Pro-2 delta-import-export % export AWS_DEFAULT_REGION="us-east-1"
cargo run -- \
  --table s3://confessions-of-a-data-guy/hobbits-new \
  --csv ./hobbits.csv
  --&gt; src/main.rs:56:5
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.35s
     Running `target/debug/delta-import-export --table 's3://confessions-of-a-data-guy/hobbits-new' --csv ./hobbits.csv`
CSV: ./hobbits.csv
Delta table: s3://confessions-of-a-data-guy/hobbits-new
Schema: Schema {
    fields: [
        Field {
            name: "hobbit_id",
            data_type: Int64,
            nullable: true,
        },
        Field {
            name: "name",
            data_type: Utf8,
            nullable: true,
        },
        Field {
            name: "family_name",
            data_type: Utf8,
            nullable: true,
        },
        Field {
            name: "age",
            data_type: Int64,
            nullable: true,
        },
        Field {
            name: "home",
            data_type: Utf8,
            nullable: true,
        },
        Field {
            name: "occupation",
            data_type: Utf8,
            nullable: true,
        },
        Field {
            name: "favorite_food",
            data_type: Utf8,
            nullable: true,
        },
        Field {
            name: "ring_bearer",
            data_type: Boolean,
            nullable: true,
        },
        Field {
            name: "adventures",
            data_type: Int64,
            nullable: true,
        },
        Field {
            name: "last_updated",
            data_type: Timestamp(
                Millisecond,
                None,
            ),
            nullable: true,
        },
    ],
    metadata: {},
}
Creating Delta table...
Delta table created.
Writing batch: 8 rows
Committed Delta version: 1
Rows written: 8</code></pre></div><p>We should double-check <code>S3</code> to see if it&#8217;s actually there, which indeed it is.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%217gLX%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7gLX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png 424w, https://substackcdn.com/image/fetch/$s_!7gLX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png 848w, https://substackcdn.com/image/fetch/$s_!7gLX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png 1272w, https://substackcdn.com/image/fetch/$s_!7gLX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%217gLX%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png" width="1456" height="661" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:661,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:269386,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7gLX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png 424w, https://substackcdn.com/image/fetch/$s_!7gLX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png 848w, https://substackcdn.com/image/fetch/$s_!7gLX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png 1272w, https://substackcdn.com/image/fetch/$s_!7gLX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cc7ce16-ed55-444f-b059-8fdb63b09e73_2084x946.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s talk about this code a little bit; of course, we can expect it to be a little more complicated because we are, after all, making a commit into a Delta table. Let&#8217;s not talk about race conditions and pushing commits through Unity Catalog so we can deal with the reality of multiple writers. That&#8217;s for another day.</p><p>It&#8217;s very easy to <code>create</code> a table, which is nice.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">create_table(
        &amp;args.table,
        kernel_schema,
        "delta-import-export/0.1.0",
    )
    .build(
        &amp;engine,
        Box::new(FileSystemCommitter::new()),
    )?
    .commit(&amp;engine)?;</code></pre></div><p>Next, we had to do the work of <code>snapshot</code> and <code>transaction</code>.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">let snapshot = Snapshot::builder_for(table_url.clone())
        .build(&amp;engine)?;

let mut transaction = snapshot
        .transaction(
            Box::new(FileSystemCommitter::new()),
            &amp;engine,
        )?
        .with_operation("WRITE".to_string())
        .with_engine_info("delta-import-export/0.1.0")
        .with_data_change(true);

let write_context = transaction
        .write_state()?
        .write_context_builder()
        .build()?;</code></pre></div><p>Pretty straightforward even though it might look like a mess; this isn&#8217;t really too bad to make a <code>commit</code> into the transaction log for Delta Lake. We just grab a <code>snapshot</code> and do the <code>WRITE</code> operation.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">transaction = match transaction.commit(&amp;engine)? {
            CommitResult::Committed(committed) =&gt; {
                break committed;
            }</code></pre></div><p>Of course we gotta do retries and all that jazz in the production code. I think the bigger picture of what is going on here is more important than the details or the code. What we&#8217;ve seen here is the very basics; if you are an astute user of the Lakehouse, the first question might be &#8230; what about real Unity Catalog Lakehouses &#8230; what about multiple writers in large systems?</p><ul><li><p>Never fear, it appears there are some <a href="iframe.php?url=https%3A%2F%2Fdocs.delta.io%2Fkernel%2Frust%2Funity_catalog%2Foverview">Unity Catalog crates to deal with just this problem.</a></p></li></ul><p>So our code still does its job, but the Unity crates would add that extra layer of support. Maybe we will get to that later.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21JN_s%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JN_s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png 424w, https://substackcdn.com/image/fetch/$s_!JN_s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png 848w, https://substackcdn.com/image/fetch/$s_!JN_s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png 1272w, https://substackcdn.com/image/fetch/$s_!JN_s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21JN_s%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png" width="1456" height="422" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:422,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:275023,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JN_s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png 424w, https://substackcdn.com/image/fetch/$s_!JN_s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png 848w, https://substackcdn.com/image/fetch/$s_!JN_s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png 1272w, https://substackcdn.com/image/fetch/$s_!JN_s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b36c127-1430-4d08-97e6-b51fd4b340d6_2638x764.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>The real winner-winner chicken dinner.</h3><p>Sure, we could keep walking down this road, adding more features to my little CLI tool, getting <code>Unity</code> crates wired up so we can hit production tables with read/writes and not worry about losing our job. But I think that the more exciting and less talked about topic is <mark data-color="#a4c2f4" style="background-color: rgb(164, 194, 244); color: rgb(0, 0, 0);">the fact that this even exists in the first place.</mark> Let me get up on my soapbox and preach to you for a moment. </p><p>Let me ask you a question, and I will answer it for you. When was the last time you saw such a production-ready, hardened, and open-source Lake House architecture as what we are discussing here <code>Delta Kernel</code>? People like to froth at the mouth and complain about vendor lock-in and Databricks and all that jazz. That's an unfair argument of half-truths that ignores the truth of the matter.</p><div class="callout-block" data-callout="true"><p>If you look at what is actually going on here, no one, NO ONE is doing more to bring the Lakehouse to the masses and open up the box to the world than the Databricks and Delta Lake workers.</p></div><p>The reason that no one sees that work much, or appreciates it, is because these <code>Kernel</code> crates, for example, are built for a small audience: companies like ClickHouse that want to build first-class support into the Delta and Unity Lakehouse architecture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.openlakehouse.io%2Fblog%2Fdelta-lake%2Fclickhouse-delta-kernel" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NtrT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png 424w, https://substackcdn.com/image/fetch/$s_!NtrT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png 848w, https://substackcdn.com/image/fetch/$s_!NtrT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png 1272w, https://substackcdn.com/image/fetch/$s_!NtrT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21NtrT%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png" width="1456" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:393556,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.openlakehouse.io/blog/delta-lake/clickhouse-delta-kernel&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218938225?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NtrT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png 424w, https://substackcdn.com/image/fetch/$s_!NtrT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png 848w, https://substackcdn.com/image/fetch/$s_!NtrT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png 1272w, https://substackcdn.com/image/fetch/$s_!NtrT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e2eda07-224e-4e1e-85c7-433ec77441b9_1492x830.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These <code>Kernel</code> and <code>Unity</code> crates basically allow for the building of the backbone infrastructure on which the tools you and I use every day as the average data community engineer do what we want to do. We just don&#8217;t know it because others are doing the hard work of exposing these APIs for folks like <code>DuckDB</code> to take advantage of, and then you and I get to write <a href="iframe.php?url=https%3A%2F%2Fduckdb.org%2Fdocs%2Flts%2Fcore_extensions%2Funity_catalog">a few lines of </a><code>DuckDB</code><a href="iframe.php?url=https%3A%2F%2Fduckdb.org%2Fdocs%2Flts%2Fcore_extensions%2Funity_catalog"> code that connects to Delta Table and does magic.</a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Modern CDP Manifesto]]></title><description><![CDATA[Building a Modern (agentic) Customer Data Platform From the Ground Up]]></description><link>https://dataengineeringcentral.substack.com/p/the-modern-cdp-manifesto</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/the-modern-cdp-manifesto</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Wed, 14 Oct 2026 14:31:26 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21ZfTz%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21ZfTz%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZfTz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!ZfTz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!ZfTz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!ZfTz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21ZfTz%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1825373,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/219146417?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZfTz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!ZfTz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!ZfTz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!ZfTz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19812e47-0e21-4c6c-8a02-dce03012ae92_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Today, we are starting a new series in partnership with <a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629">Rudderstack</a>. Over the next several months, we'll explore <a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2Fblog%2Fwhat-is-a-customer-data-platform-cdp%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629">modern CDPs</a> and how they are evolving in the Age of the Agent. We'll explore both concepts and the fingers-to-the-keyboard, hard-hitting technical details, and how the face of customer data is changing as the &#8220;<em>prompt</em>&#8221; becomes the primary interface between user and data. Also, in the future, look forward to some great video content on CDPs in conjunction with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Hoyt Emerson&quot;,&quot;id&quot;:7776215,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e4051af-ed5b-416e-89ec-a3f2e3c6ac2f_1750x1750.png&quot;,&quot;uuid&quot;:&quot;fcb1e91e-5fa1-4856-8d6e-d3b17d9ba84a&quot;}" data-component-name="MentionToDOM"></span> / <a href="iframe.php?url=https%3A%2F%2Fwww.earlysignal.tech%2F">Early Signal</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MZDT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21MZDT%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg" width="1456" height="504" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:504,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.rudderstack.com/?utm_source=data-engineering-central&amp;utm_medium=referral&amp;utm_campaign=CMPGN_1_LL&amp;utm_content=modern-cdp-blog&amp;raid=09d6a242da9256db3aae1a132c924629&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MZDT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>What is a CDP and why is it important?</strong></h2><p>Many people may not have really sat down to consider what a&nbsp;<em><mark data-color="#a2c4c9" style="background-color: rgb(162, 196, 201); color: rgb(0, 0, 0);">customer data platform (CDP)</mark></em>&nbsp;is. I can say this is true for myself, even as someone who&#8217;s been in data for two decades, lived through the data upheavals from HDFS to Spark, and from SQL Server to the Lake House. I&#8217;ve seen customer records spread across various systems, both internal and external, stored in SQL Server, exported to Athena, pulled from Salesforce, combined in Tableau&#8230; and everything in between. The list of tools, sources, and types of data is as varied as the sand on the seashore, shifting and changing just as much too.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>There have also been some major shifts and axioms in the data landscape at large over the last decade, including the recent Wild West of Agents; it might do us well to review and set the stage for what a CDP was, is, and could be in the future. This will be part history lesson, part speculation about the future.</p><div><hr></div><h3><strong>The Explosion of Customer Data.</strong></h3><p>It&#8217;s no surprise to anyone in the data community that the last decade has been one full of extreme shifts in technology and business requirements in and around the technology landscape. The <strong>size</strong>, <strong>velocity</strong>, and <strong>types</strong> of data have ballooned and changed rapidly. As well, the demands from different business units regarding how data is <strong>consumed</strong>, made <strong>available</strong>, and <strong>analyzed</strong> have become complex and demanding from a technology perspective.</p><ul><li><p><em>Size, velocity, and types of data have ballooned</em></p></li><li><p><em>Business and data consumption requirements have exploded</em></p></li></ul><p>Most people who work in data grapple with these problems daily. To top it all off, customer data in particular has come to be seen as the golden key that unlocks that elusive &#8220;<em>business value</em>.&#8221; This <strong>pressure</strong> on customer data creates many technological demands for data teams tasked with turning complex, far-flung ideas into reality. <strong>This intersection of the &#8220;ideal&#8221; living, breathing customer dataset and the technology is where the rubber truly meets the road. </strong>At some point, Engineering and Data teams cannot hide behind an endless list of JIRA tasks for technology migrations; we must produce and enable real business value from our data so the business(es) we operate in can succeed.</p><div class="callout-block" data-callout="true"><p>This leaves most Data and Engineering Teams in a strange space; a difficult set of problems that are half art and half science.</p></div><ul><li><p>We must bring the right technology to bear to wrangle, store, serve, and make sense of a complex set of data from both internal and external systems. Oftentimes with near-real-time demands.</p><ul><li><p><em><strong>These are technical challenges</strong></em></p><ul><li><p>ex., everyone can use Kafka or Spark.</p></li></ul></li></ul></li><li><p>We must do the above (<em>technical work</em>) with diverse business units in mind, including agentic ones that apply various critical business logic and needs.</p><ul><li><p><em><strong>These are more philosophical and business-specific.</strong></em></p><ul><li><p>e.g., everyone&#8217;s definition of what a customer lifecycle is is different.</p></li></ul></li></ul></li></ul><p>Both the technological and business-centric demands are, each in their own right, difficult problems to solve well. They require well-thought-out technical systems architecture and design skills married to an extreme Product and Business focus that seeks to understand how the technology can meet the needs of and provide access to the (<em>customer</em>) data in such a way that enables the business to understand, serve, and act upon their customers in a way their competitors can&#8217;t, or don&#8217;t.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/the-modern-cdp-manifesto?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/the-modern-cdp-manifesto?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fthe-modern-cdp-manifesto%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21IwK4%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IwK4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png 424w, https://substackcdn.com/image/fetch/$s_!IwK4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png 848w, https://substackcdn.com/image/fetch/$s_!IwK4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png 1272w, https://substackcdn.com/image/fetch/$s_!IwK4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21IwK4%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png" width="1132" height="948" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:948,&quot;width&quot;:1132,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IwK4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png 424w, https://substackcdn.com/image/fetch/$s_!IwK4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png 848w, https://substackcdn.com/image/fetch/$s_!IwK4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png 1272w, https://substackcdn.com/image/fetch/$s_!IwK4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8d9fbe7-c3e1-4e1d-82d7-3c16f7bc48a7_1132x948.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The last few decades have been the same, especially for those organizations with long histories and a complex distribution of technology bought and built to maintain and run the business. Old-school mainframes, various ERP systems of all shapes and sizes, websites and apps, databases in the cloud and some in a server closet; of course, sprinkled in is the odd SaaS platform the long line of CTOs purchased. The odd assortment of tools couldn&#8217;t be more different, and the data team tasked with bringing it all together in one spot is not to be envied. Even after that herculean task is completed, or maybe it never is finished, the real hard work has not even begun.</p><blockquote><p><mark data-color="#f9cb9c" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">Various business units using these widespread tools, all with different definitions and measurements, have to be understood and information pried out, just so the odd out-of-date Dashboard can be built over and over again, leaving a long line of analytics experts crying in the wake.</mark></p></blockquote><p>If it sounds like I&#8217;ve experienced these joys, you would be right in guessing that. Customer data, in particular, is especially complex because it requires precise collection, identification, and monitoring, while business units compete to consume and use it. This doesn&#8217;t even account for the brittle, custom, legacy code and data pipelines that try to wrangle this data from its various sources into that ever-elusive &#8220;single source of truth.&#8221; Of course, combine this with the need for self-serve data, and now consumption by Agentic tooling &#8230; it&#8217;s enough to leave any CTO with a case of the shakes.</p><p>Truth be told &#8230;</p><ul><li><p><em>every line of custom code pulling/pushing data is a liability</em></p></li><li><p><em>every pipeline and custom connection a breakpoint</em></p></li><li><p><em>scattered business logic is the never-ending problem</em></p></li><li><p><em>running a cloud data warehouse/lakehouse is a challenging problem in itself</em></p></li><li><p><em>building customer profiles and features is rarely ever even accomplished</em></p></li><li><p><em>integrating said customer data downstream into x, y, z marketing/sales/product etc tooling.</em></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%218db_%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8db_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png 424w, https://substackcdn.com/image/fetch/$s_!8db_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png 848w, https://substackcdn.com/image/fetch/$s_!8db_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png 1272w, https://substackcdn.com/image/fetch/$s_!8db_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%218db_%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png" width="568" height="251" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45044fa2-792e-43d1-aeba-727bb491d518_568x251.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:251,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8db_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png 424w, https://substackcdn.com/image/fetch/$s_!8db_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png 848w, https://substackcdn.com/image/fetch/$s_!8db_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png 1272w, https://substackcdn.com/image/fetch/$s_!8db_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45044fa2-792e-43d1-aeba-727bb491d518_568x251.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Of course, any astute observer will notice we conveniently left out the underlying discussion around technology &#8230; aka how the data actually flows through the system, is stored, governed, and acted upon. One could argue that historically, this was the more labor-intensive part of the process for most teams. This centers around discussion of storage solutions, databases, pipelines, code, architecture, governance, permissions; just a few pieces of the puzzle.</p><p>That being said, any good architect or staff/principal engineer who is tasked with, say, building a CDP or migration from scratch: these technology discussions are the ones that would probably keep them awake at night, mostly because they are non-negotiable pieces that have to be decided and built; otherwise, the entire stack would not operate. Think of them as table stakes: we need compute, data storage, data pipelines, governance, connections to other systems, etc., before we even get to the fun stuff of business logic and requirements. Heck, I&#8217;m sweating just writing about it.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D3Br!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png 424w, https://substackcdn.com/image/fetch/$s_!D3Br!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png 848w, https://substackcdn.com/image/fetch/$s_!D3Br!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png 1272w, https://substackcdn.com/image/fetch/$s_!D3Br!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21D3Br%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png" width="906" height="240" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:240,&quot;width&quot;:906,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D3Br!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png 424w, https://substackcdn.com/image/fetch/$s_!D3Br!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png 848w, https://substackcdn.com/image/fetch/$s_!D3Br!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png 1272w, https://substackcdn.com/image/fetch/$s_!D3Br!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc702952e-4dc9-4e0f-85b5-73095d1cb963_906x240.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><div><hr></div><h2><strong>So... what exactly is a CDP from a technical perspective?</strong></h2><p>So the more observant, technically savvy, and seasoned data professional at this point might have more questions than answers. Most likely, it wasn&#8217;t necessary to convince some of you, as I tried to convey in what we just covered, that dealing with customer data is very complicated from a business perspective, let alone adding gory details of the required implementation details like governance or storage. How can we define a Customer Data Platform? <em>We can&#8217;t build what we don&#8217;t clearly define.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/the-modern-cdp-manifesto?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fthe-modern-cdp-manifesto%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p><blockquote><p><mark data-color="#ffe599" style="background-color: rgb(255, 229, 153); color: rgb(0, 0, 0);">A CDP is, at its core, the underlying infrastructure that a business relies on to collect, identify, model, govern, and make said data available (activate) to systems and people.</mark></p></blockquote><p>We can&#8217;t make the classic engineering mistake of getting drawn like a fly to the light where we focus on the non-additive pieces of the infrastructure and technology problem. For example, if we built the best Data Warehouse money can buy, we&#8217;d barely move the needle on the deliverables that make or break a CDP.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jPxR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jPxR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jPxR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jPxR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jPxR%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg" width="1456" height="279" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:279,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jPxR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jPxR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jPxR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jPxR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e39707b-2114-4900-9455-379399f50dfc_1456x279.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>We don&#8217;t want to think of a CDP as simply &#8220;<em>another database</em>&#8221;; in fact, it is quite the opposite. What makes a CDP Platform much more than just a database with permissions is the ability within the confines of that CDP system to gather disparate data sources in a single spot, identify (<em>who is this customer/users</em>), model (<em>transform, join, analyze</em>), govern, and share said customer data. To say this another way &#8230; a CDP can answer, at a minimum &#8230;</p><div class="callout-block" data-callout="true"><p>Who is this customer, what do we know about them in their entirety, what&#8217;s happening right now, and which systems or people(s) can and should act on this customer, how can we analyze this customer and their data?</p></div><p>What seems like a simple data flow on the surface can turn into truly complex technical architecture behind the scenes. We have to solve the same classic data problems from an engineering perspective, answering the question: how can we get to the desired end state with the least complexity, quickly, while delivering the desired results?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21o4v9%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o4v9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o4v9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o4v9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o4v9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21o4v9%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o4v9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o4v9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o4v9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o4v9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9960f64e-0f21-4bc4-b5fc-8107a69665ef_1200x675.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>What a CDP is not (or used to be)!</strong></h4><p>I&#8217;ve experienced the pain of hand-rolled customer data solutions in the past, and it is exactly what you think it is, or can guess at. It was and is a painful process involving Data Science, Product, and Engineering, at the very least. A Data Scientist would request data from a Data Analyst, who in turn works with Engineering to access complex, stale customer data. At this point, a long process ensues where unmanaged, unreviewed SQL queries a mile long get written and rewritten.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nHTv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nHTv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nHTv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nHTv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21nHTv%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg" width="1456" height="303" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:303,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nHTv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nHTv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nHTv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nHTv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23ccc1c3-cc9e-46b0-87c5-e8862ac900e6_1456x303.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>At some point, one of the result sets is exported to Excel, passed around various groups, and then returns to its owner. Of course, what follows is even more convoluted; custom campaigns are created, passed around, and inserted into some database; questions arise about the customers, the campaigns, who has access to what, and where that nasty SQL is stored on some laptop. This is a real scenario I've experienced. What characterizes a system like this?</p><ul><li><p><em>not a cohesive system</em></p></li><li><p><em>no overarching governance</em></p></li><li><p><em>manual processes at every step</em></p></li><li><p><em>stale data and technology</em></p></li><li><p><em>nearly impossible to build a cohesive customer story</em></p></li><li><p><em>external data/system integration is complex</em></p></li></ul><p>We live in an always-on digital world where the data never sleeps. Streaming sources and events are the new norm, replacing once-dominant daily batch systems. Also, with the Lake House taking center stage in the battle for data dominance, you want CDP integrations that allow it to act as an extension of a larger Data Platform context. For example,<a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2Fintegration%2Fdatabricks-source%2F"> Databricks</a> or<a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2Fintegration%2Fsnowflake-source%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629"> Snowflake</a> integration as data sources, both in and out, is critical. Good architects and engineers look to reduce complexity and overhead while delivering real, actionable value from customer data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21mUS0%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mUS0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mUS0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mUS0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mUS0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21mUS0%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mUS0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mUS0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mUS0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mUS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2310781d-e3fb-4bdd-af5d-98d1820e42e8_1200x675.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Letting a Warehouse or Lakehouse do what it does well (<em>store and make data available at scale</em>), while enabling a<a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2Fblog%2Fidentity-graph%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629"> CDP that can solve the complex problem of customer identity across devices and datasets</a>; this is where the differentiator lies from both a technical perspective, as well as a business<a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2Fblog%2Fwhat-is-data-activation%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629"> customer data activation</a> standpoint.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/the-modern-cdp-manifesto?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/the-modern-cdp-manifesto?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fthe-modern-cdp-manifesto%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h3><strong>Agents have changed the game.</strong></h3><p>Of course, like every other facet of business, technology, and life, the Agent revolution has upended what was previously possible in automation, analysis, and action based on real-time customer events. The fast pace of change and improvement in foundational models and agentic harnesses has both positive and negative consequences and requirements, many of which have serious implications from a CDP perspective. These agentic challenges raise real, hard-hitting questions about accuracy, observability, reliability, safety, and governance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21YMAJ%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YMAJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YMAJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YMAJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YMAJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21YMAJ%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YMAJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YMAJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YMAJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YMAJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61910ea6-a636-4afa-bb55-ba2647830c2b_1200x675.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>If a modern CDP has any chance of acting as an interface for agents, a few core tenets must be true from the beginning.</p></blockquote><ul><li><p><em>Code-based rather than UI based interfaces.</em></p></li><li><p><em>Machine-readable infrastructure.</em></p></li><li><p><em>Fresh data and context.</em></p></li><li><p><em>Deterministic customer identity resolution.</em></p></li><li><p><em>Valid schemas, contracts, and data quality.</em></p></li><li><p><em>Explicit governance at all levels.</em></p></li><li><p><em>Explicit agentic boundaries.</em></p></li><li><p><em><a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2Fblog%2Frudderstack-mcp-customer-data-pipelines%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629">MCPs</a>, APIs,<a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2Fdocs%2Fdev-tools%2Frudder-cli%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629"> CLIs</a></em></p></li></ul><p>The Agentic needs are very real and growing quickly. AI provides a very real way for a modern CDP to benefit from automation, analysis, and action. But that's impossible when you just throw it on top of a system that isn&#8217;t designed to handle that complexity or use case. When we give agents access to real data, we need real boundaries around what data they can access, how, by whom, and how they can use it. Building a chatbot on top of datasets can be mildly useful, but to unlock the full potential of an agentic approach,<a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2Fblog%2Fintroducing-rudderai%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629">&nbsp;agents must be able to take action.</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21GP_i%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GP_i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png 424w, https://substackcdn.com/image/fetch/$s_!GP_i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png 848w, https://substackcdn.com/image/fetch/$s_!GP_i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png 1272w, https://substackcdn.com/image/fetch/$s_!GP_i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21GP_i%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png" width="1368" height="986" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:986,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GP_i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png 424w, https://substackcdn.com/image/fetch/$s_!GP_i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png 848w, https://substackcdn.com/image/fetch/$s_!GP_i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png 1272w, https://substackcdn.com/image/fetch/$s_!GP_i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43beb861-59c7-4ef9-8485-c26094a0f5d5_1368x986.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Inserting Agents into the data flows gives Marketers, Product Managers, and business users the ability to build automations around previously hard-to-manage lifecycles and analysis; this takes the burden off of slow-moving, human-centric processes to pull data, analyze, create, and act. Using natural language enables business-minded power users to solve real problems, iterating faster and delivering real value.</p><div><hr></div><h3><strong>Conclusion</strong></h3><p>At the end of the day, the need for a Customer Data Platform is not going anywhere; in fact, with the growth of AI and agentic capabilities, the need for reliable, trustworthy data has become more and more priceless. The same tools, and new ones, will continue to produce more and more customer data at an ever-increasing pace. Data quality has been and will always be an issue. Writing custom code in ten different spots to gather and wrangle source data into some form of cohesiveness will always be an architectural nightmare.</p><blockquote><p><em><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">Even with AI, we can&#8217;t make the hard job of customer identity simply disappear.</mark></em></p></blockquote><p>Yes, the modern CDP needs to transform itself into the agentic age. Like it or not, expectations around classically slow, human workflows will no longer be tolerated as just &#8220;part of the process&#8221;; dashboards, SQL queries, spreadsheets, tickets, UIs, and manual handoffs are starting to become things of the past. Fresh data, deterministic identity, strong schemas and contracts, data quality, governance, APIs, MCPs, and explicit boundaries around what an Agent can and cannot do are no longer nice-to-haves.</p><p>Marketers, Product Managers, and other business users are under more pressure than ever to move quickly and deliver results. Data Teams are busier now than before with the added burden of agentic capabilities. Code may have gotten &#8220;cheaper,&#8221; but technical debt and the age of data problems don&#8217;t simply vanish with a new foundational model release. The truth is, the future of modern CDPs must be built on a rock-solid foundation to take advantage of what's to come.</p><div><hr></div><p>Thanks to <a href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629">Rudderstack</a> for partnering with Data Engineering Central!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.rudderstack.com%2F%3Futm_source%3Ddata-engineering-central%26amp%3Butm_medium%3Dreferral%26amp%3Butm_campaign%3DCMPGN_1_LL%26amp%3Butm_content%3Dmodern-cdp-blog%26amp%3Braid%3D09d6a242da9256db3aae1a132c924629" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MZDT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21MZDT%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg" width="1456" height="504" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:504,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.rudderstack.com/?utm_source=data-engineering-central&amp;utm_medium=referral&amp;utm_campaign=CMPGN_1_LL&amp;utm_content=modern-cdp-blog&amp;raid=09d6a242da9256db3aae1a132c924629&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!MZDT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MZDT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ae849c2-ec69-413b-85e2-ff69c5532291_1456x504.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[DuckDB vs Polars vs Spark on Databricks Serverless with Joins and Window Functions.]]></title><description><![CDATA[hehehehehe]]></description><link>https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 05 Oct 2026 11:56:19 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21WjLB%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F55f7b097-3254-41bd-b593-b08363496577_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21WjLB%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F55f7b097-3254-41bd-b593-b08363496577_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WjLB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!WjLB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!WjLB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!WjLB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21WjLB%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F55f7b097-3254-41bd-b593-b08363496577_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55f7b097-3254-41bd-b593-b08363496577_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2095696,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WjLB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!WjLB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!WjLB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!WjLB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f7b097-3254-41bd-b593-b08363496577_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The world is changing fast these days; what an exhilarating and scary time to be alive and working in tech! I love the pace at which our data community at large, both people and companies, is advancing innovation at lightning speed. Sure, we can be skeptical and somewhat angry about this Agentic Age we live in, but for good or bad, no one is going to put the genie back in the bottle, so we'd best all find our places and strap in for the ride. We should take the lemons we find and make some lemonade. I love working with all things data, as I&#8217;m sure you do, and some of the best parts of the rapidly changing landscape we find ourselves in, <mark data-color="#f9cb9c" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">is the ability to do things heretofore unheard of.</mark></p><blockquote><p>To do fun things, things that may, or may not, have a point.</p></blockquote><p>One feature I&#8217;ve been keeping one eye glued to lately is <a href="iframe.php?url=https%3A%2F%2Fwww.databricks.com%2Fblog%2Fwhat-is-serverless-computing">Databricks' Serverless compute</a>. I don&#8217;t think it gets the discussion it should in the Lakehouse community at large, but that&#8217;s ok. Today we are going to play with it.</p><p>I&#8217;ve been a Databricks user since before it was cool, and like any good engineer, I would try to shove everything possible inside it for simplicity's sake, even if that&#8217;s not where that task should go. Part of our job is to make trade-offs, to decide which choice will tip the scale and send us down a happy path. For a long time, and maybe even still today, Databricks was and is seen as the Spark platform. But if you didn&#8217;t notice, that has changed a lot recently. In the past, I've often taken a little Python code that has nothing to do with Spark and run it inside a Databricks Job for simplicity and continuity. Should it have been running on Databricks Jobs compute? <strong>Yeah, no. But was it the best place for that &#8220;thing&#8221; to run, in the name of simplicity and oneness of a complex pipeline? Yes.</strong></p><ul><li><p>For me, that tradeoff stopped when Serverless became an option.</p></li></ul><p>When I want my architecture and pipelines to be homogeneous for numerous reasons related to ease of use, feature improvement, developer experience, simplicity &#8230; I choose Databricks because I can ship &#8220;Big Data&#8221; problems to Spark with Jobs compute, and assign lightweight actions done with tools like DuckDB, Polars, Daft, and the like &#8230; to Serverless. Fast, quick, and easy to use. Ain&#8217;t going to get any complaints from me. If the CTO comes knocking about the bill, that&#8217;s a problem for later.</p><div class="callout-block" data-callout="true"><p><em><strong>Thanks to <a href="iframe.php?url=http%3A%2F%2Fwww.delta.io%2F">Delta</a> for sponsoring this newsletter! I use Delta Lake daily, and I believe it represents the future of Data Engineering. Content like this would not be possible without their support. Check out <a href="iframe.php?url=http%3A%2F%2Fwww.delta.io%2F">their website</a> below.</strong></em></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HSdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 424w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 848w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1272w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21HSdP%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp" width="600" height="123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:123,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4188,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!HSdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 424w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 848w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1272w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1456w" sizes="100vw"></picture><div></div></div></div></figure></div></div><div><hr></div><h2>Curiosity will be the death of me.</h2><p>We&#8217;ve known for some time, and I&#8217;ve written for some time about the new cadre of tools we have that can process what we used to think was Big Data on a simple, small machine. Thanks to Rust, Apache Arrow, and streaming concepts, the world is now our oyster. Why not reach for something like DuckDB or Polars inside Databricks Serverless the next time you need to munge some data? After all, both Polars and DuckDB have first-class support for Unity Catalog.</p><p>You really have no excuses, my friend.</p><blockquote><p>Combine these powerful tools with Serverless compute, and you have a match made in heaven. All we are waiting for now is for you to pluck up your courage and tell Claude to commit that branch and push a PR. <strong>What are you waiting for?</strong></p></blockquote><p>For some time now, amid my busy life bustling kids to and fro, mowing the yard, interviewing folk on the podcast, and trying to keep you rabal entertained- I&#8217;ve wanted to see how DuckDB and Polars hold up to some medium-sized data, with some medium-complex workloads on Databricks Serverless pointing at a Lakehouse. I figured that on this rainy fall day, there is nothing I would rather do than try to break something. You know me.</p><p>This isn't a scientific test; if you were expecting that, you&#8217;re reading the wrong Substack. I&#8217;m curious about &#8230;</p><ul><li><p>Does Serverless compute make Databricks Spark as fast as DuckDB and Polars?</p></li><li><p>Can we get meaningful speed improvements from DuckDB and Polars on Serverless?</p></li><li><p>How do DuckDB and Polars deal with JOINS and Window functions?</p><ul><li><p><em>aka &#8230; does real-life production complexity slow them down?</em></p></li></ul></li></ul><div class="callout-block" data-callout="true"><p>I&#8217;m sure everyone has an opinion about it, but then again, how many people are actually trying it? Also, it would be helpful to know if it&#8217;s even WORTH throwing DuckDB and Polars up onto Serverless compute and expecting to get a reasonable rate of return on that investment &#8230; aka, is it going to change the runtimes by at least 30% or more?</p></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fduckdb-vs-polars-vs-spark-on-databricks%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h3>Code and Data.</h3><p>Ok, so today we will be using the <a href="iframe.php?url=https%3A%2F%2Fwww.backblaze.com%2Fcloud-storage%2Fresources%2Fhard-drive-test-data">Backblaze open-source dataset</a>, all about hard drive failure rates. I&#8217;ve downloaded a few years worth of data and put it into a <code>Volume</code> on Databricks, from which point we will ingest it into two different tables.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.backblaze.com%2Fcloud-storage%2Fresources%2Fhard-drive-test-data" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!59zv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png 424w, https://substackcdn.com/image/fetch/$s_!59zv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png 848w, https://substackcdn.com/image/fetch/$s_!59zv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png 1272w, https://substackcdn.com/image/fetch/$s_!59zv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%2159zv%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png" width="1456" height="467" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:467,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:352704,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.backblaze.com/cloud-storage/resources/hard-drive-test-data&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!59zv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png 424w, https://substackcdn.com/image/fetch/$s_!59zv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png 848w, https://substackcdn.com/image/fetch/$s_!59zv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png 1272w, https://substackcdn.com/image/fetch/$s_!59zv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53bef995-e30a-45f1-bc7d-fcbb02253a48_1808x580.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>First, a table with *most of the hard drive failure data</p></li><li><p>Second, a table with metadata about each specific hard drive model</p><ul><li><p><em>This will be used for the Join </em></p></li></ul></li></ul><p>This is a classic Spark problem: one large table joining to a very small one, aka a <mark data-color="#fce5cd" style="background-color: rgb(252, 229, 205); color: rgb(0, 0, 0);">broadcast join</mark>. I&#8217;m curious how well DuckDB and Polars handle this scenario. Also, we will apply a Window function of some sort to the entire dataset, as if we were doing some analysis. We will run the same query on DuckDB, Polars, and Databricks Spark using Serverless.</p><ul><li><p>We will be working with about <code>285,339,435</code> rows. </p></li></ul><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pyspark.sql.types import (
    StructType,
    StructField,
    StringType,
    DateType,
    LongType,
    IntegerType
)

smart_ids = [
    1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18,
    22, 23, 24, 27, 71, 82, 90,
    160, 161, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
    173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
    187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
    199, 200, 201, 202, 206, 210, 218, 220, 222, 223, 224, 225,
    226, 230, 231, 232, 233, 234, 235, 240, 241, 242, 244, 245,
    246, 247, 248, 250, 251, 252, 254, 255
]

schema = StructType([
    StructField("date", DateType(), True),
    StructField("serial_number", StringType(), True),
    StructField("model", StringType(), True),
    StructField("capacity_bytes", LongType(), True),
    StructField("failure", IntegerType(), True),
    StructField("datacenter", StringType(), True),
    StructField("cluster_id", StringType(), True),
    StructField("vault_id", StringType(), True),
    StructField("pod_id", StringType(), True),
    StructField("pod_slot_num", IntegerType(), True),
    StructField("is_legacy_format", IntegerType(), True),
])

for smart_id in smart_ids:
    schema.add(
        StructField(
            f"smart_{smart_id}_normalized",
            IntegerType(),
            True
        )
    )
    
    schema.add(
        StructField(
            f"smart_{smart_id}_raw",
            LongType(),
            True
        )
    )

df = (
    spark.read
        .option("header", "true")
        .option("dateFormat", "yyyy-MM-dd")
        .schema(schema)
        .csv("dbfs:/Volumes/workspace/default/test-data/*/*")
)
df.write.saveAsTable('raw_data')

df = df.select('serial_number', 'model').distinct()
df.write.saveAsTable('models')</code></pre></div><p>We can use this code to write the two Delta tables. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21cfp0%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cfp0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png 424w, https://substackcdn.com/image/fetch/$s_!cfp0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png 848w, https://substackcdn.com/image/fetch/$s_!cfp0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png 1272w, https://substackcdn.com/image/fetch/$s_!cfp0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21cfp0%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png" width="1456" height="637" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:637,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:164441,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cfp0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png 424w, https://substackcdn.com/image/fetch/$s_!cfp0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png 848w, https://substackcdn.com/image/fetch/$s_!cfp0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png 1272w, https://substackcdn.com/image/fetch/$s_!cfp0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf573b51-a9d1-4096-a9e5-739e392e4c2f_1686x738.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21bi6D%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bi6D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png 424w, https://substackcdn.com/image/fetch/$s_!bi6D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png 848w, https://substackcdn.com/image/fetch/$s_!bi6D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png 1272w, https://substackcdn.com/image/fetch/$s_!bi6D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21bi6D%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png" width="1456" height="790" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:790,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155729,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bi6D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png 424w, https://substackcdn.com/image/fetch/$s_!bi6D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png 848w, https://substackcdn.com/image/fetch/$s_!bi6D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png 1272w, https://substackcdn.com/image/fetch/$s_!bi6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6f557bd-d8fb-4b4f-8f35-25cc065da16e_1684x914.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ok, I know I have the model in both datasets, but this is just for fun; we want the join and some window function that we can run across Polars, DuckDB, and Databricks Spark in our Notebook attached to Serverless. See what happens, any guesses? Don&#8217;t cheat.</p><div class="poll-embed" data-attrs="{&quot;id&quot;:1383774}" data-component-name="PollToDOM"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fduckdb-vs-polars-vs-spark-on-databricks%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h3>Code</h3><p>Here we go with PySpark, nothing fancy here, just some kinda this-and-that you would expect to see in a production pipeline were some analytics are being calculated off some bronze layer and shoved into some report for the powers that be.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pyspark.sql import functions as F
from pyspark.sql.window import Window
import time

raw = spark.table("raw_data")
models = (
    spark.table("models")
    .select("serial_number", "model")
    .dropDuplicates(["serial_number"])
)

ordered_window = (
    Window
    .partitionBy("serial_number")
    .orderBy("date")
)

rolling_window = (
    Window
    .partitionBy("serial_number")
    .orderBy("date")
    .rowsBetween(-29, 0)
)

start = time.perf_counter()

result = (
    raw
    .drop("model")
    .withColumn(
        "row_num",
        F.row_number().over(ordered_window)
    )
    .withColumn(
        "previous_smart_5_raw",
        F.lag("smart_5_raw", 1).over(ordered_window)
    )
    .withColumn(
        "rolling_avg_smart_5_raw",
        F.avg("smart_5_raw").over(rolling_window)
    )
    .join(
        models,
        on="serial_number",
        how="left"
    )
)

benchmark_result = (
    result
    .agg(
        F.count("*").alias("row_count"),
        F.sum("row_num").alias("sum_row_num"),
        F.sum("previous_smart_5_raw").alias("sum_previous"),
        F.sum("rolling_avg_smart_5_raw").alias("sum_rolling_avg")
    )
    .collect()
)

elapsed = time.perf_counter() - start

print(benchmark_result)
print(f"PySpark elapsed: {elapsed:.2f} seconds")</code></pre></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21u8VV%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u8VV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png 424w, https://substackcdn.com/image/fetch/$s_!u8VV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png 848w, https://substackcdn.com/image/fetch/$s_!u8VV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png 1272w, https://substackcdn.com/image/fetch/$s_!u8VV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21u8VV%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png" width="1456" height="413" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:413,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:102234,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u8VV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png 424w, https://substackcdn.com/image/fetch/$s_!u8VV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png 848w, https://substackcdn.com/image/fetch/$s_!u8VV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png 1272w, https://substackcdn.com/image/fetch/$s_!u8VV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab3ca19-ae7c-4f8e-b12b-d181d1bb40fd_1672x474.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>DuckDB code.</h3><p>Ok, so let&#8217;s move to DuckDB. This is the code that will run outside the timer, just setting up a connection from DuckDB to Unity Catalog. DuckDB provides a nice integration into Unity Catalog would should make our lives easier. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fduckdb.org%2Fdocs%2Flts%2Fcore_extensions%2Funity_catalog" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wnww!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png 424w, https://substackcdn.com/image/fetch/$s_!Wnww!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png 848w, https://substackcdn.com/image/fetch/$s_!Wnww!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png 1272w, https://substackcdn.com/image/fetch/$s_!Wnww!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Wnww%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png" width="1456" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:429,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:159277,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://duckdb.org/docs/lts/core_extensions/unity_catalog&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wnww!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png 424w, https://substackcdn.com/image/fetch/$s_!Wnww!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png 848w, https://substackcdn.com/image/fetch/$s_!Wnww!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png 1272w, https://substackcdn.com/image/fetch/$s_!Wnww!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eb30d84-ae18-437b-8f68-ecb9805520ed_2374x700.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I don&#8217;t wan you to just slide past this without thinking. In the varied and Lakehouse world we live in, it&#8217;s extremely important that our tools talk to each other, otherwise things become an impossible mess of cobbled together solutions that cause more bugs and complexity, providing not enough bang-for-the-buck.</p><blockquote><p>DuckDB code.</p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import duckdb
import time

con = duckdb.connect()

con.execute("""
INSTALL unity_catalog;
LOAD unity_catalog;
""")

con.execute(f"""
CREATE SECRET (
    TYPE unity_catalog,
    TOKEN 'my_token',
    ENDPOINT 'https://my-workspace.cloud.databricks.com/'
);
""")

con.execute("""
ATTACH 'confessions' AS uc (
    TYPE unity_catalog,
    DEFAULT_SCHEMA 'default'
);
""")</code></pre></div><p>And then the actual code to run. You will notice this code isn&#8217;t any more complex or verbose than the PySpark code, so we aren&#8217;t really giving up much switching to Databricks, it will be very interesting to see the runtimes will it not?</p><blockquote><p><em>The big idea here is to find out if we can combine the power of Serverless &#8230; that quick hitting compute, with DuckDB &#8230; known to be fast &#8230; and start to build out more interesting workflows inside Databricks. <mark data-color="#a4c2f4" style="background-color: rgb(164, 194, 244); color: rgb(0, 0, 0);">One&#8217;s that are fast, and save time and money.</mark></em></p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">query = """
WITH models_deduped AS (
    SELECT
        serial_number,
        ANY_VALUE(model) AS model
    FROM uc.default.models
    GROUP BY serial_number
),

windowed AS (
    SELECT
        r.* EXCLUDE (model),

        ROW_NUMBER() OVER (
            PARTITION BY serial_number
            ORDER BY date
        ) AS row_num,

        LAG(smart_5_raw, 1) OVER (
            PARTITION BY serial_number
            ORDER BY date
        ) AS previous_smart_5_raw,

        AVG(smart_5_raw) OVER (
            PARTITION BY serial_number
            ORDER BY date
            ROWS BETWEEN 29 PRECEDING AND CURRENT ROW
        ) AS rolling_avg_smart_5_raw

    FROM uc.default.raw_data r
),

joined AS (
    SELECT
        w.*,
        m.model
    FROM windowed w
    LEFT JOIN models_deduped m
        ON w.serial_number = m.serial_number
)

SELECT
    COUNT(*) AS row_count,
    SUM(row_num) AS sum_row_num,
    SUM(previous_smart_5_raw) AS sum_previous,
    SUM(rolling_avg_smart_5_raw) AS sum_rolling_avg
FROM joined
"""

start = time.perf_counter()

benchmark_result = con.execute(query).fetchall()
elapsed = time.perf_counter() - start

print(benchmark_result)
print(f"DuckDB elapsed: {elapsed:.2f} seconds")</code></pre></div><p>Oh so close. Always&#8217; something ain&#8217;t it?</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XMLt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png 424w, https://substackcdn.com/image/fetch/$s_!XMLt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png 848w, https://substackcdn.com/image/fetch/$s_!XMLt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png 1272w, https://substackcdn.com/image/fetch/$s_!XMLt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21XMLt%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png" width="1456" height="323" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:323,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:226062,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XMLt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png 424w, https://substackcdn.com/image/fetch/$s_!XMLt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png 848w, https://substackcdn.com/image/fetch/$s_!XMLt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png 1272w, https://substackcdn.com/image/fetch/$s_!XMLt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1260f5cf-6a95-41ce-a40a-5a102a89e1b8_2110x468.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>There appears to be some permission problems where Databricks/Unity only wans to give READ permission to DuckDB, but it automatically wants to have READ/WRITE, so it gets rejected out of the box, even though my query only is SELECT. Is this a problem with Databricks Serverless because it&#8217;s using Spark Connect API, so Databricks sees DuckDB as not a &#8220;Databricks Compute Envrionment?&#8221; Poohy. <mark data-color="#f9cb9c" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">I guess our option here is to recreate these tables as &#8220;External Managed tables&#8221; with a custom s3 URI. Stupid, because that&#8217;s technically what they already are since this is a Databricks + AWS setup I have!</mark></p><p><a href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fduckdb%2Funity_catalog%2Fissues%2F64">I think I found a related open issue for this DuckDB + Unity integration.</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fduckdb%2Funity_catalog%2Fissues%2F64" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cVgL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png 424w, https://substackcdn.com/image/fetch/$s_!cVgL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png 848w, https://substackcdn.com/image/fetch/$s_!cVgL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!cVgL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21cVgL%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:314364,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://github.com/duckdb/unity_catalog/issues/64&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cVgL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png 424w, https://substackcdn.com/image/fetch/$s_!cVgL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png 848w, https://substackcdn.com/image/fetch/$s_!cVgL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!cVgL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eae1d56-82cb-45bb-8f2c-0a371ffbfca7_2064x1254.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I dropped the managed tables, and re-ran this.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pyspark.sql.types import (
    StructType,
    StructField,
    StringType,
    DateType,
    LongType,
    IntegerType
)

smart_ids = [
    1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18,
    22, 23, 24, 27, 71, 82, 90,
    160, 161, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
    173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
    187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
    199, 200, 201, 202, 206, 210, 218, 220, 222, 223, 224, 225,
    226, 230, 231, 232, 233, 234, 235, 240, 241, 242, 244, 245,
    246, 247, 248, 250, 251, 252, 254, 255
]

schema = StructType([
    StructField("date", DateType(), True),
    StructField("serial_number", StringType(), True),
    StructField("model", StringType(), True),
    StructField("capacity_bytes", LongType(), True),
    StructField("failure", IntegerType(), True),
    StructField("datacenter", StringType(), True),
    StructField("cluster_id", StringType(), True),
    StructField("vault_id", StringType(), True),
    StructField("pod_id", StringType(), True),
    StructField("pod_slot_num", IntegerType(), True),
    StructField("is_legacy_format", IntegerType(), True),
])

for smart_id in smart_ids:
    schema.add(
        StructField(
            f"smart_{smart_id}_normalized",
            IntegerType(),
            True
        )
    )

    schema.add(
        StructField(
            f"smart_{smart_id}_raw",
            LongType(),
            True
        )
    )


RAW_PATH = (
    "s3://confessions-of-a-data-guy/"
    "benchmarks/raw_data"
)

MODELS_PATH = (
    "s3://confessions-of-a-data-guy/"
    "benchmarks/models"
)

RAW_TABLE = "confessions.default.raw_data"
MODELS_TABLE = "confessions.default.models"

raw_df = (
    spark.read
        .option("header", "true")
        .option("dateFormat", "yyyy-MM-dd")
        .schema(schema)
        .csv("dbfs:/Volumes/confessions/default/test-data/*/*")
)

models_df = (
    raw_df
        .select(
            "serial_number",
            "model"
        )
        .distinct()
)

spark.sql(
    f"DROP TABLE IF EXISTS {RAW_TABLE}"
)

spark.sql(
    f"DROP TABLE IF EXISTS {MODELS_TABLE}"
)

(
    raw_df.write
        .format("delta")
        .mode("overwrite")
        .option("path", RAW_PATH)
        .saveAsTable(RAW_TABLE)
)

(
    models_df.write
        .format("delta")
        .mode("overwrite")
        .option("path", MODELS_PATH)
        .saveAsTable(MODELS_TABLE)
)</code></pre></div><p>This is a serious problem, because it means all those wondeful Managed Unity tables you have can&#8217;t be touched by external engines on Serverless &#8230; meaning this benchmark is pointless because no one is going to recreate all their tables as <code>EXTERNAL</code> unless they have a screw loose.</p><blockquote><p>Look, it&#8217;s entirely possible I&#8217;m missing something obvious, maybe there is another obvious workround that I should know about and try. But there are only so many hours in the day.</p></blockquote><p>Ok, after recreating tables as <code>EXTERNAL</code> my woes continue.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%216ACz%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6ACz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png 424w, https://substackcdn.com/image/fetch/$s_!6ACz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png 848w, https://substackcdn.com/image/fetch/$s_!6ACz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png 1272w, https://substackcdn.com/image/fetch/$s_!6ACz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%216ACz%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png" width="1456" height="541" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:541,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:268082,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6ACz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png 424w, https://substackcdn.com/image/fetch/$s_!6ACz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png 848w, https://substackcdn.com/image/fetch/$s_!6ACz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png 1272w, https://substackcdn.com/image/fetch/$s_!6ACz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F570045b3-b68a-480d-b8cf-1eb7a9d30bac_2100x780.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After I fixed this error, doing some GRANTS etc, I finally got this error.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21yVx_%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yVx_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png 424w, https://substackcdn.com/image/fetch/$s_!yVx_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png 848w, https://substackcdn.com/image/fetch/$s_!yVx_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png 1272w, https://substackcdn.com/image/fetch/$s_!yVx_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21yVx_%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png" width="1456" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128370,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yVx_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png 424w, https://substackcdn.com/image/fetch/$s_!yVx_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png 848w, https://substackcdn.com/image/fetch/$s_!yVx_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png 1272w, https://substackcdn.com/image/fetch/$s_!yVx_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cfd30d7-ea6b-42d8-a80a-f982e57a6fa8_1466x580.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I just don&#8217;t think that Serverless is ready for DuckDB time. Well, I&#8217;ve put enough time into this I don&#8217;t want to abandon what we&#8217;ve been working on so far, we gotta finish one way or the other. I guess we could switch over to Jobs Compute and see what happens there. I&#8217;m very curious if Polars has the same problems with Serverless.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fduckdb-vs-polars-vs-spark-on-databricks%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h3>Polars on Serverless.</h3><p>Ok, let&#8217;s switch over to Polars for Unity Catalog, and do the same benchmark, maybe their Databricks/Unity are better than DuckDB. I&#8217;ve always had my troubles in the past with Polars and anything approaching a &#8220;large&#8221; dataset. They have been plauged for years by OOM issues that are random and often hidden under the rugs. If you bring them up, the Dark Lord will come find you.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import polars as pl

WORKSPACE_URL = "https://dbc-9a64f31c-25b9.cloud.databricks.com/"

catalog = pl.Catalog(
    WORKSPACE_URL,
    bearer_token="blahblah"
)</code></pre></div><p>&#8230; and the code.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">raw = catalog.scan_table(
    "confessions",
    "default",
    "raw_data"
)

models = (
    catalog
    .scan_table(
        "confessions",
        "default",
        "models"
    )
    .select([
        "serial_number",
        "model"
    ])
    .unique(
        subset=["serial_number"]
    )
)

start = time.perf_counter()

result = (
    raw
    .drop("model")
    .sort([
        "serial_number",
        "date"
    ])

    .with_columns([

        pl.col("date")
        .cum_count()
        .over("serial_number")
        .alias("row_num"),

        pl.col("smart_5_raw")
        .shift(1)
        .over("serial_number")
        .alias("previous_smart_5_raw"),

        pl.col("smart_5_raw")
        .rolling_mean(
            window_size=30,
            min_samples=1
        )
        .over("serial_number")
        .alias("rolling_avg_smart_5_raw")
    ])

    .join(
        models,
        on="serial_number",
        how="left"
    )

    .select([
        pl.len().alias("row_count"),

        pl.col("row_num")
        .sum()
        .alias("sum_row_num"),

        pl.col("previous_smart_5_raw")
        .sum()
        .alias("sum_previous"),

        pl.col("rolling_avg_smart_5_raw")
        .sum()
        .alias("sum_rolling_avg")
    ])
)

benchmark_result = result.collect()

elapsed = time.perf_counter() - start

print(benchmark_result)

print(
    f"Polars elapsed: {elapsed:.2f} seconds"
)</code></pre></div><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XaFZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png 424w, https://substackcdn.com/image/fetch/$s_!XaFZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png 848w, https://substackcdn.com/image/fetch/$s_!XaFZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png 1272w, https://substackcdn.com/image/fetch/$s_!XaFZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21XaFZ%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png" width="1456" height="157" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:157,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50214,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XaFZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png 424w, https://substackcdn.com/image/fetch/$s_!XaFZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png 848w, https://substackcdn.com/image/fetch/$s_!XaFZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png 1272w, https://substackcdn.com/image/fetch/$s_!XaFZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ef6958f-163b-4739-8a24-6ccdd4774c58_2028x218.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Polars ran for about 8 minutes and then everything just died. Not sure why, why it died, and why it would take so long to run the query. Anywho, no surprise there. I honestly wasn&#8217;t expecting it to run, although not having it puke on the Unity Catalog connection was a nice surprise. Got closer than DuckDB did.</p><div><hr></div><h3>Back to DuckDB. We ain&#8217;t giving up yet.</h3><p>Not sure why I didn&#8217;t think of this off the bat, but since I can get the s3 location for our Delta Lake tables in s3, what if I just give DuckDB my AWS creds and the s3 table locations, so leave the code mostly the same, will it run? Maybe this whole Unity thing and DuckDB just don&#8217;t jive well.</p><blockquote><p>This is what our new and updated DuckDB code looks like. Now, I&#8217;m not happy about having to do this, I mean in theory any Databricks + Unity setup on AWS we would be able to find even for <code>Managed</code> tables that <code>s3</code> location and feed it in, but it feels a little hacky and not something we would want to do long term in a large codebase with tons of tables.</p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">con = duckdb.connect()

con.execute("""
INSTALL delta;
LOAD delta;

INSTALL aws;
LOAD aws;
""")
con.execute(f"""
CREATE OR REPLACE SECRET s3_secret (
    TYPE s3,
    KEY_ID 'blah',
    SECRET 'blahblahblah',
    REGION 'us-east-1'
);
""")</code></pre></div><p>&#8230; and the benchmark code.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">query = """
WITH models_deduped AS (
    SELECT
        serial_number,
        ANY_VALUE(model) AS model
    FROM delta_scan(
    's3://confessions-of-a-data-guy/benchmarks/models'
)
    GROUP BY serial_number
),

windowed AS (
    SELECT
        r.* EXCLUDE (model),

        ROW_NUMBER() OVER (
            PARTITION BY serial_number
            ORDER BY date
        ) AS row_num,

        LAG(smart_5_raw, 1) OVER (
            PARTITION BY serial_number
            ORDER BY date
        ) AS previous_smart_5_raw,

        AVG(smart_5_raw) OVER (
            PARTITION BY serial_number
            ORDER BY date
            ROWS BETWEEN 29 PRECEDING AND CURRENT ROW
        ) AS rolling_avg_smart_5_raw

    FROM delta_scan(
    's3://confessions-of-a-data-guy/benchmarks/raw_data'
) r
),

joined AS (
    SELECT
        w.*,
        m.model
    FROM windowed w
    LEFT JOIN models_deduped m
        ON w.serial_number = m.serial_number
)

SELECT
    COUNT(*) AS row_count,
    SUM(row_num) AS sum_row_num,
    SUM(previous_smart_5_raw) AS sum_previous,
    SUM(rolling_avg_smart_5_raw) AS sum_rolling_avg
FROM joined
"""

start = time.perf_counter()

benchmark_result = con.execute(query).fetchall()

elapsed = time.perf_counter() - start

print(benchmark_result)
print(f"DuckDB elapsed: {elapsed:.2f} seconds")</code></pre></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21B6Yv%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B6Yv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png 424w, https://substackcdn.com/image/fetch/$s_!B6Yv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png 848w, https://substackcdn.com/image/fetch/$s_!B6Yv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png 1272w, https://substackcdn.com/image/fetch/$s_!B6Yv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21B6Yv%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png" width="1456" height="422" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:422,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105531,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B6Yv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png 424w, https://substackcdn.com/image/fetch/$s_!B6Yv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png 848w, https://substackcdn.com/image/fetch/$s_!B6Yv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png 1272w, https://substackcdn.com/image/fetch/$s_!B6Yv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c73d0b-3378-481f-af37-20c27bc98c63_2028x588.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p><strong>DuckDB was slower than I expected, but it finished at least!</strong></p></blockquote><p>Funny we ended up here uh?! Isn&#8217;t this just exactly how engineering things works when we are working with new technologies? It never really goes how we think it&#8217;s going to go, but we must beat or way through the weeds until we get to our endpoint.</p><ul><li><p><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">DuckDB with Unity Catalog pukes, but at least runs if we bypass Unity.</mark></p></li><li><p><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">Polars just pukes can&#8217;t finish.</mark></p></li></ul><p>Like any good Polars bug that involves memory, from the beginning of time this is the way, to close the issue on GitHub and pretend like it&#8217;s not a think.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fgithub.com%2Fpola-rs%2Fpolars%2Fissues%2F29020%3Futm_source%3Dchatgpt.com" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EdSO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png 424w, https://substackcdn.com/image/fetch/$s_!EdSO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png 848w, https://substackcdn.com/image/fetch/$s_!EdSO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png 1272w, https://substackcdn.com/image/fetch/$s_!EdSO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21EdSO%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png" width="1456" height="422" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:422,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:137177,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://github.com/pola-rs/polars/issues/29020?utm_source=chatgpt.com&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218060892?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EdSO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png 424w, https://substackcdn.com/image/fetch/$s_!EdSO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png 848w, https://substackcdn.com/image/fetch/$s_!EdSO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png 1272w, https://substackcdn.com/image/fetch/$s_!EdSO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae1dbb50-8362-46ea-9702-eb72415320df_2028x588.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I figured I would try my best to give Polars the best change possible, maybe add some column selections to ensure we only have the data we want, not assume any predicate pushdowns or whatever.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import polars as pl
import time

raw = (
    catalog
    .scan_table(
        "confessions",
        "default",
        "raw_data"
    )
    .select([
        "serial_number",
        "date",
        "smart_5_raw"
    ])
)


models = (
    catalog
    .scan_table(
        "confessions",
        "default",
        "models"
    )
    .select([
        "serial_number",
        "model"
    ])
    .unique(
        subset=["serial_number"]
    )
)

start = time.perf_counter()


result = (
    raw
    .sort([
        "serial_number",
        "date"
    ])

    .with_columns([
        (
            pl.int_range(pl.len())
            .over("serial_number")
            + 1
        )
        .alias("row_num"),

        pl.col("smart_5_raw")
        .shift(1)
        .over("serial_number")
        .alias("previous_smart_5_raw"),

        pl.col("smart_5_raw")
        .rolling_mean(
            window_size=30,
            min_samples=1
        )
        .over("serial_number")
        .alias("rolling_avg_smart_5_raw")
    ])
    .join(
        models,
        on="serial_number",
        how="left"
    )
    .select([
        pl.len().alias("row_count"),

        pl.col("row_num")
        .sum()
        .alias("sum_row_num"),

        pl.col("previous_smart_5_raw")
        .sum()
        .alias("sum_previous"),

        pl.col("rolling_avg_smart_5_raw")
        .sum()
        .alias("sum_rolling_avg")
    ])
)

benchmark_result = result.collect()
elapsed = time.perf_counter() - start

print(benchmark_result)
print(f"Polars elapsed: {elapsed:.2f} seconds")</code></pre></div><p>No such luck, same error for Polars. Probably just more classic memory errors.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">The cluster was unhealthy or has been terminated. Please restart the cluster 
or attach this notebook to a different cluster.</code></pre></div><p>Ok, one last try on Polars, one little update. Come on, you can do it!</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">benchmark_result = result.collect(
    engine="streaming"
)</code></pre></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">Fatal error: The Python kernel is unresponsive.
---------------------------------------------------------------------------
The Python process exited with exit code 137 (SIGKILL: Killed). This may have been caused by 
an OOM error. Check your command's memory usage.</code></pre></div><p>I tried my friends, this is no surprise to me, Polars has OOM demons that are secret and must never ever be named outloud lest the Dark Lord come find you.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3> Moral of the story.</h3><p>This was an interesting one and not what I expected. In my mind it made perfect sense that both Polars and DuckDB would made for running on Serverless &#8230; both tools are usually fast, both in theory have Unity Catalog support; it just seemed to make logical sense that we could save compute and runtimes by swapping in DuckDB or Polars for typical PySpark pipelines &#8230; I could have not been more wrong. <mark data-color="#f1c232" style="background-color: rgb(241, 194, 50); color: rgb(0, 0, 0);">I should have known.</mark></p><ul><li><p><em>DuckDB was way slower than expected on remote Delta Lake tables.</em></p></li><li><p><em>Polars in classic fashion, as always, puked on memory.</em></p></li><li><p><em>DuckDB doesn&#8217;t play with Unity Catalog via Serverless.</em></p></li><li><p><em>PySpark on Serverless apparently is fastest.</em></p></li></ul><p>This is why even with agents writing all our code, there is still room for us humans who like to think, poke, prod, and test new things. I&#8217;ve always felt that AI isn&#8217;t very creative, it&#8217;s been trained on the past, what good is it for pushing the edges of what we can do to in the future?</p><div class="callout-block" data-callout="true"><p>This just goes to show you how much work we have left to do in the Lakehouse world! We can have the creme-of-the-crop tools in the form of Databricks, DuckDB, Polars etc, yet even with years of agentic coding under our belts, here we sit still fighting the same old problems of integration, OOM bugs, and the like. Why is this? </p></div><p>This shows me there is still room for humans in the mix.</p><p>Humans that try to do things that haven&#8217;t been done before, break things, try things, be creative with things, push the boundaries of things, try new ways of solving age old problems. Data is messy, making tools place nice with each other is messy. <strong>There are still new problems to solve!</strong></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/duckdb-vs-polars-vs-spark-on-databricks?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fduckdb-vs-polars-vs-spark-on-databricks%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p><a href="iframe.php?url=https%3A%2F%2Fwww.youtube.com%2F%40dataengineeringdan">Come join me over on YouTube if you get bored!</a></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.youtube.com%2F%40dataengineeringdan" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tTP5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 424w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 848w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 1272w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21tTP5%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png" width="831" height="224" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:224,&quot;width&quot;:831,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85944,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.youtube.com/@dataengineeringdan&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!tTP5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 424w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 848w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 1272w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[AWS acquires DuckDB Labs. Not Polars. ]]></title><description><![CDATA[a lesson in goodwill and developer community]]></description><link>https://dataengineeringcentral.substack.com/p/aws-acquires-duckdb-labs-not-polars</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/aws-acquires-duckdb-labs-not-polars</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Sun, 04 Oct 2026 13:42:06 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21QXhN%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21QXhN%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QXhN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!QXhN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!QXhN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!QXhN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21QXhN%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2172735,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/218016133?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QXhN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!QXhN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!QXhN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!QXhN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfe1671a-6243-49f9-a0a6-a207e739c0c0_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;ve been asked a few times about my thoughts on the now-old news of AWS acquiring DuckDB Labs. Initially, I did blast some thoughts out <a href="iframe.php?url=https%3A%2F%2Fwww.confessionsofadataguy.com%2Fduckdb-labs-acquired-by-aws-what-does-it-mean%2F">on my old blog</a>, who knows what the truth really is, not I. But it did send a few shockwaves initially through the data community at large, bringing to the surface long-stoked fears that the future of open source is bowing before the knees of billion-dollar corporations. Such is life; not much has changed over the eons. Today I wanted to give you a different perspective on why AWS acquired DuckDB Labs &#8230; and not Polars. It&#8217;s a sordid tale that mostly involves what I would call &#8220;<mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">developer goodwill.</mark>&#8221;</p><blockquote><p>One could generally argue that the world we live on, this spinning rock populated by eccentric humans, seems to follow a set of rules, with some appearance of consistency. <strong>Namely, that age old tale of good vs evil &#8230; call it karma if you like.</strong></p></blockquote><p>This little vignette of data products playing out before our eyes like some <a href="iframe.php?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FThe_Odyssey_%282026_film%29">Odyssey</a>, can teach us important life lessons. </p>
      <p>
          <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Faws-acquires-duckdb-labs-not-polars">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AI Is a Mirror: MLOps, LLMOps & the Future of AI Engineering | Maria Vechtomova]]></title><description><![CDATA[Data Engineering Central Podcast]]></description><link>https://dataengineeringcentral.substack.com/p/ai-is-a-mirror-mlops-llmops-and-the</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/ai-is-a-mirror-mlops-llmops-and-the</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Wed, 30 Sep 2026 12:58:38 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fapi.substack.com%2Ffeed%2Fpodcast%2F217244470%2Fd98081825eecb69c055a6b7f599c9830.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><strong>What does it actually take to build AI systems that work in production?</strong></p><p>In this episode of Data Engineering Central, I sit down with <strong><a href="iframe.php?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fmaria-vechtomova%2F">Maria Vechtomova</a></strong>, AI Engineering Lead, co-founder of CAUCHY, Databricks MVP, and author of <em>MLOps with Databricks</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fmaria-vechtomova%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!59lK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png 424w, https://substackcdn.com/image/fetch/$s_!59lK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png 848w, https://substackcdn.com/image/fetch/$s_!59lK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png 1272w, https://substackcdn.com/image/fetch/$s_!59lK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%2159lK%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png" width="1456" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:498,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1073999,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.linkedin.com/in/maria-vechtomova/&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217244470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!59lK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png 424w, https://substackcdn.com/image/fetch/$s_!59lK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png 848w, https://substackcdn.com/image/fetch/$s_!59lK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png 1272w, https://substackcdn.com/image/fetch/$s_!59lK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc75a757-ed68-40cc-96d3-7a896f34e0b3_1562x534.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Maria has spent more than 12 years working across data, machine learning, MLOps, and AI engineering. We talk about how production ML has evolved from the early days of homegrown model platforms to today&#8217;s world of LLMs, agents, Databricks, MLflow, and AI-assisted coding.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.amazon.com%2Fdp%2FB0G48GG7G8%3Flv%3Dshuf%26amp%3BchannelId%3D500%26amp%3BplpRedirect%3DmhFallback" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L_XK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png 424w, https://substackcdn.com/image/fetch/$s_!L_XK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png 848w, https://substackcdn.com/image/fetch/$s_!L_XK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png 1272w, https://substackcdn.com/image/fetch/$s_!L_XK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21L_XK%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png" width="1456" height="523" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:523,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:517860,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.amazon.com/dp/B0G48GG7G8?lv=shuf&amp;channelId=500&amp;plpRedirect=mhFallback&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217244470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L_XK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png 424w, https://substackcdn.com/image/fetch/$s_!L_XK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png 848w, https://substackcdn.com/image/fetch/$s_!L_XK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png 1272w, https://substackcdn.com/image/fetch/$s_!L_XK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcec44e94-da35-4151-b72e-1c5ead42da62_2076x746.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We dig into why LLM applications can be significantly harder to evaluate and monitor than traditional ML, the growing importance of tracing and observability, and why governance becomes more complicated when agents can interact with data and other systems. Maria also explains why many of the problems we&#8217;re facing with AI aren&#8217;t actually new &#8212; AI has simply made them much harder to ignore.</p><ul><li><p>We also get into AI coding tools, testing AI-generated code, Databricks and Unity Catalog, the rapidly changing LLMOps ecosystem, and what engineers should focus on as AI changes the way software is built.</p></li></ul><p>One of my favorite ideas from the conversation: <strong>AI is a mirror. It can help you write a lot more code, a lot faster &#8212; but whether that code is actually good still depends on the engineer behind it.</strong></p><blockquote><p>Maria also shares what she thinks matters most for engineers entering the field today: <strong>common sense, soft skills, and business sense.</strong></p></blockquote><p><strong>Topics include:</strong> MLOps and LLMOps, production AI, Databricks and MLflow, AI agents, observability and tracing, model and LLM evaluation, AI governance, Unity Catalog, AI-generated code, testing, and the future of AI engineering.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/ai-is-a-mirror-mlops-llmops-and-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/ai-is-a-mirror-mlops-llmops-and-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fai-is-a-mirror-mlops-llmops-and-the%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[From Podcast Video to Searchable Insight with Databricks FILE data type]]></title><description><![CDATA[the Lakehouse expands to multi-modal]]></description><link>https://dataengineeringcentral.substack.com/p/from-podcast-video-to-searchable</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/from-podcast-video-to-searchable</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 28 Sep 2026 15:51:45 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21yKo8%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21yKo8%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yKo8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!yKo8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!yKo8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!yKo8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21yKo8%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2133744,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yKo8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!yKo8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!yKo8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!yKo8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dfe09c3-ec73-4e84-80d2-bde701a7bc9e_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><mark data-color="#ea9999" style="background-color: rgb(234, 153, 153); color: rgb(0, 0, 0);">TDLR:</mark></strong> Databricks&#8217; new <code>FILE</code> type brings unstructured assets (<em><a href="iframe.php?url=https%3A%2F%2Fbrokenco.de%2F2026%2F01%2F19%2Fmultimodal-delta-lake.html">multimodal data</a></em>) ((<em>video, audio, etc</em>)) into the Lakehouse with the ease that we expect in this chaotic and agentic age we find ourselves in. I&#8217;ve been thinking more and more about multimodal data ever since <a href="iframe.php?url=https%3A%2F%2Fbrokenco.de%2Fabout">Tyler</a> brought it to my attention early on. On top of that, finding myself doing more and more unstructured data things these days tends to change how one thinks, such as building agentic solutions at the $day_job. One has to imagine that this type of data will only increase in popularity and, in fact, become more of a requirement for many data engineers in the future. By &#8220;this&#8221;, I mean munging unstructured or untraditional data into the Lakehouse that was once ruled by tabular data.</p><blockquote><p><em>If your curious about an introduction to <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fmultimodal-data-and-processing-afraid">multimodal data</a>, or what it even is, checkout this previous blog post.</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fmultimodal-data-and-processing-afraid" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4VVm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png 424w, https://substackcdn.com/image/fetch/$s_!4VVm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png 848w, https://substackcdn.com/image/fetch/$s_!4VVm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png 1272w, https://substackcdn.com/image/fetch/$s_!4VVm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%214VVm%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1295173,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://dataengineeringcentral.substack.com/p/multimodal-data-and-processing-afraid&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4VVm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png 424w, https://substackcdn.com/image/fetch/$s_!4VVm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png 848w, https://substackcdn.com/image/fetch/$s_!4VVm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png 1272w, https://substackcdn.com/image/fetch/$s_!4VVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3b6bf6-c200-41b5-bc03-ae5b8bd35cd1_1754x984.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Pontificating on concepts and architecture.</h3><p>Ok, before you all start to berate me about how the new <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Funstructured%2Ffile">FILE data type from Databricks</a> is no big deal, I implore you to soothe your inner angry engineer and bring forth your kind systems architect inner child. We need to sometimes zoom out a little and broaden our horizons, measure things by a different ruler than what we are used to. For as long as I&#8217;ve been hacking out code, it&#8217;s always been true that programmers have a certain foible to laud the complex, hard, and technically impressive &#8220;things.&#8221; Now, this isn&#8217;t bad in and of itself. But it&#8217;s the same reason many a &#8220;smart&#8221; engineer languishes in a dark cubicle while their &#8220;less smart&#8221; peer continues to advance.</p><div class="callout-block" data-callout="true"><p>Once you reach a point in your career and technical life, you come to appreciate things from a 10,000-foot level, and stop worrying about the extra and unused argument passed into a method.</p></div><p>This is that sort of innovation, simple but useful. Just because something appears simple on the surface, doesn&#8217;t mean it should be simply ignored. Why should we care about FILE data types on Databricks Lakehouse?</p><ul><li><p>Bringing the management of ALL data into the Lakehouse.</p></li><li><p>Bringing logic and data processing into a single spot.</p></li><li><p>Architectural simplicity and reducing complexity.</p></li><li><p>Unity Catalog governance on top of unstructured data.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213eEu%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3eEu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png 424w, https://substackcdn.com/image/fetch/$s_!3eEu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png 848w, https://substackcdn.com/image/fetch/$s_!3eEu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png 1272w, https://substackcdn.com/image/fetch/$s_!3eEu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213eEu%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png" width="1456" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190811,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3eEu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png 424w, https://substackcdn.com/image/fetch/$s_!3eEu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png 848w, https://substackcdn.com/image/fetch/$s_!3eEu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png 1272w, https://substackcdn.com/image/fetch/$s_!3eEu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64b4137c-9a77-4627-95a6-a03769c92777_1900x778.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Simple changes in architecture and systems design can, and do, breed all sorts good, or bad things. Doing things in separate systems always creates overhead and technical challenges that suck the lifeblood out of innovation. Having a single source system that controls ALL the data, no matter the kind, allows for fast and rapid product and engineering iteration. This is how we should view the new FILE data type being provided on the Databricks platform. It gives a reason to bring previously unstructured data that we didn&#8217;t view as &#8220;fit for the lakehouse&#8221; into the fold.</p><blockquote><p><strong>As designers of data platforms and systems, we should embrace the ability to hack off other systems that introduce bottlenecks to our ulitmate goals. </strong></p></blockquote><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/from-podcast-video-to-searchable?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/from-podcast-video-to-searchable?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Ffrom-podcast-video-to-searchable%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h2>Lets talk about the FILE data type.</h2><p>Ok, so let&#8217;s get down the brass tacks. At some point we can test out this new FILE data type in Databricks but storing some video shorts from my <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fpodcast">podcast, which you had better be very familiar with</a>. But, for now let&#8217;s make what we can out of the technical details of a FILE data type.</p><div class="pullquote"><p>&#8220;For each row, the <code>FILE</code> type stores metadata and a governed link to the file in storage. A <code>FILE</code> value includes <code>uri</code>, <code>size</code>, <code>content_type</code>, and <code>checksum</code> metadata fields. Metadata queries don't require full file reads, improving query performance.&#8221; <br>- <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Funstructured%2Ffile">Databricks Docs</a></p></div><p>Again, of course the more maniacal among us might think, &#8220;So, we could just store a file URI as a <code>STRING</code> and dump <code>bytes</code> into some column. Well, yes, I guess you could do that; it&#8217;s also one of those ideas that sounds great in theory but would fail in production with all its unthought-of glory. Again, anyone can do anything with enough &#8216;umph, but that doesn&#8217;t mean you should.</p><p>We can think of a FILE value in two different parts.</p><ul><li><p>its <strong>metadata</strong>.</p><ul><li><p><code>uri</code>, <code>size</code>, <code>content_type</code>, and <code>checksum</code></p></li></ul></li><li><p>its <strong>content</strong>.</p><ul><li><p><code>FILE EXTERNAL</code> or <code>FILE MANAGED</code></p></li></ul></li></ul><p>The last concept is probably one of the more important when it comes to <code>FILE</code> data types, deciding if <code>FILE EXTERNAL</code> fits your needs, or <code>FILE MANAGED</code>. If you are at all familiar with Databricks you&#8217;ve probably run across this sort of &#8220;managed&#8221; vs &#8220;unmanaged&#8221; concepts with <code>Tables</code> , Delta Lake style. We should always do everything possible to ensure we use the <code>MANAGED</code> options so we get the ease of built-in permissions, governance, and the cleanup of unreferenced or unused data. Otherwise, you are left to manage the details yourself, which will promptly be ignored or forgotten.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21OoyC%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OoyC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png 424w, https://substackcdn.com/image/fetch/$s_!OoyC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png 848w, https://substackcdn.com/image/fetch/$s_!OoyC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png 1272w, https://substackcdn.com/image/fetch/$s_!OoyC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21OoyC%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png" width="1400" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:200434,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OoyC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png 424w, https://substackcdn.com/image/fetch/$s_!OoyC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png 848w, https://substackcdn.com/image/fetch/$s_!OoyC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png 1272w, https://substackcdn.com/image/fetch/$s_!OoyC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0b8ff6-2603-4d84-b33d-970bc09a152e_1400x596.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">source - <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Funstructured%2Ffile">Databricks docs</a></figcaption></figure></div><p>If indeed you are smart, as I know you are, picking the <code>FILE MANAGED</code> option is what you will do. But, this brings up another concept you will have to think about called <code>FileSpace</code> . This is a simple and obvious concept: a <code>FileSpace</code> is a Unity Catalog <code>Volume</code> that you will use for the table, with the <code>File</code> data type, that will hold the actual files themselves. This is needed because when we have &#8220;managed&#8221; <code>File</code> data, and say we delete a file &#8230; it can be garbage collected later and cleaned up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21wkjX%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wkjX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png 424w, https://substackcdn.com/image/fetch/$s_!wkjX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png 848w, https://substackcdn.com/image/fetch/$s_!wkjX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png 1272w, https://substackcdn.com/image/fetch/$s_!wkjX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21wkjX%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png" width="1456" height="478" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:478,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72709,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wkjX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png 424w, https://substackcdn.com/image/fetch/$s_!wkjX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png 848w, https://substackcdn.com/image/fetch/$s_!wkjX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png 1272w, https://substackcdn.com/image/fetch/$s_!wkjX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89aa6915-5801-4cb5-b8c7-80816d5ec051_1540x506.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>Playing with the new FILE data type.</h3><p>Ok, so let&#8217;s actually put our hands to the plow and do a little thing. See if the fuss around this new data type lives up to the hype I&#8217;ve given it. We will do a few straightforward things to see how helpful, in the real world, it is to work with this ability to play with non-conventional data in the Lakehouse world that&#8217;s always trying to keep us down. Here is my plan.</p><ul><li><p>Create a new managed <code>Volume</code></p></li><li><p>Create a new Lakehouse table (Delta) with <code>FILE</code> column.</p><ul><li><p>which uses the above <code>Volume</code></p></li></ul></li><li><p>Ingest some video data (shorts) from my Podcast.</p></li><li><p>Try to write a Python UDF to work on this data.</p><ul><li><p>Let&#8217;s try to transcribe the video to text and store these STRINGs.</p></li></ul></li></ul><p>This seems like a totally reasonable thing to do, to touch what we need to and make sure it all meets our expectations.</p><p>First, let&#8217;s create a <code>Volume</code> that can back our soon-to-be existing Delta Lake table with a <code>File</code> column, backed by this <code>Volume</code> we just created.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;03bcf836-2d29-4eeb-871e-40cedc5a1d1d&quot;,&quot;duration&quot;:null}"></div><p>Next, we can right the simple DDL required to create a table to hold my Podcast data, including the <code>FILE</code> type, using the new <code>Volume</code> as the store for this data.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3qhI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png 424w, https://substackcdn.com/image/fetch/$s_!3qhI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png 848w, https://substackcdn.com/image/fetch/$s_!3qhI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png 1272w, https://substackcdn.com/image/fetch/$s_!3qhI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213qhI%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png" width="881" height="185" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:185,&quot;width&quot;:881,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35029,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3qhI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png 424w, https://substackcdn.com/image/fetch/$s_!3qhI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png 848w, https://substackcdn.com/image/fetch/$s_!3qhI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png 1272w, https://substackcdn.com/image/fetch/$s_!3qhI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6babb5a-74de-4a97-a586-d42c2f3a57ef_881x185.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Of course, this was the easy part; first things first, can we ingest a video file from S3 into our newly created table? I suggest that if you want a deeper dive into how to ingest different types of data into these new tables that have a <code>FILE</code> type that could be managed or unmanaged, <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fingestion%2Ffile">that you read this documentation.</a></p><p>I don&#8217;t feel like diving too deeply into this yet, because I don&#8217;t know what I&#8217;m talking about, but where and how in a production system would you land such unstructured data files? One would have to assume either shipping files straight into a Databricks <code>Volume</code>, or more likely, landing them in S3 or some other cloud storage. This question, in and of itself, begs a deeper dive into what a production ingestion pipeline would look like. We wouldn&#8217;t want to store large files in two places, methinks. I love rabbit holes, but I must avoid this one for now.</p><blockquote><p>Back to the issue at hand. I now have 3 mp4 files sitting in S3 at <code>s3://confessions-of-a-data-guy/video_data/</code> , let&#8217;s write some Python in a Databricks Notebook and see what it&#8217;s lake to get some actual data into our new Delta table with <code>FILE</code> data types!</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Q9xk%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q9xk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png 424w, https://substackcdn.com/image/fetch/$s_!Q9xk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png 848w, https://substackcdn.com/image/fetch/$s_!Q9xk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png 1272w, https://substackcdn.com/image/fetch/$s_!Q9xk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Q9xk%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png" width="1456" height="565" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:565,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184113,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q9xk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png 424w, https://substackcdn.com/image/fetch/$s_!Q9xk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png 848w, https://substackcdn.com/image/fetch/$s_!Q9xk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png 1272w, https://substackcdn.com/image/fetch/$s_!Q9xk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3314eb9-37af-4fa6-b1af-e1b39e7abb5a_2266x880.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s write a simple PySpark script for our first attempt at ingesting this data.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pyspark.sql import functions as F

SOURCE_PATH = "s3://confessions-of-a-data-guy/video_data/"
TABLE = "podcasting"

videos = (
    spark.read
    .format("file")
    .load(SOURCE_PATH)
    .select(
        F.xxhash64(F.col("path")).cast("bigint").alias("id"),
        F.regexp_replace(
            F.col("_metadata.file_name"),
            r"\.[^.]+$",
            "",
        ).alias("title"),

        # Populate later with the Whisper transcription UDF.
        F.lit(None).cast("string").alias("transcript"),
        F.col("file"),
    )
)

videos.writeTo(TABLE).append()</code></pre></div><p>This is about as straightforward code as it comes; of course, in a production scenario, we might have a Lakeflow pipeline or something else adding new files as they arrive. And we hit our first error. <mark data-color="#ea9999" style="background-color: rgb(234, 153, 153); color: rgb(0, 0, 0);">studio.mp4 is not a supported ingestion source for managed file type</mark></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">SparkException: Job aborted due to stage failure: java.lang.SecurityException: Source path s3://confessions-of-a-data-guy/video_data/riverside_common_sense in engineering_dan_beach studio.mp4 is not a supported ingestion source for managed file type.
&#9;at com.databricks.sql.fileref.UploadToManagedStorage.$anonfun$validateSourcePath$1(FileReferenceCreationModes.scala:116)
&#9;at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)</code></pre></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21T186%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T186!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png 424w, https://substackcdn.com/image/fetch/$s_!T186!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png 848w, https://substackcdn.com/image/fetch/$s_!T186!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png 1272w, https://substackcdn.com/image/fetch/$s_!T186!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21T186%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:270601,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T186!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png 424w, https://substackcdn.com/image/fetch/$s_!T186!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png 848w, https://substackcdn.com/image/fetch/$s_!T186!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png 1272w, https://substackcdn.com/image/fetch/$s_!T186!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff7b96b-fef5-4185-a807-11790e37e6cc_2088x1114.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Of course, trusty AI helped me understand what I did wrong, which makes sense, but is also pretty annoying.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">That error occurs because Databricks cannot ingest a &nbsp;FILE MANAGED&nbsp; value directly from a raw &nbsp;s3://&nbsp; path. Stage the MP4s into a separate Unity Catalog volume first, then read the staged files as &nbsp;FILE&nbsp; references and append them to &nbsp;podcasting&nbsp;. Do not use the &nbsp;data-engineering-central-files&nbsp; FileSpace volume as staging; 
it is reserved for the table&#8217;s managed files.</code></pre></div><p>Here is my complaint: what if I have tons of pre-existing video/and other non-traditional data sitting in cloud storage somewhere? This could be a serious problem in a large production system with unstructured audio and video data; we could have many hundreds of TBs of data that would have to be transferred into a <code>Volume</code>. This could be a showstopper for large orgs. I also, when reading the docs, <mark data-color="#ff0000" style="background-color: rgb(255, 0, 0); color: rgb(255, 255, 255);">missed a critical note.</mark></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213zu3%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3zu3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png 424w, https://substackcdn.com/image/fetch/$s_!3zu3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png 848w, https://substackcdn.com/image/fetch/$s_!3zu3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png 1272w, https://substackcdn.com/image/fetch/$s_!3zu3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213zu3%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png" width="1400" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:147056,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3zu3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png 424w, https://substackcdn.com/image/fetch/$s_!3zu3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png 848w, https://substackcdn.com/image/fetch/$s_!3zu3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png 1272w, https://substackcdn.com/image/fetch/$s_!3zu3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F175bb562-21d6-4341-9efd-aea2006f44f3_1400x484.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Databricks docs</figcaption></figure></div><p>But this takes us back to <code>Volumes</code> , could we just do an <code>EXTERNAL</code> <code>Volume</code> pointed to our/my S3 bucket?</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;sql&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-sql">CREATE EXTERNAL VOLUME confessions.default.raw_podcast_data
LOCATION 's3://confessions-of-a-data-guy/video_data/';</code></pre></div><p>Let&#8217;s rework our code a little bit then to match this new layout.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pyspark.sql import functions as F

SOURCE_VOLUME_PATH = "/Volumes/confessions/default/raw_podcast_data/"
TABLE = "podcasting"

source_videos = (
    spark.read
    .format("file")
    .load(SOURCE_VOLUME_PATH)
    .filter(F.lower(F.col("path")).rlike(r".*\.mp4$"))
    .select(
        F.xxhash64(F.col("path")).cast("bigint").alias("id"),
        F.regexp_replace(
            F.col("_metadata.file_name"),
            r"\.[^.]+$",
            "",
        ).alias("title"),
        F.lit(None).cast("string").alias("transcript"),
        F.col("file"),
    )
)

new_videos = source_videos.join(
    spark.table(TABLE).select("id"),
    on="id",
    how="left_anti",
)

new_videos.writeTo(TABLE).append()</code></pre></div><p>Worked like a charm!</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;83454865-289f-4f8d-aca5-78feb55aa015&quot;,&quot;duration&quot;:null}"></div><p>And just like that we have ingested our unstructured data, video in this case, right into our Lakehouse, with all the power that comes with such a move! It was pretty simple to do, and just like that we now have best-in-class security, governance, and the power of the Databricks platform at our fingertips, with this once hard-to-manage data ready to be told what to do!</p><p><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">Amazing!</mark></p><p>Of course, we would probably have that Python UDF working to start with and run it in the same script, but for fun, let&#8217;s see if we can get something written that will read the files, get the transcript using Whisper, and then <code>MERGE</code> back into the table. We have solved the problems and tried out the <code>FILE</code> type, but let&#8217;s keep kicking it a little.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/from-podcast-video-to-searchable?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Ffrom-podcast-video-to-searchable%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from pyspark.sql.types import FileRef, StringType

_model_cache = {}


def transcribe_video(file: FileRef) -&gt; str:
    if file is None:
        return None

    import os
    from pathlib import Path

    import imageio_ffmpeg
    import torch
    import whisper

    if "whisper" not in _model_cache:
        _model_cache["whisper"] = whisper.load_model("tiny.en", download_root="/tmp/whisper")

    ffmpeg_dir = str(Path(imageio_ffmpeg.get_ffmpeg_exe()).parent)
    os.environ["PATH"] = f"{ffmpeg_dir}:{os.environ['PATH']}"

    result = _model_cache["whisper"].transcribe(
        str(file.as_local_file()),
        language="en",
        fp16=torch.cuda.is_available(),
        verbose=False,
    )

    return result["text"].strip()


spark.udf.register(
    "transcribe_video",
    transcribe_video,
    StringType(),
)
spark.sql("""
MERGE INTO podcasting AS target
USING (
  SELECT
    id,
    transcribe_video(file) AS transcript
  FROM podcasting
  WHERE transcript IS NULL
) AS source
ON target.id = source.id
WHEN MATCHED THEN
  UPDATE SET target.transcript = source.transcript;
  """)</code></pre></div><blockquote><p>Hotdog! Look at that, ma! She can print this off and tape it up on the fridge. </p></blockquote><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;eaa7e2c4-892d-4e2b-b610-7f2f6573e09c&quot;,&quot;duration&quot;:null}"></div><p>So, here&#8217;s the deal: simply storing some mp4 files in cloud storage, reading them with Python, and ripping out the transcript isn't amazing or groundbreaking. I urge you to put your inner systems<mark data-color="#ffd966" style="background-color: rgb(255, 217, 102); color: rgb(0, 0, 0);">-architect hat on for a minute and set</mark> down the engineer hat. <mark data-color="#ffd966" style="background-color: rgb(255, 217, 102); color: rgb(0, 0, 0);">It&#8217;s about WHERE this is all taking place, and what that means at a 10,000-foot level.</mark></p><blockquote><p><strong>This is happening inside Unity Catalog, with all that this entails at an enterprise level.</strong></p></blockquote><p>First-class data citizens are being created from data we typically wouldn't find in most Lakehouse architectures. This is a game changer for orgs wanting to bring the power of Unity Catalog and Databricks to bear on ALL data types. PDFs, Docs, Video, Audio, or whatever, doesn&#8217;t matter. This is how innovation happens; this is how costs and complexity that have been around for decades are deleted in a single swoop. I&#8217;m sure this is only the beginning of what Databricks has planned in the multi-modal data space, we are sure to be on the edge of some exciting features and improvements in the future!</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/from-podcast-video-to-searchable/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Ffrom-podcast-video-to-searchable%2Fcomments"><span>Leave a comment</span></a></p><p><a href="iframe.php?url=https%3A%2F%2Fwww.youtube.com%2F%40dataengineeringdan">Come join me over on YouTube if you get bored!</a></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.youtube.com%2F%40dataengineeringdan" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tTP5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 424w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 848w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 1272w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21tTP5%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png" width="831" height="224" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:224,&quot;width&quot;:831,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.youtube.com/@dataengineeringdan&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/217440550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tTP5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 424w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 848w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 1272w, https://substackcdn.com/image/fetch/$s_!tTP5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd282fb02-a4a9-4d41-8846-9854bda9ec2e_831x224.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[Databricks LLM (APIs)/Modeling Serving. Thoughts from the Frontline.]]></title><description><![CDATA[a brave new world]]></description><link>https://dataengineeringcentral.substack.com/p/databricks-llm-apismodeling-serving</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/databricks-llm-apismodeling-serving</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Sun, 20 Sep 2026 23:48:19 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vA3w%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vA3w%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vA3w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!vA3w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!vA3w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!vA3w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vA3w%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1918500,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/216195157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vA3w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!vA3w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!vA3w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!vA3w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc56a7521-633e-4d5f-a995-9881a0b72f27_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To be honest I&#8217;ve long ago given up on the hectic page of changes in the AI world, there&#8217;s just too much for one poor guy, stuck in the middle of a cornfield, to track. The marketing hype train about the newest Foundational Model turned out to be the little boy who cried wolf. I suppose it&#8217;s both good and bad for the power users out there, the folk on the ground trying to deploy production ready solutions. There is always something new and improved, but it&#8217;s extremely difficult to find ones self on solid footing where we feel sure of ourselves. <mark data-color="rgb(147, 196, 125)" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">One could argue that this is where the fun is found though, on the rough edges of the goings and comings of features.</mark></p><p>In the <em>$day_job</em> I&#8217;ve had the pleasure of building a few different &#8220;agentic applications,&#8221; from chatbots to more traditional question and answer pipelines. So, although I&#8217;m not Databricks AI expert by any stretch of the imagination, I do have some thoughts on generally what it looks like to serve LLM traffic via Databricks; a platform I would argue that makes it so simple, it&#8217;s criminal. I want to explain why that is. I also want to talk at a 10,000 foot level what you should be thinking about when starting an LLM/Agentic project of some sort. Hopefully what I&#8217;ve learned will help those of you who might be new or just starting down that long and winding road.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><blockquote><p>This is NOT a post about &#8220;how do I setup a provisioned model serving AI Gateway LLM on Databricks.&#8221; This is more of a conceptual point of view of &#8230;</p></blockquote><ul><li><p><mark data-color="rgb(164, 194, 244)" style="background-color: rgb(164, 194, 244); color: rgb(0, 0, 0);">What are my options?</mark></p></li><li><p><mark data-color="rgb(164, 194, 244)" style="background-color: rgb(164, 194, 244); color: rgb(0, 0, 0);">How should I generally think about Databricks LLM options?</mark></p></li><li><p><mark data-color="rgb(164, 194, 244)" style="background-color: rgb(164, 194, 244); color: rgb(0, 0, 0);">What ancillary features affect my decision?</mark></p></li></ul><p>The truth is the answer is always and forever, &#8220;it depends.&#8221; It depends on your content, business context, cost context, engineering requirements, etc. It always depends. I&#8217;m just giving you my take based on my context, that might be different for you.</p><div class="callout-block" data-callout="true"><p><em><strong>Thanks to <a href="iframe.php?url=http%3A%2F%2Fwww.delta.io%2F">Delta</a> for sponsoring this newsletter! I use Delta Lake daily, and I believe it represents the future of Data Engineering. Content like this would not be possible without their support. Check out <a href="iframe.php?url=http%3A%2F%2Fwww.delta.io%2F">their website</a> below.</strong></em></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HSdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 424w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 848w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1272w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21HSdP%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp" width="600" height="123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:123,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4188,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!HSdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 424w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 848w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1272w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1456w" sizes="100vw"></picture><div></div></div></div></figure></div></div><div><hr></div><h2>Yeah, so &#8230; what are my options?</h2><p>Ok, I&#8217;m pretty sure I put enough caveats in place, but in case I didn&#8217;t &#8230; this stuff is changing rapidly all the time, what I say might be changed, depreciated, or replaced by the time you finish reading. Use at your own risk. I&#8217;m going to start under the assumption that you are coming in fresh and clean as a whistle, your boss says &#8220;<em>We need this fairly complex application built in the next few weeks, use our Databricks account &#8230; see ya later.</em>&#8221; Again, who knows what you&#8217;re building, but you need an LLM to call, what next?</p><p>So, right out the box you have to understand a general boxes, or flavors of LLM serving. Each one fits a different use case, of course with plenty of overlap. Let&#8217;s draw a picture first. Yeah, yeah, I&#8217;m oversimplifying the matter, but that is my intention. I want to hide some of the nuance and think generally about what buckets we can put Databricks LLM/Agentic offerings in. Sure, we have to draw the lines somewhere; yes they are blurred, yes they change a lot, but we have to draw them at some point.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21UEEG%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UEEG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png 424w, https://substackcdn.com/image/fetch/$s_!UEEG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png 848w, https://substackcdn.com/image/fetch/$s_!UEEG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!UEEG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21UEEG%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png" width="1456" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:366310,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/216195157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!UEEG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png 424w, https://substackcdn.com/image/fetch/$s_!UEEG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png 848w, https://substackcdn.com/image/fetch/$s_!UEEG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!UEEG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b4419a4-212d-4865-874c-fbf70c4da544_1926x1122.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I went ahead and gave you my answers (<em>When should I use what?</em>) a little early, but we will unpack my reasoning a little more. For now, at the time of writing, I see the options as follows from a very simplistic point of view.</p><ul><li><p><strong>pay-per-token</strong></p><ul><li><p><em>the serverless of LLM APIs</em></p></li></ul></li><li><p><strong>provisioned throughput</strong></p><ul><li><p><em>the ultimate in LLM infererence options</em></p></li></ul></li><li><p><strong>external models</strong></p><ul><li><p><em>for massive teams wanting control of Anthropic/OpenAI etc.</em></p></li></ul></li><li><p><strong>custom model/Agents serving</strong></p><ul><li><p>the 1% doing Lord knows what</p></li></ul></li></ul><p>For todays discussion, I&#8217;m more concerned with talking about the two I used most, and I&#8217;m guessing a lot of others will use a lot. Yes, I&#8217;ve done the Databricks App route with their button-click/terraform easy deployment of an agent, indeed it is nice. But, that topic is due it&#8217;s own post, so I&#8217;m going to skip that customer LLM/Agent serving product. I&#8217;m also only going to only touch briefly on external models, because that is a specific audience as well. Instead, I will focus on two popular options, pay-per-token <mark data-color="rgb(208, 224, 227)" style="background-color: rgb(208, 224, 227); color: rgb(0, 0, 0);">Foundational Models</mark> and <mark data-color="rgb(201, 218, 248)" style="background-color: rgb(201, 218, 248); color: rgb(0, 0, 0);">Provisioned Throughput</mark>. These two will keep us busy enough as it is.</p><p>Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p><div><hr></div><h3>What do you need besides an LLM Endpoint?</h3><p>Sure, so if you&#8217;re like me, half caveman, you always reach for the simplest options and lowest hanging fruit as the panacea to all engineering evils. This approach can sometimes come back to bite you in the old rear-end if you&#8217;re not careful. When it comes to AI, being the new Spice of Universe that is very new, the requirements and what the business requires can be a little complex. I would suggest that when choosing a product to serve some LLM use case, that you think more than just about &#8220;<em>I need an API for inference.</em>&#8221; That is much too simplistic and <strong><mark data-color="rgb(255, 229, 153)" style="background-color: rgb(255, 229, 153); color: rgb(0, 0, 0);">misses a lot of other requirements that you will have.</mark></strong></p><blockquote><p>Here are some areas of immediate concern that you will need to work through.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21YmjU%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YmjU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png 424w, https://substackcdn.com/image/fetch/$s_!YmjU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png 848w, https://substackcdn.com/image/fetch/$s_!YmjU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png 1272w, https://substackcdn.com/image/fetch/$s_!YmjU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21YmjU%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png" width="1456" height="534" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fdf7220-6950-416b-80e6-689444c52017_1632x598.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:534,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82649,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/216195157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!YmjU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png 424w, https://substackcdn.com/image/fetch/$s_!YmjU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png 848w, https://substackcdn.com/image/fetch/$s_!YmjU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png 1272w, https://substackcdn.com/image/fetch/$s_!YmjU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdf7220-6950-416b-80e6-689444c52017_1632x598.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Don&#8217;t get me wrong, there are a lot of things to worry about when throwing an API up into the cloud for others to use. Just about everything can, and will, go wrong if you aren&#8217;t prepared for it. Could be the users, could be the questions from your CTO; either of which can put you in an awkward position. When a Data Scientist gets excited and blows the token budget, or someone asks in a meeting where the logs are stored so they can see what users are doing and you start to cough &#8230; or worse yet, the CTO says &#8220;<em>Since I&#8217;m sure not everyone can access this model, which Group did you give permissions too?</em>&#8221; Heck, maybe it will be the ole&#8217; cost question, so based on X usage, what do you think the bills going to be?</p><ul><li><p><mark data-color="rgb(255, 242, 204)" style="background-color: rgb(255, 242, 204); color: rgb(0, 0, 0);">Logging</mark></p><ul><li><p>who&#8217;s doing what, audit</p></li></ul></li><li><p><mark data-color="rgb(255, 242, 204)" style="background-color: rgb(255, 242, 204); color: rgb(0, 0, 0);">Monitoring</mark></p><ul><li><p>tracking spend and usage</p></li></ul></li><li><p><mark data-color="rgb(255, 242, 204)" style="background-color: rgb(255, 242, 204); color: rgb(0, 0, 0);">Governance</mark></p><ul><li><p>who can access what, rate limits, routing, etc </p></li></ul></li></ul><p>It&#8217;s hard to dig into every single detail, but at the very least you should be concerned and consider logging, monitoring, and governance. Of course wrapped up in all that is important topics, cost, rate limits, and all the rest. To top it all off, we can&#8217;t really talk about these topics without talking about <a href="iframe.php?url=https%3A%2F%2Fwww.databricks.com%2Fproduct%2Fartificial-intelligence%2Funity-gateway">Unity Gateway</a>.</p><div><hr></div><h3>Unity Gateway as the entrypoint.</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.databricks.com%2Fproduct%2Fartificial-intelligence%2Funity-gateway" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BbWC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png 424w, https://substackcdn.com/image/fetch/$s_!BbWC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png 848w, https://substackcdn.com/image/fetch/$s_!BbWC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png 1272w, https://substackcdn.com/image/fetch/$s_!BbWC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21BbWC%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png" width="1456" height="452" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/$s_!BbWC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:452,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120292,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.databricks.com/product/artificial-intelligence/unity-gateway&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/216195157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!BbWC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png 424w, https://substackcdn.com/image/fetch/$s_!BbWC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png 848w, https://substackcdn.com/image/fetch/$s_!BbWC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png 1272w, https://substackcdn.com/image/fetch/$s_!BbWC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a5dd9-c589-47d3-b977-f3358efd55c9_1876x582.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What is Unity Gateway? Think of the LLM products we talked about above, like Foundational Models via API per token, or Provisioned Throughput as the the serving mechanism and Unity Gateway as the &#8220;<mark data-color="rgb(182, 215, 168)" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">how you govern and manage that served model.</mark>&#8221; And yes my friend, indeed you do want to govern your LLM. An unfettered LLM API is about as dangerous as it comes. You wouldn&#8217;t leave any other API built over the last decade just blowing in the breeze, so why would an LLM API being served be any different? It&#8217;s not.</p><blockquote><p><em>We care about who can do what, what&#8217;s happening, cost and controls &#8230; this is what Unity Gateway offers. The same first class controls we are used to on other Unity governed objects, applied to our AI tools.</em></p></blockquote><p>Look, it&#8217;s hard enough to build this agentic products, let along hand-rolling some bespoke monitoring solution on top of it all. We get paid to deliver results, not reinvent the wheel.</p><h4>Observe and Monitor</h4><p>For example, you need to understand Usage, Cost, and Performance? Never fear, you of course could always go straight to the source &#8230;</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;sql&quot;,&quot;nodeId&quot;:&quot;a426c3f5-ee36-44e8-9b21-0b9fce91c55c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-sql">SELECT * FROM system.ai_gateway.usage;
</code></pre></div><p>Build out your own <em>or</em> use some default Dashboards.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21tzxV%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tzxV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png 424w, https://substackcdn.com/image/fetch/$s_!tzxV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png 848w, https://substackcdn.com/image/fetch/$s_!tzxV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png 1272w, https://substackcdn.com/image/fetch/$s_!tzxV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21tzxV%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png" width="1456" height="750" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/$s_!tzxV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:750,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:251343,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/216195157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!tzxV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png 424w, https://substackcdn.com/image/fetch/$s_!tzxV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png 848w, https://substackcdn.com/image/fetch/$s_!tzxV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png 1272w, https://substackcdn.com/image/fetch/$s_!tzxV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9456199-d64c-42c2-bfca-e97b381ef571_1712x882.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">source - <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fai-gateway%2Fusage-tracking%23built-in-usage-dashboard">Databricks</a></figcaption></figure></div><p>Wonder who&#8217;s accessing what and what those little stinkers are up to?</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;sql&quot;,&quot;nodeId&quot;:&quot;fb8fee88-1ec7-45a0-a747-634acafe8ed6&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-sql">SELECT * FROM system.access.audit;</code></pre></div><p>I&#8217;m not going to get into the details, that would be for another, how-to, type post, which we can do if you ask me. Remember, I&#8217;m just trying to introduce you at the 10,000 foot level to what is available to you; lay out the options so you know where to turn and research. Each one of these topics are very complex and require your full attention to understand if they meet your needs. But, it&#8217;s good to know they exist.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;40b64471-a82d-4e8f-970f-7dcaaaba0618&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Access
  - UC privileges on all AI securables; agents governed as UC models.
  - ABAC GRANT policies cover gateway resource types.
  - On-behalf-of-user execution for MCP.
  - Account-wide foundation model allowlisting via system.ai grants
  
  Traffic and cost
  - Smart Routing (Beta): picks model+agent harness per task by complexity, permissions, budget.
  - Budgets with per-user thresholds/hard spend caps; external-provider monitoring.
  - Rate limits at endpoint/user/service principal/group; traffic splitting; fallbacks.
  - OpenAI-compatible unified API.
  - Route Claude Code through Anthropic; Databricks auths, governance still applies.
  
  Service policies (guardrails)
  - SQL-defined policy functions attached to model or MCP services.
  - Built-ins: PII detection/redaction, content safety, prompt injection, data exfiltration.
  - MCP service policies control which tools an agent may invoke.
  - Blocked interactions return HTTP 200 with a block reason, not 4xx.
  
  Observability
  - Unified trace table (Beta): every request and response across all gateway services into one UC table, OpenTelemetry format
  - Usage tracking system tables; cost attribution by service, target model, principal, tag.
  - Payload logging to governed Delta; usage_context request tags for per-project attribution.
</code></pre></div><p>The point of all this is simply to broaden our horizons to what we need to think about, and to view this agentic systems as the complex web of details and requirements they actually are. It&#8217;s easy for us to just think API+LLM = done. Well &#8230; yes and no, and not really. You need to think about serving an LLM as an architectural decision in and of itself, because it is. <strong><mark data-color="rgb(106, 168, 79)" style="background-color: rgb(106, 168, 79); color: rgb(0, 0, 0);">Everyone&#8217;s use case is different, different orgs care about different things at different levels.</mark></strong></p><p><a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fai-gateway%2F">For all AI Unity Gateway features, explore the docs.</a></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/databricks-llm-apismodeling-serving?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/databricks-llm-apismodeling-serving?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdatabricks-llm-apismodeling-serving%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h3>Pay per token.</h3><p>I&#8217;m going to do my best to simply unwind the tangled web of spiders that makes up the real difference between all the LLM model serving options on Databricks, but I fear I might not be up to the task. Either way, I&#8217;m going going to skim the top layer off <mark data-color="rgb(246, 178, 107)" style="background-color: rgb(246, 178, 107); color: rgb(0, 0, 0);">pay-per-token</mark> and <mark data-color="rgb(246, 178, 107)" style="background-color: rgb(246, 178, 107); color: rgb(0, 0, 0);">provisioned throughput</mark> options. This stuff changes all the time, so I encourage you to do your own research and reading. I tend to think about pay-per-token as the starter pack for LLMs.</p><div class="pullquote"><p>&#8220;Preconfigured endpoints that serve the pay-per-token models are accessible in your Databricks workspace. These pay-per-token models are recommended for getting started.&#8221; - <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fmachine-learning%2Ffoundation-model-apis%2F%23use-foundation-apis">Databricks docs.</a></p></div><p>The pay-per-token models take the form of <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fmachine-learning%2Ffoundation-model-apis%2F">Databricks Foundational Models APIs</a>. These are out-of-the-box Endpoints that you do not need need to setup or configure yourself. They are just there. They just work. Hit the API, get a response.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%217k2S%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7k2S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png 424w, https://substackcdn.com/image/fetch/$s_!7k2S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png 848w, https://substackcdn.com/image/fetch/$s_!7k2S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png 1272w, https://substackcdn.com/image/fetch/$s_!7k2S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%217k2S%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png" width="1456" height="875" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/$s_!7k2S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:875,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Serving endpoints list&quot;,&quot;title&quot;:&quot;Serving endpoints list&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Serving endpoints list" title="Serving endpoints list" srcset="https://substackcdn.com/image/fetch/$s_!7k2S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png 424w, https://substackcdn.com/image/fetch/$s_!7k2S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png 848w, https://substackcdn.com/image/fetch/$s_!7k2S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png 1272w, https://substackcdn.com/image/fetch/$s_!7k2S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6ac1a2b-36cb-446a-aa04-3226769ca50a_1598x960.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fmachine-learning%2Ffoundation-model-apis%2F%23use-foundation-apis">source - Databricks docs</a></figcaption></figure></div><p>The serverless entrypoint to LLMs on Databricks. </p><ul><li><p><em>Databricks offers &#8220;priority&#8221; pay-per-token requests that get to jump the head of the line, if you need low latency.</em></p></li></ul><p>These pay-per-token Foundational Models (which can also be provisioned throughput) also conform the OpenAI spec, so calling them is standard. <strong><mark data-color="rgb(182, 215, 168)" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">For all you SQL hobbits, you can even do it from a Notebook in your favorite language!</mark></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213U0h%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3U0h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png 424w, https://substackcdn.com/image/fetch/$s_!3U0h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png 848w, https://substackcdn.com/image/fetch/$s_!3U0h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png 1272w, https://substackcdn.com/image/fetch/$s_!3U0h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%213U0h%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png" width="1456" height="469" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3U0h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:469,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83644,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/216195157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!3U0h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png 424w, https://substackcdn.com/image/fetch/$s_!3U0h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png 848w, https://substackcdn.com/image/fetch/$s_!3U0h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png 1272w, https://substackcdn.com/image/fetch/$s_!3U0h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8855a7d2-344b-4c65-abb2-130488fbcf6d_1634x526.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Or just even from a little Python script in a Notebook.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21dpOO%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dpOO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png 424w, https://substackcdn.com/image/fetch/$s_!dpOO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png 848w, https://substackcdn.com/image/fetch/$s_!dpOO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png 1272w, https://substackcdn.com/image/fetch/$s_!dpOO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21dpOO%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png" width="1456" height="642" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:642,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:279727,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/216195157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dpOO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png 424w, https://substackcdn.com/image/fetch/$s_!dpOO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png 848w, https://substackcdn.com/image/fetch/$s_!dpOO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png 1272w, https://substackcdn.com/image/fetch/$s_!dpOO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd111e304-010d-4204-b8c0-66e9096015e6_2278x1004.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The whole point here is you see what you get, it&#8217;s easy and straightforward, it&#8217;s obvious why Databricks provides this option and tells you that it&#8217;s a great entry-point, but might not be the best choice for high-priority and complex use cases. Remember, these models are shared across the entire Workspace, the logging goes into the same system table for everyone using it. Also, things logged to system tables etc, are locked down to admins only.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Metrics &#8212; automatic, no setup
  - system.ai_gateway.usage &#8212; token counts, latency, requester, request tags, per request routed through the gateway
  - system.serving.endpoint_usage &#8212; same idea for legacy serving endpoints
  - system.serving.served_entities &#8212; metadata per served foundation model</code></pre></div><p>The point being is that these pay-per-token Foundational Models are a great way to get started and fulfill requirements for simple uses cases that fit these pattern.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/databricks-llm-apismodeling-serving/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdatabricks-llm-apismodeling-serving%2Fcomments"><span>Leave a comment</span></a></p><div><hr></div><h3>Provisioned Throughput.</h3><p>On the other end of the spectrum, the most obvious choice for most people will be to pick a Foundational Model via Provisioned Throughput. You have two compute options within this, that will sound familiar to most people. There is On-Demand and Reserved Capacity options, this makes sense to all you AWS folk who are familiar with compute/EC2.</p><div class="pullquote"><p>&#8220;<mark data-color="#d0e0e3" style="background-color: rgb(208, 224, 227); color: rgb(0, 0, 0);">When you create a provisioned throughput model serving endpoint on Databricks, you allocate dedicated inference capacity to ensure consistent throughput for the foundation model you want to serve.</mark>&#8221; <br>- <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fmachine-learning%2Ffoundation-model-apis%2Fdeploy-prov-throughput-foundation-model-apis">Databricks Docs</a></p></div><p>If you are working on a project where you need BETTER ISOLATION for workloads, for whatever reason &#8230; this is the option you want to pick.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">New boundaries:

  - Your own inference table per endpoint. Pay-per-token is a shared workspace singleton, so its inference table mixes every team's traffic. A PT endpoint is yours &#8212; one table per workload, your catalog/schema,
    your retention, its ACLs owned by whoever created the service.
  - Batch payloads get logged. On pay-per-token, batch inference workloads get usage tracking only &#8212; no payload logging. PT logs batch too.
  - Table ownership is yours, not account-admin-gated. The system tables still need account + metastore admin, but the inference table you provision is a normal UC table you own and grant on.

Endpoint-level config pay-per-token can't do
  - Traffic splitting across served entities &#8212; canary a new model version, A/B two models, shift percentages. Not available on pay-per-token
  - Endpoint ACLs scoped to one workload rather than workspace-wide
  - Serverless usage policies for custom billing-attribution tags
</code></pre></div><p>You can also scale to zero with this setup, which is very nice for predictable workloads. Also, if you are working on this sort of project where you require fine grained control, most likely you will want to <a href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fai-gateway%2Finference-tables">read up on inference tables.</a> Debuggig, monitoring, optimization, compliance &#8230; these become easy problems to solve with model inference.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fdocs.databricks.com%2Faws%2Fen%2Fai-gateway%2Finference-tables" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xRxf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png 424w, https://substackcdn.com/image/fetch/$s_!xRxf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png 848w, https://substackcdn.com/image/fetch/$s_!xRxf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png 1272w, https://substackcdn.com/image/fetch/$s_!xRxf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21xRxf%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png" width="1456" height="776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b981d515-caaf-4007-807e-f97af334bfb0_1768x942.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:222027,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://docs.databricks.com/aws/en/ai-gateway/inference-tables&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/216195157?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xRxf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png 424w, https://substackcdn.com/image/fetch/$s_!xRxf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png 848w, https://substackcdn.com/image/fetch/$s_!xRxf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png 1272w, https://substackcdn.com/image/fetch/$s_!xRxf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb981d515-caaf-4007-807e-f97af334bfb0_1768x942.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Wrapping it up.</h3><p>I feel as if I didn&#8217;t even manage to scratch the surface of LLM and model serving on Databricks APIs/Endpoints. It&#8217;s a new and fast changing product(s), that are hard to stay on top of, also each bullet point above would be due a series of deep dive articles to understand in depth and best practice usage. Maybe we can do that in the future. Either way, I just wanted to give you all a 10,000 foot view of what to expect when just starting down the road of LLMs on Databricks.</p><blockquote><p>I don&#8217;t expect this article to stay relevant for long, but I think in general, it should at least help you logically start to grasp how to think about LLMS on Databricks and which tools to reach for your specific use case(s).</p></blockquote><p>It&#8217;s good to start to think about these highly complex agentic systems, and how they can be a simple API call, but often times are required to turn into something much more serious. We have to think about governance ad permission boundaries, cost and monitoring &#8230; these aren&#8217;t just side-options, they can make or break a system.</p><div class="callout-block" data-callout="true"><p>Sources:</p><p>  - Configure AI Gateway on model serving endpoints (https://docs.databricks.com/aws/en/ai-gateway/configure-ai-gateway-endpoints)</p><p>  - Foundation model Unity Catalog permissions (https://docs.databricks.com/aws/en/machine-learning/foundation-model-apis/model-uc-permissions)</p><p>  - Access control lists &#8212; Serving endpoint ACLs (https://docs.databricks.com/aws/en/security/auth/access-control/)</p><p>  - Manage model serving endpoints (https://docs.databricks.com/aws/en/machine-learning/model-serving/manage-serving-endpoints)</p><p>  - Databricks Foundation Model APIs (https://docs.databricks.com/aws/en/machine-learning/foundation-model-apis/)</p></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/databricks-llm-apismodeling-serving?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/databricks-llm-apismodeling-serving?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdatabricks-llm-apismodeling-serving%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Future of Data Engineering in the Age of AI | Erfan Hesami]]></title><description><![CDATA[AI Agents, Coding & Fundamentals]]></description><link>https://dataengineeringcentral.substack.com/p/the-future-of-data-engineering-in</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/the-future-of-data-engineering-in</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Wed, 16 Sep 2026 13:21:19 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fapi.substack.com%2Ffeed%2Fpodcast%2F215510550%2Fcd2e0a964ef05c0fcfe6848a7b33f49a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>I sat down with <strong><a href="iframe.php?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Ferfanhesami%2F">Erfan Hesami</a>, founder of Pipeline to Insights</strong>, to talk about where data engineering is headed as AI and agents become part of everyday engineering work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Ferfanhesami%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y900!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png 424w, https://substackcdn.com/image/fetch/$s_!Y900!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png 848w, https://substackcdn.com/image/fetch/$s_!Y900!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png 1272w, https://substackcdn.com/image/fetch/$s_!Y900!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Y900%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png" width="1352" height="772" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:772,&quot;width&quot;:1352,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:348678,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.linkedin.com/in/erfanhesami/&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/215510550?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y900!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png 424w, https://substackcdn.com/image/fetch/$s_!Y900!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png 848w, https://substackcdn.com/image/fetch/$s_!Y900!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png 1272w, https://substackcdn.com/image/fetch/$s_!Y900!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60129726-79a0-4e78-a8b9-b0e91ce5ffb7_1352x772.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We dig into the changing role of the data engineer, the growing overlap between data and AI engineering, and why strong fundamentals may actually become <strong>more important</strong> as AI makes writing code cheaper and easier.</p><div class="embedded-publication-wrap" data-attrs="{&quot;id&quot;:3044966,&quot;embedding_publication_id&quot;:1224799,&quot;name&quot;:&quot;Pipeline To Insights&quot;,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bQ6b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39f0f325-1faa-4944-817f-c8ac03724007_382x382.png&quot;,&quot;base_url&quot;:&quot;https://pipeline2insights.substack.com&quot;,&quot;hero_text&quot;:&quot;Pipeline To Insights is a community-driven blog by passionate Data Engineers who share real-world experiences, technical tutorials, and personal reflections to inspire growth and continuous learning in the evolving world of data and AI.&quot;,&quot;author_name&quot;:&quot;Pipeline to Insights&quot;,&quot;show_subscribe&quot;:true,&quot;logo_bg_color&quot;:&quot;#ffffff&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPublicationToDOMWithSubscribe"><div class="embedded-publication show-subscribe"><a class="embedded-publication-link-part" native="true" href="iframe.php?url=https%3A%2F%2Fpipeline2insights.substack.com%3Futm_source%3Dsubstack%26amp%3Butm_campaign%3Dpublication_embed%26amp%3Butm_medium%3Dweb%26amp%3Bembedding_publication_id%3D1224799"><img class="embedded-publication-logo" src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21bQ6b%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F39f0f325-1faa-4944-817f-c8ac03724007_382x382.png" width="56" height="56" style="background-color: rgb(255, 255, 255);"><span class="embedded-publication-name">Pipeline To Insights</span><div class="embedded-publication-hero-text">Pipeline To Insights is a community-driven blog by passionate Data Engineers who share real-world experiences, technical tutorials, and personal reflections to inspire growth and continuous learning in the evolving world of data and AI.</div><div class="embedded-publication-author-name">By Pipeline to Insights</div></a><form class="embedded-publication-subscribe" method="GET" action="iframe.php?url=https%3A%2F%2Fpipeline2insights.substack.com%2Fsubscribe%3Fembedding_publication_id%3D1224799"><input type="hidden" name="source" value="publication-embed"><input type="hidden" name="autoSubmit" value="true"><input type="email" class="email-input" name="email" placeholder="Type your email..."><input type="submit" class="button primary" value="Subscribe"></form></div></div><p>We also talk about AI agents inside modern data platforms, governance and security, AI-generated code and technical debt, controlling AI costs, the importance of human judgment, and why communication and business skills are becoming increasingly valuable for engineers.</p><ul><li><p>Erfan also shares the story behind <strong>Pipeline to Insights</strong>, how writing helped accelerate his own learning, and how consistency helped him grow the publication from its first post in October 2024 into a successful data and AI community.</p></li></ul><p>If you&#8217;re a <strong>data engineer, analytics engineer, AI engineer, or someone trying to break into data</strong>, this conversation offers a grounded look at what skills are likely to matter as AI changes how we build software and data systems.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/the-future-of-data-engineering-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/the-future-of-data-engineering-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fthe-future-of-data-engineering-in%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Back to the Basics. Threads.]]></title><description><![CDATA[staying grounded in an agentic world]]></description><link>https://dataengineeringcentral.substack.com/p/back-to-the-basics-threads</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/back-to-the-basics-threads</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 14 Sep 2026 12:19:11 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21-9ME%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21-9ME%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-9ME!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!-9ME!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!-9ME!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!-9ME!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21-9ME%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2172607,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/214337760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-9ME!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!-9ME!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!-9ME!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!-9ME!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe662a6ea-6724-4391-b750-a3dc283eacf9_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In part uno of this Back to the Basics series, <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fback-to-the-basics-recursion">we reviewed recursion in both SQL and Rust</a>. It&#8217;s always somewhat rewarding to remind ourselves of the little things that we fell in love with before agents took over, back in the days where StackOverflow was your last hope. Today we continue this series on basics, the idea being not some LeetCode or DSA endgame, but more of a simple reminder of sometimes fun, but often forgotten knowledge that seems more and more likely to slip into oblivion on the age of Lord Claudius.</p><blockquote><p>So, today we talk about threads, and because we are gluttons for punishment, <a href="iframe.php?url=https%3A%2F%2Fdoc.rust-lang.org%2Fbook%2Fch16-01-threads.html">we shall do so in Rust</a>. </p></blockquote><p>If you are looking for some academic and useless pontificating lecture on concurrency at Google scale, then you have come to the wrong place and should move promptly along. Here, we simply take the view of the average engineer and remind ourselves in some shape or form, of <mark data-color="#fce5cd" style="background-color: rgb(252, 229, 205); color: rgb(0, 0, 0);">applied basics</mark>. I&#8217;m just here to remind you that some of these core topics are fun in and of themselves, are approachable by the average programmer. We are not looking to master any topic, but really just poke it with a stick, write some code and lodge it in our brain. Who knows when that knowledge will be required and come handy?</p><p>So threads.</p><div class="callout-block" data-callout="true"><p><em><strong>Thanks to <a href="iframe.php?url=http%3A%2F%2Fwww.delta.io%2F">Delta</a> for sponsoring this newsletter! I use Delta Lake daily, and I believe it represents the future of Data Engineering. Content like this would not be possible without their support. Check out <a href="iframe.php?url=http%3A%2F%2Fwww.delta.io%2F">their website</a> below.</strong></em></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HSdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 424w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 848w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1272w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21HSdP%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp" width="600" height="123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:123,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4188,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!HSdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 424w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 848w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1272w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1456w" sizes="100vw"></picture><div></div></div></div></figure></div></div><div><hr></div><h2>Concurrency and Threads.</h2><p>I can still remember back in the good ole&#8217; days when I used to happily write Python scripts with Notepad++, with nary a care in the world. The simple act of solving a problem with my own two fingers however I saw fit, was a transformative time. It was at such a time I ran into something called <a href="iframe.php?url=https%3A%2F%2Fdocs.python.org%2F3%2Flibrary%2Fmultiprocessing.html">ProcessPools in Python.</a> Now back in the day this used to be a heated and hot topic for the GIL and Python haters, <a href="iframe.php?url=https%3A%2F%2Fwww.reddit.com%2Fr%2FPython%2Fcomments%2F1pxxket%2Fwhy_python_is_removing_the_gil_135_minutes_by%2F">but apparently such times are coming to an end.</a> </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.reddit.com%2Fr%2FPython%2Fcomments%2F1pxxket%2Fwhy_python_is_removing_the_gil_135_minutes_by%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0usQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png 424w, https://substackcdn.com/image/fetch/$s_!0usQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png 848w, https://substackcdn.com/image/fetch/$s_!0usQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png 1272w, https://substackcdn.com/image/fetch/$s_!0usQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%210usQ%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png" width="1456" height="517" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:517,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148144,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.reddit.com/r/Python/comments/1pxxket/why_python_is_removing_the_gil_135_minutes_by/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/214337760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0usQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png 424w, https://substackcdn.com/image/fetch/$s_!0usQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png 848w, https://substackcdn.com/image/fetch/$s_!0usQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png 1272w, https://substackcdn.com/image/fetch/$s_!0usQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8f959-3e88-4b4a-a19e-258029f4f34d_1634x580.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Without getting us caught in the weeds, I still remember the feeling of joy in slow old Python when realizing I could use ProcessPools in a heavy handed way to speed up the processing of data, files, and all sorts of other things that didn&#8217;t matter in the end, but stroked my ego to no end. I&#8217;ve learned long ago that there is nothing that will better stir up the angry hornets nest of the internet than posting some performance chart. Let me tell you, you will never do it right, and the internet will tell you so.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Frayon-in-rust-vs-python-process-and%3Futm_source%3Dpublication-search" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NRcX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png 424w, https://substackcdn.com/image/fetch/$s_!NRcX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png 848w, https://substackcdn.com/image/fetch/$s_!NRcX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png 1272w, https://substackcdn.com/image/fetch/$s_!NRcX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21NRcX%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png" width="1456" height="806" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:806,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192322,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://dataengineeringcentral.substack.com/p/rayon-in-rust-vs-python-process-and?utm_source=publication-search&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/214337760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NRcX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png 424w, https://substackcdn.com/image/fetch/$s_!NRcX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png 848w, https://substackcdn.com/image/fetch/$s_!NRcX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png 1272w, https://substackcdn.com/image/fetch/$s_!NRcX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b72d30-94b3-4429-99bc-7b516143077e_1634x904.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Concurrency in programming, at least my silly point of view, at the end of the day is really just making your program &#8220;<em>run faster.</em>&#8221; What other reason is there worthy of our time? Just do things fast, that&#8217;s all that matters.</p><div class="pullquote"><p>&#8220;<strong><mark data-color="#d0e0e3" style="background-color: rgb(208, 224, 227); color: rgb(0, 0, 0);"><span>Concurrency in programming is </span>the design and structuring of a program to handle multiple tasks that make progress over the same period of time</mark>&#8221; - Google AI</strong></p></div><p>Fair enough, more precisely, we want to do many things at the same time if possible. It may, or may not, end up making the program &#8220;faster&#8221;, but you get the drift. We usually end up measuring our progress in such terms. One way in which we can run two things at once is something called <em><mark data-color="#ffff00" style="background-color: rgb(255, 255, 0); color: rgb(0, 0, 0);">threads</mark></em>. This seems to be one of those silly topics that in a never ending complicated way, of course, can change depending on hardware and programming language. Again, I don&#8217;t care about all that mumbo-jumbo, I just want to have fun. So what are threads as it relates to concurrency?</p><div class="callout-block" data-callout="true"><p>A <strong>thread</strong> is <strong>the smallest unit of execution inside a process, allowing a program to run multiple tasks at the same time.</strong></p></div><p>Let&#8217;s start with Rust, and explore threads and maybe some very basic but useful way we might be able to use them to &#8220;speed&#8221; something up, or do work at the same time. It&#8217;s an interesting topic to see how people approach, we have things like <em><a href="iframe.php?url=https%3A%2F%2Frust-lang.github.io%2Fasync-book%2F">async Tokio</a></em> in Rust as well as <em><a href="iframe.php?url=https%3A%2F%2Fdocs.rs%2Fpariter%2Flatest%2Fpariter%2F">pariter</a></em> crates, both of them very easy ways to accomplish similar tasks in simple manners. Of course we should use these well oiled and used crates, and in other languages well known packages, but it can&#8217;t hurt sometimes to see what happens when we do things ourselves. Even if we do blow our proverbial coding foot off.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">use std::thread;

fn main() {
    let t1 = thread::spawn(|| {
        println!("Hello World");
    });

    let t2 = thread::spawn(|| {
        println!("Hello World");
    });

    t1.join().unwrap();
    t2.join().unwrap();
}
...
&gt;&gt; Hello World
&gt;&gt; Hello World</code></pre></div><p>What a simple program right? Who cares how fast we print Hello World, but really, how simple is it for a program to spawn a process that runs at the same time as another? In most languages it will be something easy like this. We have our main process running, and we have our two threads. It can be confusing at first, but we have our main &#8220;process&#8221; that runs, our program, which spins up to threads, each capable of doing something at the same time as the other.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">use std::thread;

fn main() {
    let t1 = thread::spawn(|| {
        println!("Hello World from thread 1");
    });

    let t2 = thread::spawn(|| {
        println!("Hello World from thread 2");
    });
    
    t1.join().unwrap();
    t2.join().unwrap();
    println!("Hello from the main process.");
}</code></pre></div><p>This brings in all sorts of complicated topics, depending on your langauge, of how it all actually works, why in the cast of Rust we need to call <em>.join()</em> etc. Again, I&#8217;m not writing this to give you a deep dive into concurrency with threads in Rust in particular, but more of a mental model of what threads can be fun in any language, and where concurrent processing could be used to get things done quickly.</p><p>Let&#8217;s keep things super simple. What if we have a lot of CSV files we want to process in Rust. <a href="iframe.php?url=https%3A%2F%2Fdivvy-tripdata.s3.amazonaws.com%2Findex.html">Let&#8217;s use the Divvy Bike Trips dataset</a> as fun way to test our theory of threads in Rust. We have 4 CSV files we need to process.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21UsYO%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UsYO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png 424w, https://substackcdn.com/image/fetch/$s_!UsYO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png 848w, https://substackcdn.com/image/fetch/$s_!UsYO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png 1272w, https://substackcdn.com/image/fetch/$s_!UsYO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21UsYO%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png" width="1090" height="424" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:424,&quot;width&quot;:1090,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133296,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/214337760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UsYO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png 424w, https://substackcdn.com/image/fetch/$s_!UsYO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png 848w, https://substackcdn.com/image/fetch/$s_!UsYO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png 1272w, https://substackcdn.com/image/fetch/$s_!UsYO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ab7c56-835a-4da7-a47c-33a5a0ef7f8d_1090x424.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Of course in a classic program, we would just do this in the main process, one file at a time.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">use std::fs::File;
use std::io::{BufRead, BufReader};
use std::time::Instant;

fn main() {
    let start = Instant::now();

    let files = vec![
        "data/202603-divvy-tripdata.csv",
        "data/202604-divvy-tripdata.csv",
        "data/202605-divvy-tripdata.csv",
        "data/202606-divvy-tripdata.csv",
    ];

    for file in files {
        let file_handle = File::open(file).unwrap();
        let reader = BufReader::new(file_handle);

        let count = reader.lines().count() - 1;

        println!("{}: {} records", file, count);
    }

    println!("Total time: {:?}", start.elapsed());
}</code></pre></div><p>All the runtimes are similar.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">danielbeach@Daniels-MacBook-Pro-2 thready % cargo run      
   Compiling thready v0.1.0 (/Users/danielbeach/code/thready)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.60s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 451.051708ms
danielbeach@Daniels-MacBook-Pro-2 thready % cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 408.576541ms
danielbeach@Daniels-MacBook-Pro-2 thready % cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 413.700917ms
</code></pre></div><p>Ok, but what if we have 10,000 files to work through on some server, maybe we wouldn&#8217;t want to do them one at a time, there must be a way to make this faster, how about using threads to process a few at a time. We have modern hardware. Now, it actually isn&#8217;t that complicated of code really, remember our simple printing of Hello World example? Let&#8217;s just combine this code that reads a CSV with our threading code.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">use std::fs::File;
use std::io::{BufRead, BufReader};
use std::thread;
use std::time::Instant;

fn main() {
    let start = Instant::now();

    let files = vec![
        "data/202603-divvy-tripdata.csv",
        "data/202604-divvy-tripdata.csv",
        "data/202605-divvy-tripdata.csv",
        "data/202606-divvy-tripdata.csv",
    ];

    let mut threads = vec![];

    for file in files {
        let t = thread::spawn(move || {
            let file_handle = File::open(file).unwrap();
            let reader = BufReader::new(file_handle);

            let count = reader.lines().count() - 1;

            println!("{}: {} records", file, count);
        });

        threads.push(t);
    }

    for t in threads {
        t.join().unwrap();
    }

    println!("Total time: {:?}", start.elapsed());
}</code></pre></div><p>And, as one would expect, when we use threads, specifically, one thread per file in this case, we get faster runtimes consistently.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">danielbeach@Daniels-MacBook-Pro-2 thready % cargo run      
   Compiling thready v0.1.0 (/Users/danielbeach/code/thready)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.60s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 162.972208ms
danielbeach@Daniels-MacBook-Pro-2 thready % cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 168.68625ms
danielbeach@Daniels-MacBook-Pro-2 thready % cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 168.084459ms</code></pre></div><p>I mean not exactly rocket science to implement or be surprised at uh? I mean if we look at the runtimes we reduced the runtime by more than half, with just a little extra code. But, I&#8217;m not saying threads are the silver bullet for every problem. Concurrent bugs are probably some of the hardest to debug, also, not every problem is a concurrency problem to be solved with a thread. For example, many modern computing problems have a lot to do with not CPU bound things (<em>like processing a CSV</em>), but maybe I/O problems, say waiting on a network to fulfill a request. Many programming languages provide things like <a href="iframe.php?url=https%3A%2F%2Fwww.reddit.com%2Fr%2Frust%2Fcomments%2F1ax32ot%2Fhow_is_asynchronous_programming_implemented_under%2F">async/await</a> that would be better suited for such situations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F868568%2Fwhat-do-the-terms-cpu-bound-and-i-o-bound-mean" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rV96!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png 424w, https://substackcdn.com/image/fetch/$s_!rV96!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png 848w, https://substackcdn.com/image/fetch/$s_!rV96!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png 1272w, https://substackcdn.com/image/fetch/$s_!rV96!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21rV96%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png" width="1456" height="555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:555,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:234175,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://stackoverflow.com/questions/868568/what-do-the-terms-cpu-bound-and-i-o-bound-mean&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/214337760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rV96!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png 424w, https://substackcdn.com/image/fetch/$s_!rV96!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png 848w, https://substackcdn.com/image/fetch/$s_!rV96!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png 1272w, https://substackcdn.com/image/fetch/$s_!rV96!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d4787d3-0851-46bb-b1f2-2c6095487ce1_1830x698.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These are important distinctions, but nonetheless, we did learn that with a little extra code and some threading, we more the doubled the speed of a simple program. Again, in whatever language you find yourself writing in, there are probably packages that have been written that can take your current code, and simply use this idea of concurrency under the hood to make it faster. Many of those tools hide the footguns and complexity away from you, which isn&#8217;t a bad thing.</p><p>For example, the <a href="iframe.php?url=https%3A%2F%2Fdocs.rs%2Fpariter%2Flatest%2Fpariter%2F">pariter crate</a> I mentioned earlier in Rust, is a great example where concurrency can be applied in a much simpler and straight forward manner, so we get the best of both worlds. Simple code that is easy to understand and read, yet with the power of concurrency baked in.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;rust&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-rust">use pariter::IteratorExt;
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::time::Instant;

fn main() {
    let start = Instant::now();

    let files = vec![
        "data/202603-divvy-tripdata.csv",
        "data/202604-divvy-tripdata.csv",
        "data/202605-divvy-tripdata.csv",
        "data/202606-divvy-tripdata.csv",
    ];

    files
        .into_iter()
        .parallel_map(|file| {
            let file_handle = File::open(file).unwrap();
            let reader = BufReader::new(file_handle);

            let count = reader.lines().count() - 1;

            (file, count)
        })
        .for_each(|(file, count)| println!("{}: {} records", file, count));

    println!("Total time: {:?}", start.elapsed());
}
</code></pre></div><p>The results are much the same as our hand rolled threading, but less ugly. I mean if I was picking, I would choose this code every-time because of its simplicity. </p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">danielbeach@Daniels-MacBook-Pro-2 thready % cargo run
   Compiling crossbeam-utils v0.8.23
   Compiling crossbeam-channel v0.5.17
   Compiling pariter v0.6.0
   Compiling thready v0.1.0 (/Users/danielbeach/code/thready)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.45s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 166.762334ms
danielbeach@Daniels-MacBook-Pro-2 thready % cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 167.71775ms
danielbeach@Daniels-MacBook-Pro-2 thready % cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/thready`
data/202603-divvy-tripdata.csv: 317037 records
data/202604-divvy-tripdata.csv: 448252 records
data/202605-divvy-tripdata.csv: 653704 records
data/202606-divvy-tripdata.csv: 762550 records
Total time: 171.465708ms</code></pre></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>The end of the matter.</h3><p>This just goes to show you how important it is to at least be aware of some of the basics of how our computers and servers work that we put to the grindstone on a daily basis. At the same time, you don&#8217;t need to be a LeetCode savant or a DSA diva to gasp at a very basic level some of these ideas and put them to good use. Its all well and good if something wants to spend a few weeks and months becoming familiar with the inner workings of threads in Rust so they can look down their long noses from their high tower on the rest of us mortals. <mark data-color="#f6b26b" style="background-color: rgb(246, 178, 107); color: rgb(0, 0, 0);">Have fun up there by yourself.</mark></p><p>The rest of us will simply just break out some <a href="iframe.php?url=https%3A%2F%2Fdocs.rs%2Fpariter%2Flatest%2Fpariter%2F">pariter crate</a> , or whatever it is for you and your language, and cut the runtime in half for some piece of software that reduces compute usage and cost over the long term; driving real world impact and cost reduction without building something at Google scale or with Google complexity. If you want to do those things, then by all means, don&#8217;t let me stop you.</p><div class="callout-block" data-callout="true"><p>For me, I&#8217;m just afraid in this agentic age, (<em>of which I&#8217;m happily a member</em>) that slowly but surely we will offload the thinking part of our brain, the fun part, the part that did things that were even unnecessary like using concurrency to process CSV files. Sure, maybe it is pointless, from a compute perspective, but maybe it isn&#8217;t pointless from a problem solving and creative perspective. Little decisions add up to be a big deal over long periods of time in a large and production codebase.</p></div><p>What say you, friend?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/back-to-the-basics-threads/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fback-to-the-basics-threads%2Fcomments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Big Tech Laid Him Off. He Realized He Didn’t Need a Job. — Asian Dad Energy]]></title><description><![CDATA[Data Engineering Central Podcast]]></description><link>https://dataengineeringcentral.substack.com/p/big-tech-laid-him-off-he-realized</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/big-tech-laid-him-off-he-realized</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Wed, 09 Sep 2026 14:07:55 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fapi.substack.com%2Ffeed%2Fpodcast%2F213211633%2F99176125fd20aec5b149e37f4e2b8b3c.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>What happens when you spend decades building a successful career in tech, finally reach Big Tech, and then suddenly get laid off?</p><blockquote><p>In this episode of the <strong>Data Engineering Central Podcast</strong>, I sit down with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;AsianDadEnergy&quot;,&quot;id&quot;:444476184,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54f015ac-1ad6-4460-8972-f3f28f75fd30_600x600.jpeg&quot;,&quot;uuid&quot;:&quot;23ced2af-a3d0-451b-94cb-67fd70a95167&quot;}" data-component-name="MentionToDOM"></span> to talk about his journey from writing BASIC on an IBM 386 and working with COBOL mainframes to consulting, becoming a chief architect in Big Tech, and eventually losing his job after seven years.</p></blockquote><div class="embedded-publication-wrap" data-attrs="{&quot;id&quot;:7828661,&quot;embedding_publication_id&quot;:1224799,&quot;name&quot;:&quot;AsianDadEnergy's Newsletter&quot;,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!UxIL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef707d59-9b0a-42f2-8304-da447f071e90_600x600.png&quot;,&quot;base_url&quot;:&quot;https://asiandadenergy.substack.com&quot;,&quot;hero_text&quot;:&quot;This is a very public journal of anxiety, existential dread, and way too much tech knowledge.  Basically therapy, but with Wi-Fi.&quot;,&quot;author_name&quot;:&quot;AsianDadEnergy&quot;,&quot;show_subscribe&quot;:true,&quot;logo_bg_color&quot;:&quot;#ffffff&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPublicationToDOMWithSubscribe"><div class="embedded-publication show-subscribe"><a class="embedded-publication-link-part" native="true" href="iframe.php?url=https%3A%2F%2Fasiandadenergy.substack.com%3Futm_source%3Dsubstack%26amp%3Butm_campaign%3Dpublication_embed%26amp%3Butm_medium%3Dweb%26amp%3Bembedding_publication_id%3D1224799"><img class="embedded-publication-logo" src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21UxIL%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fef707d59-9b0a-42f2-8304-da447f071e90_600x600.png" width="56" height="56" style="background-color: rgb(255, 255, 255);"><span class="embedded-publication-name">AsianDadEnergy's Newsletter</span><div class="embedded-publication-hero-text">This is a very public journal of anxiety, existential dread, and way too much tech knowledge.  Basically therapy, but with Wi-Fi.</div></a><form class="embedded-publication-subscribe" method="GET" action="iframe.php?url=https%3A%2F%2Fasiandadenergy.substack.com%2Fsubscribe%3Fembedding_publication_id%3D1224799"><input type="hidden" name="source" value="publication-embed"><input type="hidden" name="autoSubmit" value="true"><input type="email" class="email-input" name="email" placeholder="Type your email..."><input type="submit" class="button primary" value="Subscribe"></form></div></div><p>But the layoff wasn&#8217;t the end of the story.</p><div class="callout-block" data-callout="true"><p>Years earlier, the 2008 financial crisis convinced him and his wife to live below their means, eliminate debt, save aggressively, and invest. By the time his Big Tech layoff arrived, those investments had grown enough to cover their living expenses&#8212;and he eventually realized he didn&#8217;t actually need to find another job.</p></div><p>We also get into <strong>AI and the future of software engineering</strong>, why junior engineers may be particularly vulnerable, whether AI is taking away some of the struggle that traditionally made programmers better, and why communication and other human skills are becoming survival skills for engineers&#8212;not just skills you need to get promoted.</p><p>Finally, we talk about separating your identity from your job, building multiple streams of income, creating content on YouTube and Substack, and why there is a lot more to life than what happens in front of a computer screen.</p><p><a href="iframe.php?url=https%3A%2F%2Fwww.youtube.com%2F%40AsianDadEnergy">https://www.youtube.com/@AsianDadEnergy</a></p><blockquote><p><strong>Big Tech. AI. Layoffs. Financial independence. Content creation. And figuring out what actually matters when the career you&#8217;ve spent decades building suddenly disappears.</strong></p></blockquote><p>I think this one will resonate with a lot of people working in tech right now.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/big-tech-laid-him-off-he-realized?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/big-tech-laid-him-off-he-realized?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fbig-tech-laid-him-off-he-realized%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Back to the Basics. Recursion.]]></title><description><![CDATA[staying grounded in an agentic world]]></description><link>https://dataengineeringcentral.substack.com/p/back-to-the-basics-recursion</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/back-to-the-basics-recursion</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 07 Sep 2026 13:09:13 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21_LXu%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21_LXu%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_LXu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!_LXu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!_LXu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!_LXu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21_LXu%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1960630,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/213167552?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_LXu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!_LXu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!_LXu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!_LXu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e80635e-dd76-4d7b-a304-90171a78e51a_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Some years ago, feels like a lifetime, I did a short 4-part series on <strong>DSA For The Rest Of Us. </strong>It was meant to be a fun little excursion to explore some common DSA concepts, except it was written for the average engineer who doesn&#8217;t want to work at FAANG/MAANG or send rockets to the moon. We just want to be reasonably good at our jobs and to do our due diligence in applying fundamental concepts to real-life problems. Maybe we don&#8217;t want to crack the coding interview.</p><p>If you're bored, here are those articles.</p><ul><li><p><a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdsa-for-the-rest-of-us-part-1%3Futm_source%3Dpublication-search"><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);">Introduction to Linked Lists.</mark></a></p></li><li><p><a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdsa-for-the-rest-of-us-part-2%3Futm_source%3Dpublication-search"><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);">Introduction to Binary Search.</mark></a></p></li><li><p><a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdsa-for-the-rest-of-us-part-3%3Futm_source%3Dpublication-search"><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);">Introduction to QuickSort.</mark></a></p></li><li><p><a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdsa-for-the-rest-of-us-part-4%3Futm_source%3Dpublication-search"><mark data-color="#cfe2f3" style="background-color: rgb(207, 226, 243); color: rgb(0, 0, 0);">Introduction to Graphs and Breadth-First Search</mark></a></p></li></ul><p>Anywho, since we are all being dumbified by our constant use of AI and will continue to do so for the foreseeable future, I thought it might be fun to return to a few data-specific fundamental concepts and, again, try to apply them in a real-world setting, just as a reminder to Lord Claudius that we humans can indeed rage against the machine when required. Who cares if we are relegated to the digital dungeons for being old curmudgeons who simply like to write code, challenge our minds and fingers, and just do a thing ourselves? I, for one, have zero intention of letting my pea-brain turn into mush while the token factories churn out bits and bytes meant to sweep me away.</p><div><hr></div><h2>Recursion. My old friend. Even in SQL.</h2><p>Many moons ago when my back didn&#8217;t hurt and children were not taking all my money; that means when I was young, free, and without a care in the world &#8230; I was working in the world of <a href="iframe.php?url=https%3A%2F%2Fwww.confessionsofadataguy.com%2Ft-sql-basics-running-totals%2F">SQL Server</a>, Mainframes, and Microsoft Access. Then one day an interesting problem popped its ugly head up from the well-trodden, 30-year-old-stained corporate carpet underneath those bug-stained fluorescent lights shining on the heads of an endless cubicle farm of angry middle-aged underlings fighting their way towards 2 weeks of vacation a year. It was called <a href="iframe.php?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBill_of_materials"><mark data-color="#d9ead3" style="background-color: rgb(217, 234, 211); color: rgb(0, 0, 0);">Bill-of-Materials</mark></a><mark data-color="#d9ead3" style="background-color: rgb(217, 234, 211); color: rgb(0, 0, 0);">.</mark></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBill_of_materials" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8KQC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png 424w, https://substackcdn.com/image/fetch/$s_!8KQC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png 848w, https://substackcdn.com/image/fetch/$s_!8KQC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png 1272w, https://substackcdn.com/image/fetch/$s_!8KQC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%218KQC%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png" width="1456" height="431" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:431,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:319807,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://en.wikipedia.org/wiki/Bill_of_materials&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/213167552?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8KQC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png 424w, https://substackcdn.com/image/fetch/$s_!8KQC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png 848w, https://substackcdn.com/image/fetch/$s_!8KQC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png 1272w, https://substackcdn.com/image/fetch/$s_!8KQC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe9cfad3-e59e-42b7-b429-abe012c011ff_1924x570.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p><em>It&#8217;s a well-known and old problem common to manufacturing environments. </em></p></blockquote><p>Usually, depending on the application, data location, and logic, it requires <a href="iframe.php?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FRecursion_%28computer_science%29">some sort of recursion</a> to effectively produce a result. Think about it. You, in your hand or pocket, have the One Ring of Power &#8230; I mean, a smartphone &#8230; it&#8217;s made up of many different components. You could imagine each one of those parts had a part number that, if someone asked you for the part numbers that make up the case/shell, it could be some sort of multi-level flow. Part numbers are used in different spots, each with its own list of part numbers that make it up.</p><p>Theoretically we don&#8217;t know when we start to do some BOM work, when we will hit the end. Each part number could be made up of other part numbers, which could be made up of other partnumbers. I&#8217;ve used recursion in this exact situation myself to solve BOM problems in SQL.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21etzt%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!etzt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp 424w, https://substackcdn.com/image/fetch/$s_!etzt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp 848w, https://substackcdn.com/image/fetch/$s_!etzt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp 1272w, https://substackcdn.com/image/fetch/$s_!etzt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21etzt%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43050,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/213167552?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!etzt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp 424w, https://substackcdn.com/image/fetch/$s_!etzt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp 848w, https://substackcdn.com/image/fetch/$s_!etzt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp 1272w, https://substackcdn.com/image/fetch/$s_!etzt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a02ef1-77c9-4be9-9e60-db8dbd1d3d7c_1456x971.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>What is recursion?</h3><p>Recursion is an interesting concept/solution to apply to various data and software problems. If you want the fancy and educational version, you probably wouldn&#8217;t be reading this Substack. I an&#8217;t fancy. Either way, I&#8217;m going to give you my take on recursion based on the various ways I&#8217;ve used it over the decades, in both SQL and code. Yes, in SQL, strange I know. So recursion. Let&#8217;s pull a definition from that once famous but now long forgotten victim of AI website &#8230; <a href="iframe.php?url=https%3A%2F%2Fwww.geeksforgeeks.org%2Fdsa%2Fintroduction-to-recursion-2%2F">geeksforgeeks.org</a>.</p><div class="callout-block" data-callout="true"><p><span>The process in which a function calls itself directly or indirectly is called recursion and the corresponding function is called a recursive function.</span></p><ul><li><p><mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);"><span>A recursive algorithm takes one step toward solution and then recursively call itself to further move. The algorithm stops once we reach the solution.</span></mark></p></li></ul><p>&#8212; <a href="iframe.php?url=https%3A%2F%2Fwww.geeksforgeeks.org%2Fdsa%2Fintroduction-to-recursion-2%2F">Geeks for Geeks</a></p></div><p>Think about your favorite scifi movie or TV show, you know how everyone is always afraid of getting stuck in some infinite loop or warp that cannot be escaped. You know the classic scene, you open a door to a room, go through the door on the other side, and end up back at the first door. That&#8217;s what recursion in, and it can be dangerous if handled incorrectly.</p><blockquote><p>For example, go ahead and run this in your Python interpreter. </p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;86a30297-41a6-4d48-b062-8e89c0e684eb&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">def add(n):
    return n + add(n + 1)

add(1)</code></pre></div><p>What do you notice interesting about the <code>add</code> function above? The fact that it calls itself in the return statement. Strange uh? Strange but useful. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21fva4%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fva4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png 424w, https://substackcdn.com/image/fetch/$s_!fva4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png 848w, https://substackcdn.com/image/fetch/$s_!fva4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png 1272w, https://substackcdn.com/image/fetch/$s_!fva4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21fva4%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png" width="1284" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:1284,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95564,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/213167552?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fva4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png 424w, https://substackcdn.com/image/fetch/$s_!fva4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png 848w, https://substackcdn.com/image/fetch/$s_!fva4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png 1272w, https://substackcdn.com/image/fetch/$s_!fva4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13befb64-6f56-4a3d-b533-28ee254c1651_1284x540.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>
      <p>
          <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fback-to-the-basics-recursion">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Spark Isn't Going Anywhere. So They Rebuilt It in Rust. — Shehab Amin, CEO of LakeSail]]></title><description><![CDATA[Data Engineering Central Podcast.]]></description><link>https://dataengineeringcentral.substack.com/p/spark-isnt-going-anywhere-so-they</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/spark-isnt-going-anywhere-so-they</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Wed, 02 Sep 2026 12:22:23 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fapi.substack.com%2Ffeed%2Fpodcast%2F212889432%2Fc87ebe4bc6af7cffaf61db61971fbe6b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this episode, I sit down with <strong><a href="iframe.php?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fshehabamin%2F">Shehab Amin</a>, co-founder and CEO of <a href="iframe.php?url=https%3A%2F%2Flakesail.com%2F">LakeSail</a></strong>, to talk about what happens when you decide to rebuild one of data engineering&#8217;s most important technologies, Apache Spark, in Rust &#8230; sorta.</p><p>We dig into Shehab&#8217;s journey from writing C++ as a kid to studying computer science at Berkeley, becoming a founder, and eventually building Sail. We talk about why Spark has remained so sticky, what Rust, Apache Arrow, and DataFusion are changing about data infrastructure, and why rebuilding Spark compatibility turned out to be much harder&#8212;and more interesting&#8212;than expected.</p><div class="callout-block" data-callout="true"><p>We also get into the increasingly complicated modern data stack: Delta Lake vs. Iceberg, catalogs, streaming vs. batch, agentic coding, and what happens when AI agents start interacting directly with data and compute.</p></div><p>Most importantly, we explore LakeSail&#8217;s bigger idea: <strong>what if the data pipelines companies already have could become the foundation for their AI pipelines?</strong></p><p>A wide-ranging conversation about Spark, Rust, AI, and where data engineering goes from here.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/spark-isnt-going-anywhere-so-they?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/spark-isnt-going-anywhere-so-they?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fspark-isnt-going-anywhere-so-they%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Omnigent. Too afraid to ask what a meta-harness for Agents is?]]></title><description><![CDATA[I got you boo]]></description><link>https://dataengineeringcentral.substack.com/p/omnigent-too-afraid-to-ask-what-a</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/omnigent-too-afraid-to-ask-what-a</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 31 Aug 2026 12:04:20 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21yD_N%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21yD_N%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yD_N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!yD_N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!yD_N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!yD_N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21yD_N%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2129659,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yD_N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!yD_N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!yD_N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!yD_N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf36f430-c6e8-4fe5-b6da-812c7cef8424_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Open wide. Time to take your medicine; your AI medicine, that is. Remember that pink goop your mother used to shovel down your throat; you millennials know what I&#8217;m talking about, who could forget that taste of rubber. Blah. Hopefully this experience will be a little better for you, and me.</p><p>I&#8217;m trying not to be a glutton for punishment; the pace at which new tools, features, products, models, agents, sparkle-glitter-sunshine SaaS thingy-ma-bobs are lobbed over the fence at us is quite overwhelming. I breathe the same air as you, surf the same LinkedIn and Substack feeds as you, get the same FOMO as you when I see someone I respect using a new thingy-ma-bob that I&#8217;m not. What am I missing? Can I keep up? <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Flakesail-replacing-spark-with-rust">I&#8217;m giving it my best shot</a>, week in and week out.</p><blockquote><p>Well, now that I&#8217;ve moaned, lamented, and hopefully made that striking connection with you over the invisible tunnel of bits and bytes that separates us, again, I must put my poor calloused hands to the plow and throw myself into the deep end. But not just any deep end, mind you, the <mark data-color="#ff00ff" style="background-color: rgb(255, 0, 255); color: rgb(255, 255, 255);">Agentic Meta Harness</mark> deep end. Yikes. I feel like I&#8217;m in <a href="iframe.php?url=https%3A%2F%2Fyoutu.be%2Fcw_VaICB2_Q%3Fsi%3DAcfX4scpV-_FlSFR">Blade Runner 2049</a>; I&#8217;m not sure if I&#8217;m even human anymore.</p></blockquote><p>So. Meta-harness for agents, namely <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2F">Omnigent</a>.</p><div class="callout-block" data-callout="true"><p><em><strong><span>Thanks to </span><a href="iframe.php?url=http%3A%2F%2Fwww.delta.io%2F">Delta</a><span> for sponsoring this newsletter! I use Delta Lake daily, and I believe it represents the future of Data Engineering. Content like this would not be possible without their support. Check out </span><a href="iframe.php?url=http%3A%2F%2Fwww.delta.io%2F">their website</a><span> below.</span></strong></em></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HSdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 424w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 848w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1272w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21HSdP%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp" width="600" height="123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:123,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4188,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HSdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 424w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 848w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1272w, https://substackcdn.com/image/fetch/$s_!HSdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb49023aa-1727-4958-9c50-52b4c2f1b7a3_600x123.webp 1456w" sizes="100vw"></picture><div></div></div></div></figure></div></div><div><hr></div><h1>We need to talk about Coding Agents.</h1><p>So &#8230; what you on? What do you use? What&#8217;s your poison? Have you tried this? Yeah, I&#8217;m kinda burnt out on it all too. I don&#8217;t want to have a <a href="iframe.php?url=https%3A%2F%2Fsteve-yegge.medium.com%2Fwelcome-to-gas-town-4f25ee16dd04">Gas Town</a>, I don&#8217;t want to be a <a href="iframe.php?url=https%3A%2F%2Fwww.reddit.com%2Fr%2FAnthropic%2Fcomments%2F1uacade%2Fbro_is_loop_engineering_where_you_trust_agents_to%2F">loop bro</a>. At some point, you just have to pick, like, your IDE of old, and leave the rest to argue their way into oblivion. Me? I like my good ol&#8217; trusty <a href="iframe.php?url=https%3A%2F%2Fwww.vim.org%2F">vim</a>, or if I&#8217;m feeling spicy, <a href="iframe.php?url=https%3A%2F%2Fneovim.io%2F">neovim</a>. Now we&#8217;ve moved on to coding agents.</p><p>Codex, Claude Code, Cursor, the list goes on forever. Not only that, we have to keep up with /skills, MD files, plugins, MCP Servers, and all the rest. It&#8217;s a mess, a literal spaghetti of tools, instructions, and skills, all plugged into various and numerous tools. We want different things at different times; we want these repos to be treated one way with a certain set up rules, this other stuff over here we want it done a certain way, maybe we're doing some high-level project planning where we have a flow, could be this stuff over in the corner needs heavy control for running bash commands.</p><p><mark data-color="#ffe599" style="background-color: rgb(255, 229, 153); color: rgb(0, 0, 0);">Like I said, a mess.</mark></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%215Di_%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Di_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png 424w, https://substackcdn.com/image/fetch/$s_!5Di_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png 848w, https://substackcdn.com/image/fetch/$s_!5Di_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png 1272w, https://substackcdn.com/image/fetch/$s_!5Di_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%215Di_%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png" width="612" height="505" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0b3c433-148a-4761-a452-51cc061905ae_612x505.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:505,&quot;width&quot;:612,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56126,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5Di_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png 424w, https://substackcdn.com/image/fetch/$s_!5Di_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png 848w, https://substackcdn.com/image/fetch/$s_!5Di_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png 1272w, https://substackcdn.com/image/fetch/$s_!5Di_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0b3c433-148a-4761-a452-51cc061905ae_612x505.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If we are honest with each other, we are standing on shifting ground; tools are coming and going; we are unsettled and find useful a various assembly of different plugins, skills, MD files, whatever. We have our own little &#8220;<em><mark data-color="#fff2cc" style="background-color: rgb(255, 242, 204); color: rgb(0, 0, 0);">agentic workflows</mark></em>,&#8221; if I may call them that. I prompt this model a certain way; that one differently; I treat one codebase a specific way, and use a different one another based on past technical debt or just its nature.</p><blockquote><p>This is what <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2F">Omnigent</a> solves.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i-1Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png 424w, https://substackcdn.com/image/fetch/$s_!i-1Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png 848w, https://substackcdn.com/image/fetch/$s_!i-1Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png 1272w, https://substackcdn.com/image/fetch/$s_!i-1Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21i-1Q%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png" width="604" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:604,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51143,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://omnigent.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i-1Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png 424w, https://substackcdn.com/image/fetch/$s_!i-1Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png 848w, https://substackcdn.com/image/fetch/$s_!i-1Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png 1272w, https://substackcdn.com/image/fetch/$s_!i-1Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba06f734-2ebe-437e-bc19-97327aef6d3d_604x360.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s as easy as &#8230;</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">curl -fsSL https://omnigent.ai/install.sh | sh</code></pre></div><p>Wala, with this simple command, you have installed your first meta-harness, a piece of software that can sit above your various LLM models, workflows, MD files, prompts, &#8230; whatever it is you are using. It&#8217;s like the <a href="iframe.php?url=https%3A%2F%2Flotr.fandom.com%2Fwiki%2FOne_Ring">One Ring of Power</a>, <mark data-color="#f4cccc" style="background-color: rgb(244, 204, 204); color: rgb(0, 0, 0);">in the darkenss of your terminal </mark><a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2F"><mark data-color="#f4cccc" style="background-color: rgb(244, 204, 204); color: rgb(0, 0, 0);">Omnigent</mark></a><mark data-color="#f4cccc" style="background-color: rgb(244, 204, 204); color: rgb(0, 0, 0);"> will bind them.<br></mark></p><p>What&#8217;s the TDLR of a meta-harness like Omnigent?</p><div class="callout-block" data-callout="true"><ul><li><p>a single common layer/interface</p></li><li><p>move easily between models/tools/interfaces</p></li><li><p>write policies and sandboxes to have fine-grained control</p></li><li><p>Web UI provided</p></li><li><p>Access sessions from places like your phone</p></li><li><p>built-in multi-AI agents</p></li></ul></div><p>Of course, I&#8217;m only scratching the surface of what a meta-harness like Omnigent can do, but you or I want to get lost in the weeds and get distracted. Rather, let&#8217;s just install and play around with the major Omnigent features to get a sense of what we are dealing with, and maybe it will give you ideas on how such a meta-harness can fit into your workflow and development lifecycle. The truth of the matter is that, yes, many tools can do complicated and space-age things within the agentic coding space, <mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">but it&#8217;s the simple things that provide end users real benefits and features that win the day.</mark></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%2147k3%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!47k3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png 424w, https://substackcdn.com/image/fetch/$s_!47k3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png 848w, https://substackcdn.com/image/fetch/$s_!47k3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png 1272w, https://substackcdn.com/image/fetch/$s_!47k3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%2147k3%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png" width="841" height="494" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:494,&quot;width&quot;:841,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:80330,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!47k3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png 424w, https://substackcdn.com/image/fetch/$s_!47k3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png 848w, https://substackcdn.com/image/fetch/$s_!47k3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png 1272w, https://substackcdn.com/image/fetch/$s_!47k3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc11f67d-34ba-4f66-aa95-832f20fc1cec_841x494.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/omnigent-too-afraid-to-ask-what-a?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/omnigent-too-afraid-to-ask-what-a?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fomnigent-too-afraid-to-ask-what-a%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h2>Ok, so what? Show me the money.</h2><p>Yeah, yeah, yeah, so enough yip-yapping; let&#8217;s get into Omnigent, get it set up, piddle and poke around, and see what we can find under the rug. Personally, I am actually excited to get this meta-harness running and see how it can ease my agentic development process. Some of the features that are top of mind for me and seem very useful are &#8230;</p><ul><li><p><em>single interface for multiple models and harnesses</em></p></li><li><p><em>rules and policies I can apply to specific use cases</em></p></li><li><p><em>multi-agent workflow for high-level systems planning, research, and design.</em></p></li></ul><p>That&#8217;s probably just because of the nature of the work I end up doing. Big, high-level project planning that includes extensive systems architecture and design. It&#8217;s really important to me that the planning and research phase goes well before a particular direction is chosen. Also, on a more practical note, I have particular codebases that I deal with differently, in very specific ways. Being able to set up policies to deal with this would be very helpful.</p><blockquote><p>Blah. Ok, so you say the install.</p></blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;c4effac3-b801-4ba3-b5ca-297d067258a0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">&gt;&gt; curl -fsSL https://omnigent.ai/install.sh | sh</code></pre></div><p>So what happens next? Well, we need to set up our existing tooling(s) and harnesses, like Claude or whatever, to Omnigent; this should be the first step.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">&gt;&gt; omnigent setup</code></pre></div><p>After running this command you should be prompted to setup and connect any models and harnesses you already are using. In my case I connected both Claude Code and CoPilot up to Omnigent. The setup usually can pickup automtically and detect any tools you are already using. As you can see below, it found my Claude Code setup, sensed my CoPilot setup but I also had to get a token for CoPilot for Omnigent to use. Either way, not rocket science, just connect your existing tooling. I also use OpenCode but did not connect it.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;089950f1-cbda-49a1-ad61-8f28be69650b&quot;,&quot;duration&quot;:null}"></div><p>At this point you couse run Omnigent ontop of a single harness, and get all the features we talked about previously. The UI, policies, session sharing, mobile access, etc. For example, I can run &#8230; (<em>note: must have tmux installed</em>)</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">omnigent claude</code></pre></div><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;998ed335-45ae-4510-8a24-3f01ef2bcb46&quot;,&quot;duration&quot;:null}"></div><p>Of course, as you can see in the bottom of that screen, we get a local host WebUI on port 6767 that has the session we just started in the terminal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21b8uo%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b8uo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png 424w, https://substackcdn.com/image/fetch/$s_!b8uo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png 848w, https://substackcdn.com/image/fetch/$s_!b8uo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png 1272w, https://substackcdn.com/image/fetch/$s_!b8uo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21b8uo%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png" width="1456" height="674" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:674,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:402427,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!b8uo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png 424w, https://substackcdn.com/image/fetch/$s_!b8uo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png 848w, https://substackcdn.com/image/fetch/$s_!b8uo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png 1272w, https://substackcdn.com/image/fetch/$s_!b8uo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb4d0cad-5049-441f-8498-e3e32a9e563d_2576x1192.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So what, we have meta-harness sitting ontop of our typical Agent Harnesse(s), now what? Well, of course this UI gives us the ability to do things with our conversations as if we were say using Cursor or any other UI. You can watch what&#8217;s happening in a session, make a comment on some of the work that&#8217;s happening, upload files, edit files directly yourself. <mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">It&#8217;s kinda like having a IDE for your Agents.</mark> We could go on forever exploring the features Omnigent has. One of the more interesting and powerful features is <mark data-color="#f9cb9c" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">Policies</mark>.</p><div class="callout-block" data-callout="true"><div class="pullquote"><p>&#8220;Omnigent ships with policies for common guardrails, organized into two categories: <strong>Safety</strong> and <strong>Cost Control</strong>. Your Omnigent can apply any of these by name when you <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fdocs%2Fpolicies%2Foverview%23adding-a-policy">ask it to add a policy</a>, or you can reference them in YAML by their full path in the <code>handler</code> field.&#8221; <br>- <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fdocs%2Fpolicies%2Fbuiltin">omni-docs</a></p></div></div><p>We can add our own policies, or enable the many pre-built policies that ships with Omnigent that are centered around Cost and Safety. For example, let&#8217;s add a custom policy through just the Web UI Chat interface that we want our Agents to ask for permission before making git commits and pushing changes up to remote repos. Also, we will have it ask for permission before running bash commands.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;d40b24eb-93e5-47d7-b092-8019366eaf0e&quot;,&quot;duration&quot;:null}"></div><p>Apparently these are only session scoped policies, and I need to be more specific. Either way, after asking it to commit and push the git changes it made to the repo (updated the README). It did ask for permissions to run the <code>bash</code> and to run the <code>git</code> commands.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;1c064606-2bcd-477b-bbd1-168131446227&quot;,&quot;duration&quot;:null}"></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21_NRK%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_NRK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png 424w, https://substackcdn.com/image/fetch/$s_!_NRK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png 848w, https://substackcdn.com/image/fetch/$s_!_NRK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png 1272w, https://substackcdn.com/image/fetch/$s_!_NRK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21_NRK%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png" width="597" height="421" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:421,&quot;width&quot;:597,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86325,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_NRK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png 424w, https://substackcdn.com/image/fetch/$s_!_NRK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png 848w, https://substackcdn.com/image/fetch/$s_!_NRK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png 1272w, https://substackcdn.com/image/fetch/$s_!_NRK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa588b901-17d2-4e54-a8a0-16f9ba530f9c_597x421.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Of course we would probably want to make policies that run over many sessions and the sky is the limit as to what kind of policies and limits we could put in place. <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fdocs%2Fpolicies%2Fbuiltin">There is a massive list here of built-in policies</a>. A very nice feature indeed when you are working across many different code bases, work on teams where budgets and token costs are a thing, where you are worried about Agents doing unintended things to filesystems and production environments. You could easily build a number of policies to watch out for errant <code>aws cli</code> commands that are dangerous, or maybe even an Agent trying to update some <code>terraform</code> file and sync it.</p><div class="callout-block" data-callout="true"><p>What I like about Omnigent is the ease with which you can add custom controls so every single thing an Agent could possibly do. Even the best of us make mistakes, this goes a long ways towards adding controls around important steps.</p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Engineering Central is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Polly: the omnigent multi-agent super power.</h2><p>Probably the one feature I am most excited about is <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fquickstart%2Fpolly">Polly</a>. Again, this probably has alot to do with my day to day work of planning technical projects from idea to implementation. This involves lots of research, trial and error, exploring different avenues, reviewing materials, and generally this a lot of back-and-forth between some Agent and myself. Don&#8217;t worry, I still spend time just reading raw documentation for myself, there is no replacement for understanding deeply different technologies and features.</p><blockquote><p>&#8220;<em><mark data-color="#d0e0e3" style="background-color: rgb(208, 224, 227); color: rgb(0, 0, 0);">Polly is a multi-agent coding orchestrator. It breaks your task into sub-tasks and delegates each one to a different AI agent, with cross-vendor code review built in. This tutorial shows you how it looks in practice.</mark></em>&#8221; - <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fquickstart%2Fpolly">omni docs</a></p></blockquote><p>I&#8217;m excited about this feature because when using some specific Agent to explore a topic, I generally do a ton of different back and forths, exploring every angle I can. Some of that work could defiently be saves when the meta-harness can do that for me. Personally, I&#8217;ve found that simply one-shot prompting is the worse approach to solving any problems, most models might do Ok, but depending on the subject they might do quite bad. <strong>I would expect this multi-agent <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fquickstart%2Fpolly">Polly</a> routing to impove results a lot.</strong></p><p>It&#8217;s as easy as &#8230;</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">omnigent polly</code></pre></div><p>This is what I asked Polly.</p><div class="callout-block" data-callout="true"><p>&#187; <mark data-color="#f9cb9c" style="background-color: rgb(249, 203, 156); color: rgb(0, 0, 0);">can you use opencode with copilot and claude code to make a plan for creating a Rust based Python library (use 03) that wraps datafusion and apache arrow, we want to be able to write SQL overtop CSV files and then ship them to s3 stored Delta Lake</mark></p></div><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;b65f55ee-77c7-4123-80db-e669da039370&quot;,&quot;duration&quot;:null}"></div><p>In the WebUI for Omnigent I can click on Agents and see multiple Agents running, solving this problem. Pretty easy and for many situtations this gives me peace of mind that multi-agents will do a reasonable job out of the box planning or solving the problem I want to explore.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21KMmn%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KMmn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png 424w, https://substackcdn.com/image/fetch/$s_!KMmn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png 848w, https://substackcdn.com/image/fetch/$s_!KMmn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png 1272w, https://substackcdn.com/image/fetch/$s_!KMmn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21KMmn%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png" width="1282" height="772" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:772,&quot;width&quot;:1282,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:263166,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KMmn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png 424w, https://substackcdn.com/image/fetch/$s_!KMmn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png 848w, https://substackcdn.com/image/fetch/$s_!KMmn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png 1272w, https://substackcdn.com/image/fetch/$s_!KMmn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42607e7e-31a0-4fa2-abf7-b6e6796d235b_1282x772.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It worked of course, no surpise there.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21WX7g%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WX7g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png 424w, https://substackcdn.com/image/fetch/$s_!WX7g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png 848w, https://substackcdn.com/image/fetch/$s_!WX7g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png 1272w, https://substackcdn.com/image/fetch/$s_!WX7g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21WX7g%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png" width="592" height="558" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:558,&quot;width&quot;:592,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98250,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WX7g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png 424w, https://substackcdn.com/image/fetch/$s_!WX7g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png 848w, https://substackcdn.com/image/fetch/$s_!WX7g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png 1272w, https://substackcdn.com/image/fetch/$s_!WX7g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c7a5a1c-49d5-4483-ac25-babc6678b3ff_592x558.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Again, I think that the multi-agents for planning and researching is a underutililzed and easy to adopt superpower for most devs. You know me, I&#8217;m a fan of learning and exploring yourself, but this sort of multi-agent Polly workflow with Omnigent can help with systems design, architecture, and generally large scale planning that is important you want to cover all bases.</p><div><hr></div><h2>The scary part.</h2><p>Well, maybe scary isn&#8217;t that right word I&#8217;m looking for, I&#8217;m not sure how I feel about this feature. What is sold as the ability to collborate from anywhere &#8230; aka your phone, well that can be good and bad. Good from a technology perspective, of course in theory we would want to be able to continue long running sets of tasks and work, collaborate with co-workers on high-stakes agentic work. Sure, I get it.</p><blockquote><p><em>But, we should be honest about the possible pitfalls of being able to run Agents from your phone. From your bed. The airport. The school line. On the couch. At your mom&#8217;s house. </em></p></blockquote><p>Handle such things with care, you don&#8217;t need to be productive 24/7, even if you want your agents to run 24/7, I have serious questions about the mental health of someone running agents from their phone at 8 pm at night. You need to touch grass, exercise, give your head and mind a break. I&#8217;ve learned from experience that burnout creeps up quickly and quietly, make good choices that are healthy for you and your body.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fquickstart%2Fcollaborate" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qfOU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png 424w, https://substackcdn.com/image/fetch/$s_!qfOU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png 848w, https://substackcdn.com/image/fetch/$s_!qfOU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png 1272w, https://substackcdn.com/image/fetch/$s_!qfOU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21qfOU%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png" width="1456" height="449" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:449,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211828,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://omnigent.ai/quickstart/collaborate&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qfOU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png 424w, https://substackcdn.com/image/fetch/$s_!qfOU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png 848w, https://substackcdn.com/image/fetch/$s_!qfOU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png 1272w, https://substackcdn.com/image/fetch/$s_!qfOU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F689d417b-fd24-4759-9b45-da20bce7895a_2188x674.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Anywho, because I love you all very dearly, I will go ahead and setup this feature for myself, Omnigent recommends using <a href="iframe.php?url=https%3A%2F%2Frailway.com%2F">railway</a>. You will need to setup a free account to do this. Just a few button clicks for the free account. Point Railway at the Omnigent GitHub repo, authorize via GitHub, and you&#8217;re off to the races while it deploys.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bdb8c91f-47c9-4a53-b818-885fc71778b1_2054x1074.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0998d8ca-e705-411c-b76a-1d10c8259352_2118x1530.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a607e76-31c9-4d96-9b88-94adfc28afd0_1804x1048.png&quot;}],&quot;caption&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e96a95a7-e326-4bfe-bf9b-25803d76bdb3_1456x474.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>Ya know, part of me is happy that the Railway deployment of omnigent failed on the first try. Does that mean I don&#8217;t have to do it?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21fOy9%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fOy9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png 424w, https://substackcdn.com/image/fetch/$s_!fOy9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png 848w, https://substackcdn.com/image/fetch/$s_!fOy9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png 1272w, https://substackcdn.com/image/fetch/$s_!fOy9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21fOy9%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png" width="1456" height="740" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:740,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:265849,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/211780697?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fOy9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png 424w, https://substackcdn.com/image/fetch/$s_!fOy9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png 848w, https://substackcdn.com/image/fetch/$s_!fOy9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png 1272w, https://substackcdn.com/image/fetch/$s_!fOy9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F149557b7-5293-4f23-a33d-9d3eb4a601b3_2562x1302.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Didn&#8217;t matter what I tried, Omnigent wouldn&#8217;t deploy; it always failed on the health checks. Which, honestly, is fine with me, I didn&#8217;t want to be suckered into coding from my phone. No good. Ok, maybe I can try a little harder, let&#8217;s look at the logs.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">RuntimeError: DATABASE_URL is required (env), or set `database_uri:` 
in the server config. Accepted forms: 'postgresql+psycopg://user:pw@host:5432/omnigent' 
(explicit psycopg3), or the 'postgres://' / 'postgresql://' URLs emitted by Railway,
 Render, etc.</code></pre></div><p><a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fquickstart%2Fcollaborate">Looks like there should be a DATABASE_URL as part of this deploy, the instructions never mentioned it</a>.  I tried adding the default localhost Postgres ENV Var and re-deployed; it didn&#8217;t work. That&#8217;s about as far I would mess with it; as I said, I don&#8217;t really want to run Agents from my phone.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/omnigent-too-afraid-to-ask-what-a?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fomnigent-too-afraid-to-ask-what-a%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p><div><hr></div><h2>Thoughts on meta-harness.</h2><p>Well, we learned a little something, maybe; I did anyways. I know we&#8217;ve barely scratched the surface of all the bells and whistles of Omnigent, but that&#8217;s ok. I learned it&#8217;s easy to use and install, easy to hook up my other coding harnesses too (Claude and CoPilot), and I do like the option of switching between the WebUI and Terminal depending on what kinda work I&#8217;m doing.</p><blockquote><p>The policies were probably my favorite part of Omnigent. When working on sensitive projects that require me to run <code>aws cli</code> commands, or mess around with <code>terraform</code>, policies are another great back-stop to keep tight control where that control is warrented. </p></blockquote><p>Second favorite, and a close one at that, is the <a href="iframe.php?url=https%3A%2F%2Fomnigent.ai%2Fdocs%2Fuse%2Fbuiltin-agents%2Fpolly">Polly feature of Omnigent.</a> It&#8217;s hard to state how important this feature can be for those of us who do a lot of research, planning, and systems design/architecture. I spend a lot of time ensuring I&#8217;m covering all bases, taking the right direction, and that things are in tip-top shape. Being able to have multiple agents allowing for &#8220;<mark data-color="#ff9900" style="background-color: rgb(255, 153, 0); color: rgb(0, 0, 0);">cross-vendor code review</mark>&#8221;, is next-level stuff.</p><p>The final piece of Omnigent that has become clearer to me with repeated use is the &#8230; cleanliness. </p><p>Anyways, this is one tool I&#8217;m looking forward to using on a daily basis, and getting to know it better will probably expose a lot of cool and unsung features that will improve my agentic workflows.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/omnigent-too-afraid-to-ask-what-a/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fomnigent-too-afraid-to-ask-what-a%2Fcomments"><span>Leave a comment</span></a></p><p>Want more? Checkout this video.</p><div id="youtube2-K99zQ3h0TK4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;K99zQ3h0TK4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="iframe.php?url=https%3A%2F%2Fwww.youtube-nocookie.com%2Fembed%2FK99zQ3h0TK4%3Frel%3D0%26amp%3Bautoplay%3D0%26amp%3Bshowinfo%3D0%26amp%3Benablejsapi%3D0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div>]]></content:encoded></item><item><title><![CDATA[The Polemic Against Cheap Code.]]></title><description><![CDATA[long live The Vibes]]></description><link>https://dataengineeringcentral.substack.com/p/the-polemic-against-cheap-code</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/the-polemic-against-cheap-code</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Mon, 24 Aug 2026 16:15:48 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21TS5d%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21TS5d%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TS5d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png 424w, https://substackcdn.com/image/fetch/$s_!TS5d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png 848w, https://substackcdn.com/image/fetch/$s_!TS5d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!TS5d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21TS5d%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2638236,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/212475715?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TS5d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png 424w, https://substackcdn.com/image/fetch/$s_!TS5d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png 848w, https://substackcdn.com/image/fetch/$s_!TS5d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!TS5d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecf116d-66fe-4bc9-b9ee-bb6e383ae629_1535x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The vibes are cheap; even if the per-token cost increases 10x or 100x, it doesn&#8217;t matter, the vibes are cheap; at least they are cheap from the viewpoint of those who hold the power. The power to hire and fire, to set technical direction, and to point a finger and send the peons running.</p>
      <p>
          <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fthe-polemic-against-cheap-code">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Lakesail. Replacing Spark with Rust. But with Spark.]]></title><description><![CDATA[ya know ... black magic stuff]]></description><link>https://dataengineeringcentral.substack.com/p/lakesail-replacing-spark-with-rust</link><guid isPermaLink="false">https://dataengineeringcentral.substack.com/p/lakesail-replacing-spark-with-rust</guid><dc:creator><![CDATA[Daniel Beach]]></dc:creator><pubDate>Tue, 18 Aug 2026 21:11:44 GMT</pubDate><enclosure url="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jLkJ%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jLkJ%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jLkJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!jLkJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!jLkJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!jLkJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jLkJ%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2383434,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jLkJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!jLkJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!jLkJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!jLkJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6e7380b-a8df-4eb0-a768-e4cc689abd16_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p><mark data-color="#e06666" style="background-color: rgb(224, 102, 102); color: rgb(0, 0, 0);">Reminder to my readers: </mark><br><mark data-color="#fff2cc" style="background-color: rgb(255, 242, 204); color: rgb(0, 0, 0);">I explore new tools from the viewpoint of the average engineer who works with data. I approach each subject and tool with as little bias as possible. The point is to just introduce new tools, and more importantly, new concepts to us all that we can use in the future to better understand the data landscape around us all and how we approach solving problems.</mark></p></div><p>I&#8217;ve been watching this story play on repeat for some time now; the death of tools like Spark and Kafka has been heralded from the treetops for a decade now, yet here we are &#8230; living in a Spark and Kafka world. Someone once told someone else that it is hard to kick against the goad. Indeed it is. I don&#8217;t see this as any sort of failure or shortcoming, though; it&#8217;s just part of the circle of life, and tech. It&#8217;s natural.</p><blockquote><p>Think about the wicked sharp edges that drove legions of SQL Server developers and DBAs insane and to an early grave over the last few decades. Yet, there are still plenty of SSIS packages humming happily away in the quiet corners of the world. </p></blockquote><p>The truth of the matter is, once a tool gets its tentacles latched onto the corporate minds of CTOs, architects, and the like &#8230; it&#8217;s there to stay for better or worse, for some time to come. Spark is like that. It&#8217;s the bread and butter of the data community at large, has been for a while, and will continue to be that &#8230; even as Polars, DuckDB, Daft, and the like &#8230; bite and nip at the heels. Truth be told, I hold a special little place in my cold and stony heart when it comes to Apache Spark. I grew up in data in a time when I remember ssh&#8217;ing into various nodes, installing Spark, the correct AWS S3 JARs, adding IP addresses to configs, updating the memory allocations. Basically terrible things.</p><ul><li><p><a href="iframe.php?url=https%3A%2F%2Fwww.confessionsofadataguy.com%2F">Go search through my old blog; you're sure to find some Spark goodies in there.</a></p></li></ul><p>Anywho, back to the matter at hand. <a href="iframe.php?url=https%3A%2F%2Flakesail.com%2F"><mark data-color="#a4c2f4" style="background-color: rgb(164, 194, 244); color: rgb(0, 0, 0);">Lakesail</mark></a>.This one has been on my list for some time, but you know how things go: busy, life, this, that, AI. But they are making enough waves now that I owe it to myself to do what I&#8217;ve been doing for a long time, namely, kick the tires and poke with a stick &#8230; see what crawls out of the dark corners. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Flakesail.com%2F" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kb8a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png 424w, https://substackcdn.com/image/fetch/$s_!kb8a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png 848w, https://substackcdn.com/image/fetch/$s_!kb8a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png 1272w, https://substackcdn.com/image/fetch/$s_!kb8a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png 1456w" sizes="100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21kb8a%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png" width="1456" height="598" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:598,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:309865,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://lakesail.com/&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kb8a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png 424w, https://substackcdn.com/image/fetch/$s_!kb8a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png 848w, https://substackcdn.com/image/fetch/$s_!kb8a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png 1272w, https://substackcdn.com/image/fetch/$s_!kb8a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55d892ba-7967-4a47-956d-cc865f1cb739_2006x824.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I mean, what is it? Well, the Lakesail homepage will give it to you right away, straight to the old eye, which is appreciated. People forever beating around the bush, making you figure out what the crap an Agentic Wizz-Bang-Popper is. <strong>What is Lakesail?</strong> <em>Spark, without the JVM tax. </em>You know what sounds even better to my old ringing ears? Spark rewritten in Rust. Like a fly to light me.</p><div class="pullquote"><p>&#8220;<mark data-color="#ff9900" style="background-color: rgb(255, 153, 0); color: rgb(0, 0, 0);">Most data platforms were built for the JVM era and are now retrofitting for AI. LakeSail rebuilt the runtime in Rust, kept the full Spark API, and shipped an agent layer from day one. Your code stays the same. The engine gets an upgrade.</mark>&#8221; <br><a href="iframe.php?url=https%3A%2F%2Flakesail.com%2F">- Lakesail</a></p></div><p>I know some of you unbelievers and luddites are sitting there rolling your eyes at the words &#8220;rewrite&#8221; and &#8220;Rust&#8221; in the same sentence &#8230; but there is a reason people are doing it, my friend; just as well give in to it and get on the ole&#8217; bandwagon. The ride is fine.</p><p>Of course, I already mentioned it, but the idea of going after Spark, because it&#8217;s &#8220;slow&#8221; and a &#8220;pain in the butt,&#8221; is nothing new. Some of the criticisms are true; some are not. It depends on the context. Most people don&#8217;t work with &#8220;big data,&#8221; aka under 10 TB of data or way less, so theoretically they don&#8217;t need Spark. They just use it because it&#8217;s there and everyone else is using it. Herd mentality.</p><p><a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2F650gb-of-data-delta-lake-on-s3-polars">I&#8217;ve made the mistake myself of trying to prove to people that you don&#8217;t need a big cluster to work on large data.</a> Be warned: when you start messing with people's golden calf, expect to be summarily burned at the stake; be ready to be a heretic. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2F650gb-of-data-delta-lake-on-s3-polarshttps%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2F650gb-of-data-delta-lake-on-s3-polars" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Scpf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png 424w, https://substackcdn.com/image/fetch/$s_!Scpf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png 848w, https://substackcdn.com/image/fetch/$s_!Scpf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png 1272w, https://substackcdn.com/image/fetch/$s_!Scpf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Scpf%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png" width="1456" height="598" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/139f5234-c91c-4203-a266-53bebb23d693_2006x824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:598,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:667935,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://dataengineeringcentral.substack.com/p/650gb-of-data-delta-lake-on-s3-polarshttps://dataengineeringcentral.substack.com/p/650gb-of-data-delta-lake-on-s3-polars&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Scpf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png 424w, https://substackcdn.com/image/fetch/$s_!Scpf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png 848w, https://substackcdn.com/image/fetch/$s_!Scpf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png 1272w, https://substackcdn.com/image/fetch/$s_!Scpf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F139f5234-c91c-4203-a266-53bebb23d693_2006x824.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One can see the major difference between someone saying DuckDB or Polars can replace Spark, which they can, and someone saying that isn&#8217;t the whole story. We don&#8217;t live and work on data projects in a vacuum. <span>It takes a serious amount of commitment for any Staff Engineer or CTO to look at a group of drooling and keyboard-happy engineers and say, &#8220;</span><em><mark data-color="#ffe599" style="background-color: rgb(255, 229, 153); color: rgb(0, 0, 0);"><span>Yes, that&#8217;s a great idea; go ahead and rewrite our entire stack and legacy data pipeline(s) into DuckDB/Polars/Daft.</span></mark></em><span>&#8221;</span> That isn&#8217;t the real world. In the real world, we have all sorts of deadlines, product launches, tech debt, and general mayhem. Sure, we of course WANT to do those projects, but we don't often get the chance.</p><p>Back to Lakesail. This is the impressive part, if it turns out to be true, and believe me, I&#8217;m going to try it out, hook, line, and sinker. This is the difference maker. Just swap out the engine, leave the code as is. </p><blockquote><p>&#8220;<em><strong>Spark Connect protocol means your existing PySpark, Spark SQL, Delta Lake, and Iceberg code runs unchanged, natively, not as an add-on.</strong></em>&#8221;</p></blockquote><p>This is a much easier pill to swallow for data teams. At least for those running the show. It&#8217;s a hard sell, even with cost savings, to tell someone to rewrite all the code; a much more palatable message is to just swap compute or configs and leave the code be.</p><p>Ok, so all that as an introduction; I don&#8217;t really know a better way to understand a tool than by getting to work. So, let&#8217;s do that.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/lakesail-replacing-spark-with-rust?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Engineering Central! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/lakesail-replacing-spark-with-rust?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Flakesail-replacing-spark-with-rust%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p></div><div><hr></div><h2>Exploring Lakesail concepts, open source, paid platform, etc.</h2><p>It&#8217;s going to be hard to understand all the features of any tool in the short time we have, but I will do my best to give you a working understanding of what Lakesail offers from both open- and closed-source perspectives. We will start with the concepts, check out the open-source options, and finish by setting up an account on the <a href="iframe.php?url=https%3A%2F%2Fplatform.lakesail.com%2F">Lakesail Platform</a> to see what that is all about.</p><h4><mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);"> Ok, what is Lakesail?</mark></h4><p>It is</p><ul><li><p>&#8220;&#8230; distributed <mark data-color="#f1c232" style="background-color: rgb(241, 194, 50); color: rgb(0, 0, 0);">multimodal</mark> compute engine &#8230;&#8221;</p></li><li><p>built on <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fapache-arrow-is-eating-the-world%3Futm_source%3Dpublication-search">Apache Arrow</a></p></li><li><p>built on <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fdatafusion-from-a-python-perspective%3Futm_source%3Dpublication-search">Apache Datafusion</a></p></li><li><p>Spark users can &#8220;&#8230; <span>switch to Sail </span><strong>without making code changes.&#8221;</strong></p></li><li><p>Built with Rust.</p></li></ul><p>This probably makes sense to most of you, I would imagine, besides maybe the word <a href="iframe.php?url=https%3A%2F%2Fwww.buoyantdata.com%2Fblog%2F2026-02-03-multimodal-delta-lake.html">multimodal</a> (<em><a href="iframe.php?url=https%3A%2F%2Fwww.buoyantdata.com%2Fblog%2F2026-02-03-multimodal-delta-lake.html">you can read more about this on the buoyantdata website</a></em>). The rest of these are kinda obvious and well known to most of the data community. Apache Arrow is the new go-to in-memory data format; Apache DataFusion has been around for a long time, and many tools are built on it. The idea that Lakesail is built with Rust is a given, but the most interesting part is that we could port existing Apache Spark code to run on Lakesail compute, which is enticing indeed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21QTBp%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QTBp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png 424w, https://substackcdn.com/image/fetch/$s_!QTBp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png 848w, https://substackcdn.com/image/fetch/$s_!QTBp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png 1272w, https://substackcdn.com/image/fetch/$s_!QTBp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21QTBp%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png" width="1118" height="586" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:586,&quot;width&quot;:1118,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81759,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QTBp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png 424w, https://substackcdn.com/image/fetch/$s_!QTBp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png 848w, https://substackcdn.com/image/fetch/$s_!QTBp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png 1272w, https://substackcdn.com/image/fetch/$s_!QTBp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd92318d1-bdd4-48d5-9504-2e833e3fce5c_1118x586.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>How can this be?</p><p>The handshake between Lakesail and Spark is Spark Connect.</p><div class="pullquote"><p>&#8220;<span>The Spark client session communicates with the Sail server using the </span><strong><a href="iframe.php?url=https%3A%2F%2Fspark.apache.org%2Fdocs%2Flatest%2Fspark-connect-overview.html">Spark Connect</a></strong><span> protocol.&#8221; - </span><a href="iframe.php?url=https%3A%2F%2Fdocs.lakesail.com%2Fsail%2Flatest%2Fintroduction%2Fgetting-started%2F"><span>Lakesail</span></a></p></div><p>I have <a href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fspark-connect-what-is-this-madness">written about Spark Connect before</a>, you can check that link out below. Recently, I&#8217;ve also used Spark Connect when building Agentic Chatbots and Agents, etc, as it allows for simple communication between anything non-Spark &#8230; and well &#8230; Spark.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Fspark-connect-what-is-this-madness" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SycF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp 424w, https://substackcdn.com/image/fetch/$s_!SycF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp 848w, https://substackcdn.com/image/fetch/$s_!SycF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp 1272w, https://substackcdn.com/image/fetch/$s_!SycF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21SycF%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp" width="1456" height="631" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:631,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36210,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://dataengineeringcentral.substack.com/p/spark-connect-what-is-this-madness&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SycF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp 424w, https://substackcdn.com/image/fetch/$s_!SycF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp 848w, https://substackcdn.com/image/fetch/$s_!SycF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp 1272w, https://substackcdn.com/image/fetch/$s_!SycF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4480bd81-7266-4f22-8707-98ab04570db3_1456x631.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s jump to the <mark data-color="#45818e" style="background-color: rgb(69, 129, 142); color: rgb(255, 255, 255);">TDLR</mark> of Spark Connect, because it&#8217;s an important part of the Lakesail conversation. Here is that summary taken from the article I wrote about Spark Connect.</p><p>What, pray tell is Apache Spark Connect?</p><blockquote><p><span>&#8220;&#8230; </span><em>a decoupled client-server architecture that allows remote connectivity to Spark clusters using the DataFrame API &#8230;</em><span>&#8221;</span></p></blockquote><p>and</p><blockquote><p><em>&#8220;It is a thin API that can be embedded everywhere: in application servers, IDEs, notebooks, and programming languages &#8230; &#8220;</em></p></blockquote><p>So, this is key to understanding how something like Lakesail can truly be a built-in replacement for compute/processing for existing Spark pipelines. It&#8217;s just a protocol; Lakesail understands this protocol and can translate a Spark query into a Lakesail query. Easy peasy, not really.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fsubscribe%3F"><span>Subscribe now</span></a></p><div><hr></div><h3>Playing locally with Lakesail.</h3><p>What I want to do is play with Lakesail locally, just to see and feel what it&#8217;s like; then I would like to set up a Lakesail account, connect it to my AWS account, and maybe run the same setup to see what&#8217;s crackin'. </p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">uv init testingLakesail
cd testingLakesail 
uv add pysail pyspark-client==4.2.0</code></pre></div><p>Apparently, we could use the command line with sail to drop into the classic interactive Spark shell, with the Sail server running behind it. But I&#8217;m of the opinion that most folk don&#8217;t use the Spark command line anymore; most people are in Notebooks. You can thank Databricks for that.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">sail spark shell</code></pre></div><p>Either way, let&#8217;s write some PySpark code that uses Sail; in theory, it should be boring, because &#8230; Sail is just running behind the scenes and taking our normal Spark code and executing it against its own engine built on Rust, Arrow, and Datafusion. This will not be a scientific test at all, but I&#8217;m new to this, so give me a break. We will run the same normal PySpark script in a Databricks Notebook on Serverless compute, observe the runtime, then run the same script with Sail. This will all be without a classic Spark cluster, in a sense, on small data, but I just want to see what happens.</p><blockquote><p>If I&#8217;m feeling spicy later, I can connect my personal AWS account to a new Lakesail account and run a larger dataset with a classic Spark cluster. </p></blockquote><p><a href="iframe.php?url=https%3A%2F%2Fwww.backblaze.com%2Fcloud-storage%2Fresources%2Fhard-drive-test-data">Luckily, kind people like Backblaze provide an open-source hard drive dataset as a queryable Apache Iceberg table on S3 or compressed CSV files.</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fwww.backblaze.com%2Fcloud-storage%2Fresources%2Fhard-drive-test-data" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UAtq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png 424w, https://substackcdn.com/image/fetch/$s_!UAtq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png 848w, https://substackcdn.com/image/fetch/$s_!UAtq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!UAtq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21UAtq%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png" width="1456" height="766" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:766,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:339554,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.backblaze.com/cloud-storage/resources/hard-drive-test-data&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UAtq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png 424w, https://substackcdn.com/image/fetch/$s_!UAtq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png 848w, https://substackcdn.com/image/fetch/$s_!UAtq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!UAtq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e081bb5-3078-4cdd-98fc-db989990efce_2200x1158.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We will use the raw, compressed CSV files, since they should pose no problem for Spark. I can get them into my personal AWS account in an S3 bucket; then we will have the data against which to run our tests of vanilla Spark and LakeSail Spark.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%214FVo%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4FVo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png 424w, https://substackcdn.com/image/fetch/$s_!4FVo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png 848w, https://substackcdn.com/image/fetch/$s_!4FVo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png 1272w, https://substackcdn.com/image/fetch/$s_!4FVo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%214FVo%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png" width="1456" height="702" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:702,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:232980,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4FVo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png 424w, https://substackcdn.com/image/fetch/$s_!4FVo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png 848w, https://substackcdn.com/image/fetch/$s_!4FVo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png 1272w, https://substackcdn.com/image/fetch/$s_!4FVo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8af541b-d29d-4297-83a6-7cda935b86d9_1920x926.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>4.54 GB (4,536,210,401 bytes) across 365 objects</p></li><li><p>120,191,685 rows (~120.2M)</p></li></ul><p>Now, I know everyone is going to say this is not fair; we should test on some massive dataset to give vanilla Spark a fighting chance. Also, Serverless; who knows what&#8217;s going on behind the curtain? Oz is back there pulling levers. I hear you, but I ain&#8217;t got the time, and I&#8217;m the one who has to spend the money. Easy for you to say Sunny Jim.</p><p>The Spark version running in a Databricks Notebook against Serverless is easy enough.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import datetime as dt
import time

import pyarrow.csv as pacsv
import pyarrow.fs as pafs
from pyspark.sql import functions as F

SRC = "s3://confessions-of-a-data-guy/drivestats/csv/*.csv.gz"
DST = "confessions-of-a-data-guy/drivestats/results/failures_by_model_day_serverless.csv"
REGION = "us-east-1"
START = dt.date.today() - dt.timedelta(days=730)

t0 = time.perf_counter()

failures = (
    spark.read.option("header", True)
    .csv(SRC)
    .select(F.to_date("date").alias("date"), "model", F.col("failure").cast("int").alias("failure"))
    .where((F.col("failure") == 1) &amp; (F.col("date") &gt;= F.lit(START)))
    .groupBy("date", "model")
    .agg(F.count(F.lit(1)).alias("failures"))
    .orderBy(F.col("date").desc(), F.col("failures").desc(), "model")
)

table = failures.toArrow()

fs = pafs.S3FileSystem(
    access_key="xxx",
    secret_key="xxxxxxxx",
    region=REGION,
)
with fs.open_output_stream(DST) as sink:
    pacsv.write_csv(table, sink)

print(f"{table.num_rows} rows -&gt; s3://{DST} in {time.perf_counter() - t0:.1f}s")

display(table)</code></pre></div><p>And the results.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">2588 rows -&gt; s3://confessions-of-a-data-guy/drivestats/results/failures_by_model_day_serverless.csv in 35.6s
pyarrow.Table
date: date32[day]
model: string
failures: int64 not null
----
date: [[2026-03-31,2026-03-31,2026-03-31,2026-03-31,2026-03-31,...,2025-04-01,2025-04-01,2025-04-01,2025-04-01,2025-04-01]]
model: [["ST8000NM0055","HGST HUH721212ALN604","TOSHIBA MG10ACA20TE","ST16000NM001G","TOSHIBA MG08ACA16TEY",...,"ST8000DM002","WDC WUH722222ALE6L4","HGST HUH721212ALN604","ST8000NM0055","TOSHIBA MG08ACA16TA"]]
failures: [[5,4,3,2,2,...,2,2,1,1,1]]</code></pre></div><p>Ok, for the Sail swap-out, in the Databricks Notebook we need to do this.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">%pip install "pysail==0.7.0"
%pip install "pyspark-client==4.2.0"</code></pre></div><p>Here is the same code, with Sail. You can see the differences are only due to starting a Sail Spark Connect server and then using that. Obviously, in the Production setting, we would have a dedicated Sail Spark Connect Session running and serving from some permanent place. And in theory, we wouldn&#8217;t have to change the core code for the Spark pipelines, just what they connect to.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># run these first, in their own cell:  %pip install pysail   then   %restart_python

import datetime as dt
import os
import time

import pyarrow.csv as pacsv
import pyarrow.fs as pafs
from pyspark.sql import SparkSession
from pyspark.sql import functions as F

from pysail.spark import SparkConnectServer

SRC = "s3://confessions-of-a-data-guy/drivestats/csv/*.csv.gz"
DST = "confessions-of-a-data-guy/drivestats/results/failures_by_model_day_sail.csv"
REGION = "us-east-1"
START = dt.date.today() - dt.timedelta(days=730)

# Must be set before the server starts.
os.environ["SAIL_SPARK__SESSION_TIMEOUT_SECS"] = "3600"
os.environ["AWS_ACCESS_KEY_ID"] = "xxxx"
os.environ["AWS_SECRET_ACCESS_KEY"] = "xxxxxxxxxxx"
os.environ["AWS_REGION"] = REGION

t0 = time.perf_counter()

server = SparkConnectServer("127.0.0.1", 0)
server.start(background=True)
host, port = server.listening_address
# The notebook's own `spark` is the Databricks session; this one is Sail.
sail = SparkSession.builder.remote(f"sc://{host}:{port}").create()

failures = (
    sail.read.option("header", True)
    .csv(SRC)
    .select(F.to_date("date").alias("date"), "model", F.col("failure").cast("int").alias("failure"))
    .where((F.col("failure") == 1) &amp; (F.col("date") &gt;= F.lit(START)))
    .groupBy("date", "model")
    .agg(F.count(F.lit(1)).alias("failures"))
    .orderBy(F.col("date").desc(), F.col("failures").desc(), "model")
)

table = failures.toArrow()

fs = pafs.S3FileSystem(
    access_key=os.environ["AWS_ACCESS_KEY_ID"],
    secret_key=os.environ["AWS_SECRET_ACCESS_KEY"],
    region=REGION,
)
with fs.open_output_stream(DST) as sink:
    pacsv.write_csv(table, sink)

print(f"{table.num_rows} rows -&gt; s3://{DST} in {time.perf_counter() - t0:.1f}s")

display(table)

sail.stop()
server.stop()</code></pre></div><p>This is where I started to have problems. I could see from the Logs in the Notebook that the Sail server was starting, but it was churning for minutes running in Serverless compute with no end in sight. My guess is that Databricks Serverless is not the place to test the Sail version of this code.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">[2026-08-18T00:19:00Z INFO sail_python::spark::server] Starting the Spark Connect server on 127.0.0.1:37959...
[2026-08-18T00:19:00Z INFO sail_session::session_manager::actor::handler] creating session 9c1eba5a-3765-4572-81cf-63201d9a2d0d</code></pre></div><p>Well, in the end it did finish, just much slower. <mark data-color="#ea9999" style="background-color: rgb(234, 153, 153); color: rgb(0, 0, 0);">197.7s</mark></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">[2026-08-18T00:19:00Z INFO sail_python::spark::server] Starting the Spark Connect server on 127.0.0.1:37959...
[2026-08-18T00:19:00Z INFO sail_session::session_manager::actor::handler] creating session 9c1eba5a-3765-4572-81cf-63201d9a2d0d
2588 rows -&gt; s3://confessions-of-a-data-guy/drivestats/results/failures_by_model_day_sail.csv in 197.7s
pyarrow.Table
date: date32[day]
model: string
failures: int64 not null
----
date: [[2026-03-31,2026-03-31,2026-03-31,2026-03-31,2026-03-31,...,2025-04-01,2025-04-01,2025-04-01,2025-04-01,2025-04-01]]
model: [["ST8000NM0055","HGST HUH721212ALN604","TOSHIBA MG10ACA20TE","ST16000NM001G","TOSHIBA MG08ACA16TEY",...,"ST8000DM002","WDC WUH722222ALE6L4","HGST HUH721212ALN604","ST8000NM0055","TOSHIBA MG08ACA16TA"]]
failures: [[5,4,3,2,2,...,2,2,1,1,1]][2026-08-18T00:22:17Z INFO sail_session::session_manager::actor::handler] removing session 9c1eba5a-3765-4572-81cf-63201d9a2d0d
[2026-08-18T00:22:17Z INFO sail_python::spark::server] Shutting down the Spark Connect server...
[2026-08-18T00:22:17Z INFO sail_python::spark::server] The Spark Connect server has stopped.
[2026-08-18T00:22:17Z WARN sail_server::actor] aborting 4 task(s) for SessionManagerActor</code></pre></div><p>I mean, both scripts worked; in s3 I can see the results from each process.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%214t1j%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4t1j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png 424w, https://substackcdn.com/image/fetch/$s_!4t1j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png 848w, https://substackcdn.com/image/fetch/$s_!4t1j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png 1272w, https://substackcdn.com/image/fetch/$s_!4t1j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%214t1j%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png" width="1456" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:291602,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4t1j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png 424w, https://substackcdn.com/image/fetch/$s_!4t1j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png 848w, https://substackcdn.com/image/fetch/$s_!4t1j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png 1272w, https://substackcdn.com/image/fetch/$s_!4t1j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab2c4963-abd0-49d4-81d2-eebb7f6b32e8_1984x1110.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Even the results of each file match, which we would expect. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21KeM1%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KeM1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png 424w, https://substackcdn.com/image/fetch/$s_!KeM1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png 848w, https://substackcdn.com/image/fetch/$s_!KeM1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!KeM1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21KeM1%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png" width="1456" height="1132" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1132,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:463130,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KeM1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png 424w, https://substackcdn.com/image/fetch/$s_!KeM1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png 848w, https://substackcdn.com/image/fetch/$s_!KeM1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!KeM1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a50ed47-b263-4176-bd0f-3402ba018e18_1646x1280.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I guess I wasn&#8217;t expecting Databricks Serverless to beat Sail on speed, but that wasn&#8217;t really the point. We did prove that we can take a vanilla Spark data pipeline, point it at a Sail Spark Connect instance, and run the same exact code without touching it, and get the same exact answer as vanilla Spark, except we ran it through a different engine.</p><blockquote><p>Don&#8217;t get me wrong, I could have been doing something totally dumb and backward; you don&#8217;t know what you don&#8217;t know when playing with new tools.</p></blockquote><p>Out of pure curiosity, I ran the same Sail Spark code from the Notebook locally on my machine to see what would happen. That way I could ensure beyond a doubt that the Spark Sail code was indeed using that as the engine, because who knows what&#8217;s happening on Databricks Serverless; it could be playing nice or not. I mean, from the Sail logs, it appears like it went through that way, but I&#8217;m not 100% sure.</p><p>Well, it took even longer locally. <mark data-color="#ea9999" style="background-color: rgb(234, 153, 153); color: rgb(0, 0, 0);">202.0s</mark></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext"> 2588 rows -&gt; s3://confessions-of-a-data-guy/drivestats/results/failures_by_model_day_sail.csv in 202.0s</code></pre></div><p>I don&#8217;t really take this as a bad sign; I&#8217;m just playing around for the first time. Anyone in their right mind knows that for many datasets, Rust + Datafusion + Apache Arrow is WAY faster than Spark for most data workloads. Maybe until you get to the PB level. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fsubscribe%3F"><span>Subscribe now</span></a></p><div><hr></div><h2>LakeSail as a Data Platform.</h2><p>I figured since the above didn&#8217;t work out that well, I would poke at the SaaS data platform LakeSail offers. My first impressions were very good; they have a clean website and a straightforward, non-confusing onboarding workflow. You would be amazed at how many people get this wrong. LakeSail clearly put some work into this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21KkNe%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KkNe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png 424w, https://substackcdn.com/image/fetch/$s_!KkNe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png 848w, https://substackcdn.com/image/fetch/$s_!KkNe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png 1272w, https://substackcdn.com/image/fetch/$s_!KkNe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21KkNe%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png" width="1456" height="633" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47538f27-507c-4296-940d-cbaa09635677_2866x1246.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:633,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260864,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KkNe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png 424w, https://substackcdn.com/image/fetch/$s_!KkNe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png 848w, https://substackcdn.com/image/fetch/$s_!KkNe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png 1272w, https://substackcdn.com/image/fetch/$s_!KkNe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47538f27-507c-4296-940d-cbaa09635677_2866x1246.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When creating a LakeSail stack in AWS, you can see during the setup what is going on behind the scenes, aka, what technologies they are using to wrap Sail up in way we can use it from their SaaS.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9yCo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png 424w, https://substackcdn.com/image/fetch/$s_!9yCo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png 848w, https://substackcdn.com/image/fetch/$s_!9yCo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png 1272w, https://substackcdn.com/image/fetch/$s_!9yCo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%219yCo%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png" width="1456" height="353" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:353,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209038,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9yCo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png 424w, https://substackcdn.com/image/fetch/$s_!9yCo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png 848w, https://substackcdn.com/image/fetch/$s_!9yCo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png 1272w, https://substackcdn.com/image/fetch/$s_!9yCo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19aa56f1-ddb5-4d70-8fb1-69fec40521bf_2846x690.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><ul><li><p>EKS clusters</p></li><li><p>VPC and networking (subnets, security groups, load balancers, VPC endpoints)</p></li><li><p>IAM role creation for EKS infrastructure and workload roles</p></li><li><p>S3 bucket management for workspace data and job artifacts</p></li><li><p>Glue Data Catalog management for default catalog</p></li><li><p>KMS key management for EKS secrets encryption</p></li><li><p>CloudWatch Logs for EKS control plane logging</p></li><li><p>CloudFormation stack discovery (read-only, tagged resources only)</p></li></ul><blockquote><p><mark data-color="#ffe599" style="background-color: rgb(255, 229, 153); color: rgb(0, 0, 0);">Dang, you know what kinda money I spend on you hobbits??!! This is why, if you are a free subscriber to this Newsletter, give me an upgrade and pay the piper.</mark></p></blockquote><p>Look, you can watch my AWS bill go up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vUT3%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vUT3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png 424w, https://substackcdn.com/image/fetch/$s_!vUT3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png 848w, https://substackcdn.com/image/fetch/$s_!vUT3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png 1272w, https://substackcdn.com/image/fetch/$s_!vUT3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21vUT3%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png" width="1456" height="783" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:783,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151803,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vUT3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png 424w, https://substackcdn.com/image/fetch/$s_!vUT3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png 848w, https://substackcdn.com/image/fetch/$s_!vUT3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png 1272w, https://substackcdn.com/image/fetch/$s_!vUT3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99665f9-3988-4100-ba58-9b8a5c3e698e_1882x1012.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Look Ma, I got a LakeSail account now.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jDUl%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jDUl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png 424w, https://substackcdn.com/image/fetch/$s_!jDUl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png 848w, https://substackcdn.com/image/fetch/$s_!jDUl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png 1272w, https://substackcdn.com/image/fetch/$s_!jDUl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jDUl%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png" width="1456" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152189,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jDUl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png 424w, https://substackcdn.com/image/fetch/$s_!jDUl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png 848w, https://substackcdn.com/image/fetch/$s_!jDUl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png 1272w, https://substackcdn.com/image/fetch/$s_!jDUl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b53120-ea5b-451c-9639-caffbf6d2f80_2338x696.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The UI is very nice and clean, and now that we have connected to my AWS account, let&#8217;s go ahead and set up some &#8220;Compute&#8221; and then I would like to re-run the code we wrote against this more production-like Sail system in one of their Notebooks, and see how smooth the experience is.</p><p>When I went about setting up a Cluster to use, naming it, selecting my AWS account, region, etc &#8230; it wouldn&#8217;t let me go forward without filling in IPv4 CIDR Range for it to use in AWS. This was kinda strange; I've never experienced this before on other compute platforms like Polars Cloud, MotherDuck, Databricks, etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%210gkg%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0gkg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png 424w, https://substackcdn.com/image/fetch/$s_!0gkg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png 848w, https://substackcdn.com/image/fetch/$s_!0gkg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png 1272w, https://substackcdn.com/image/fetch/$s_!0gkg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%210gkg%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png" width="1456" height="1114" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e99a375b-3847-4a70-a107-01baac067184_1600x1224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1114,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191059,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0gkg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png 424w, https://substackcdn.com/image/fetch/$s_!0gkg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png 848w, https://substackcdn.com/image/fetch/$s_!0gkg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png 1272w, https://substackcdn.com/image/fetch/$s_!0gkg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe99a375b-3847-4a70-a107-01baac067184_1600x1224.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>I mean, clearly LakeSail has access to my AWS account to set up the previous infra; this probably should have been taken care of during that process. I am no AWS expert, especially in networking, but that leaves me little choice but to scroll through my AWS VPCs and pick some unused IPv4 CIDR range?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21y-Kh%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y-Kh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png 424w, https://substackcdn.com/image/fetch/$s_!y-Kh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png 848w, https://substackcdn.com/image/fetch/$s_!y-Kh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png 1272w, https://substackcdn.com/image/fetch/$s_!y-Kh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21y-Kh%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png" width="1456" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:296890,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y-Kh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png 424w, https://substackcdn.com/image/fetch/$s_!y-Kh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png 848w, https://substackcdn.com/image/fetch/$s_!y-Kh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png 1272w, https://substackcdn.com/image/fetch/$s_!y-Kh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c38191d-8ca0-4cba-a9f3-a47d6621379c_2112x874.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>While in the middle of doing this, apparently my timing is bad. The site was undergoing some maintenance. So, had to wait for things to get stable and come back again.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%218o7D%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8o7D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png 424w, https://substackcdn.com/image/fetch/$s_!8o7D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png 848w, https://substackcdn.com/image/fetch/$s_!8o7D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png 1272w, https://substackcdn.com/image/fetch/$s_!8o7D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%218o7D%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png" width="1456" height="852" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96415,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8o7D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png 424w, https://substackcdn.com/image/fetch/$s_!8o7D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png 848w, https://substackcdn.com/image/fetch/$s_!8o7D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png 1272w, https://substackcdn.com/image/fetch/$s_!8o7D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02dacb4b-e931-4b36-b8d8-f718eef0513b_1494x874.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ok, now that we are back in business, I can get to creating this Cluster, of course selecting the <mark data-color="#93c47d" style="background-color: rgb(147, 196, 125); color: rgb(0, 0, 0);">Budget</mark> option.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21q4V9%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q4V9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png 424w, https://substackcdn.com/image/fetch/$s_!q4V9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png 848w, https://substackcdn.com/image/fetch/$s_!q4V9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!q4V9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21q4V9%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png" width="1456" height="1237" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1237,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:306154,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q4V9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png 424w, https://substackcdn.com/image/fetch/$s_!q4V9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png 848w, https://substackcdn.com/image/fetch/$s_!q4V9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!q4V9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06aed1c-7d8d-470d-b03d-deec0240c465_1554x1320.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As a side note, I wasn&#8217;t really planning on reviewing LakeSail&#8217;s cloud data platform in depth, but since we are already here, notice what menu options, and therefore features, they provide.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21xOvf%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xOvf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png 424w, https://substackcdn.com/image/fetch/$s_!xOvf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png 848w, https://substackcdn.com/image/fetch/$s_!xOvf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png 1272w, https://substackcdn.com/image/fetch/$s_!xOvf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21xOvf%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png" width="874" height="782" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:782,&quot;width&quot;:874,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77546,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xOvf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png 424w, https://substackcdn.com/image/fetch/$s_!xOvf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png 848w, https://substackcdn.com/image/fetch/$s_!xOvf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png 1272w, https://substackcdn.com/image/fetch/$s_!xOvf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca46204-900f-4e4d-92ff-d13486fc932b_874x782.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We have Jobs, Notebooks, Compute, Catalogs, and Queries &#8230; all of which need no explanation for most of us using modern SaaS data tooling. We would expect such features as the minimum groundwork on which to build robust data platforms.</p><p>Ok, after a little wait, it looks like your Cluster is deployed and running. 15 Pods! Holy Mother of Pearl. Better get this test done and everything torn down before I go broke.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%219wRv%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9wRv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png 424w, https://substackcdn.com/image/fetch/$s_!9wRv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png 848w, https://substackcdn.com/image/fetch/$s_!9wRv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png 1272w, https://substackcdn.com/image/fetch/$s_!9wRv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%219wRv%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png" width="1456" height="460" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115765,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9wRv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png 424w, https://substackcdn.com/image/fetch/$s_!9wRv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png 848w, https://substackcdn.com/image/fetch/$s_!9wRv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png 1272w, https://substackcdn.com/image/fetch/$s_!9wRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64e6fe65-c285-4642-aa11-ad5426a67174_2334x738.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Next, I need to make a new Compute Profile (<em>I couldn&#8217;t create a Notebook without it</em>). We will use Tiny for size.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jl0R%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jl0R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png 424w, https://substackcdn.com/image/fetch/$s_!jl0R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png 848w, https://substackcdn.com/image/fetch/$s_!jl0R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!jl0R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21jl0R%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png" width="1456" height="1178" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1178,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:284638,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jl0R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png 424w, https://substackcdn.com/image/fetch/$s_!jl0R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png 848w, https://substackcdn.com/image/fetch/$s_!jl0R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!jl0R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a32d81-1c4e-4e0d-bf97-65cf52d4e881_1854x1500.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After that, we can get to making a Notebook from which to run our previous code.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21nX6W%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nX6W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png 424w, https://substackcdn.com/image/fetch/$s_!nX6W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png 848w, https://substackcdn.com/image/fetch/$s_!nX6W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png 1272w, https://substackcdn.com/image/fetch/$s_!nX6W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21nX6W%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png" width="1456" height="1153" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1153,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201989,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nX6W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png 424w, https://substackcdn.com/image/fetch/$s_!nX6W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png 848w, https://substackcdn.com/image/fetch/$s_!nX6W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png 1272w, https://substackcdn.com/image/fetch/$s_!nX6W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cbdf055-1205-464e-ac65-97b83cca6080_1674x1326.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Next, we wait for the Notebook to come alive, which is a strange feeling. Makes sense when you read the note about waiting for a Marimo pod to emerge.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Waiting for Marimo pod to become ready (namespace: lakesail-compute-zkmjymkcwb)&#8230;</code></pre></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21oquA%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oquA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png 424w, https://substackcdn.com/image/fetch/$s_!oquA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png 848w, https://substackcdn.com/image/fetch/$s_!oquA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png 1272w, https://substackcdn.com/image/fetch/$s_!oquA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21oquA%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png" width="1456" height="1056" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1056,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133083,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oquA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png 424w, https://substackcdn.com/image/fetch/$s_!oquA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png 848w, https://substackcdn.com/image/fetch/$s_!oquA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png 1272w, https://substackcdn.com/image/fetch/$s_!oquA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff42da37e-a4ff-4226-bc8e-2026ce8bd58d_1690x1226.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now, finally, we can run our previous Sail code and see what's crackin'. I&#8217;m only half interested in the runtime, but I&#8217;m more interested in this code's ability to run out of the box without issues. Remember, we are just trying to get a feel for working with Sail itself and LakeSail, the data platform as a whole. I mean, we picked a T3 Small for AWS compute, with a whopping 2GB of RAM. So, the fact that Sail can run this code with that small of compute says something in itself. <mark data-color="#b6d7a8" style="background-color: rgb(182, 215, 168); color: rgb(0, 0, 0);">That&#8217;s what you call cost savings.</mark></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21M4oC%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M4oC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png 424w, https://substackcdn.com/image/fetch/$s_!M4oC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png 848w, https://substackcdn.com/image/fetch/$s_!M4oC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!M4oC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21M4oC%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png" width="1456" height="874" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:309293,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M4oC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png 424w, https://substackcdn.com/image/fetch/$s_!M4oC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png 848w, https://substackcdn.com/image/fetch/$s_!M4oC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!M4oC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df4c19c-735b-48b7-9389-a3c064f094f9_2128x1278.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>( <em>I had to change from display(table) to print(table).</em> )</p><p>It looks like we got about the same runtime, 177.7s, which is great, considering we used the smallest compute on the market.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21VMju%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VMju!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png 424w, https://substackcdn.com/image/fetch/$s_!VMju!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png 848w, https://substackcdn.com/image/fetch/$s_!VMju!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png 1272w, https://substackcdn.com/image/fetch/$s_!VMju!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png 1456w" sizes="auto, 100vw"><img src="iframe.php?url=https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21VMju%21%2Cw_1456%2Cc_limit%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png" width="1456" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:242612,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://dataengineeringcentral.substack.com/i/210683727?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VMju!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png 424w, https://substackcdn.com/image/fetch/$s_!VMju!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png 848w, https://substackcdn.com/image/fetch/$s_!VMju!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png 1272w, https://substackcdn.com/image/fetch/$s_!VMju!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c1152d9-c6f4-4d34-98e1-4e8f659eade0_1808x740.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ok, I think it&#8217;s time to stop our testing of Sail and LakeSail, if they are one and the same, and just make a few comments about what we&#8217;ve seen so far. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/lakesail-replacing-spark-with-rust?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Flakesail-replacing-spark-with-rust%3Futm_source%3Dsubstack%26utm_medium%3Demail%26utm_content%3Dshare%26action%3Dshare"><span>Share</span></a></p><div><hr></div><h3>The TDLR on LakeSail and the future of Spark.</h3><p>Wow, what can I say? I literally knew nothing about Sail when I opened my Chrome browser to start writing this &#8230; and now I feel like I still know nothing about Sail! Hahaha! I sort of say that tongue-in-cheek, but it&#8217;s hard to give the proper time and space to brand-new tools like this in only a day or two. But we played enough to discuss some high-level concepts.</p><p>Firstly, it&#8217;s so interesting that you and I live in the age of the upstarts, all coming yapping and nipping at the heels of Apache Spark. There is nothing inherently wrong with Apache Spark; it&#8217;s been the backbone of data and analytics for a decade at this point. <mark data-color="#d9d2e9" style="background-color: rgb(217, 210, 233); color: rgb(0, 0, 0);">But it shows how far that data community has come, and how much the data landscape has changed. Today's data requirements are not the same as they were 10 years ago.</mark></p><p>LakeSail puts those needs at the forefront and solves them. We&#8217;ve seen these shifts across the tech landscape at large.</p><ul><li><p>Moving away from the JVM toward Rust.</p></li><li><p>Apache Arrow underpinning everything.</p></li><li><p>Crunching more data with less compute.</p></li><li><p>Reducing compute costs.</p></li><li><p>Reducing complexity.</p></li></ul><blockquote><p>Like all good humans, data folk want their data faster, cheaper, and right now! </p></blockquote><p>LakeSail, the SaaS platform itself, I thought, was wonderfully nice and easy to use. You would be surprised how many people get this wrong. The onboarding experience, the simple UI, and the ease of use and navigation. Providing a Data Platform experience that developers enjoy and find to be a low barrier to entry is priceless. It means LakeSail is doing things and going places.</p><p>Sail, as a technology in and of itself, I don&#8217;t have much to comment on, other than that it is brilliant. The idea to support the Spark Connect Protocol was a genius move. It takes all the arguments about migration away. There is no code rewrite; lift-and-shift has always been a problem, and Sail solved it. I mean, it&#8217;s so easy to use; it makes sense to at least test workloads on LakeSail and see if money can be saved.</p><ul><li><p><em>Remember, this is just my opinion; I have no affiliation with LakeSail. I&#8217;m allowed to say something is good &#8230; when it is good.</em></p></li></ul><p>The only question left nagging in my mind is the performance. I&#8217;m sure that has more to do with me than Sail. I said it before, and it&#8217;s true: for most datasets, Rust, Datafusion, and Arrow are going to beat vanilla Spark. I think maybe that says more about Databricks Serverless running Spark, how good that is, if you want to know my opinion. I can like two tools at once.</p><p>Let me know what you think in the comments.</p><p> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://dataengineeringcentral.substack.com/p/lakesail-replacing-spark-with-rust/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="iframe.php?url=https%3A%2F%2Fdataengineeringcentral.substack.com%2Fp%2Flakesail-replacing-spark-with-rust%2Fcomments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item></channel></rss>