<script data-pm-proxy="intercept"></script><?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[Matt Martin's Substack]]></title><description><![CDATA[Matt's substack on high performance data engineering topics]]></description><link>https://performancede.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!e_gM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6cfb160-fc5c-4efe-8fb0-93e984c961dd_1040x1040.png</url><title>Matt Martin&apos;s Substack</title><link>https://performancede.substack.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 01 Sep 2026 09:00:28 GMT</lastBuildDate><atom:link href="/__u/performancede.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Matt Martin]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[performancede@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[performancede@substack.com]]></itunes:email><itunes:name><![CDATA[Matt Martin]]></itunes:name></itunes:owner><itunes:author><![CDATA[Matt Martin]]></itunes:author><googleplay:owner><![CDATA[performancede@substack.com]]></googleplay:owner><googleplay:email><![CDATA[performancede@substack.com]]></googleplay:email><googleplay:author><![CDATA[Matt Martin]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Serving a DuckLake on EC2 Via Quack]]></title><description><![CDATA[This has a lot of potential]]></description><link>https://performancede.substack.com/p/serving-a-ducklake-on-ec2-via-quack</link><guid isPermaLink="false">https://performancede.substack.com/p/serving-a-ducklake-on-ec2-via-quack</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Fri, 28 Aug 2026 16:53:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AGvA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.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="/__u/substackcdn.com/image/fetch/$s_!AGvA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!AGvA!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png 424w, /__u/substackcdn.com/image/fetch/$s_!AGvA!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png 848w, /__u/substackcdn.com/image/fetch/$s_!AGvA!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AGvA!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!AGvA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png" width="1122" height="1402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1402,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2147901,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!AGvA!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png 424w, /__u/substackcdn.com/image/fetch/$s_!AGvA!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png 848w, /__u/substackcdn.com/image/fetch/$s_!AGvA!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AGvA!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb44ae214-5ed1-4ba2-b3b4-a5c9a7009530_1122x1402.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"><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"><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"><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"><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 know a lot of drama is starting to go down in the Duck world, with the recent announcement that <a href="https://www.aboutamazon.com/news/company-news/aws-ducklabs">DuckLabs is getting acquired by AWS</a>. This article is not to pontificate on that one, but I am cautiously optimistic it will turn out way better than when Oracle acquired MySQL</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://performancede.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">Matt Martin's Substack 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>Instead, today&#8217;s article will demonstrate how to deploy a DuckLake catalog on EC2 getting served by Quack.</p><h2>Deploying The Quack Infra to EC2</h2><p>Like several of my previous articles, I&#8217;ve been on a terraform kick lately, since it&#8217;s more/less the defacto IaC that most orgs use to deploy infrastructure to the cloud. Sure, you a make an argument about Polumi and/or AWS Cloudformation. I don&#8217;t have a dog in that fight, and given I&#8217;m &#8216;good enough&#8217; with terraform, that&#8217;s where I&#8217;ll stay for now. To deploy the quack server on EC2, we simply run this bash script below that executes the terraform code:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!3ddv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!3ddv!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png 424w, /__u/substackcdn.com/image/fetch/$s_!3ddv!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png 848w, /__u/substackcdn.com/image/fetch/$s_!3ddv!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3ddv!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!3ddv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png" width="1344" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1344,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:116200,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!3ddv!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png 424w, /__u/substackcdn.com/image/fetch/$s_!3ddv!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png 848w, /__u/substackcdn.com/image/fetch/$s_!3ddv!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3ddv!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb533964d-946b-4f0b-afc6-d6c68c46e798_1344x596.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"><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"><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"><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"><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 this does is deploy the following to AWS:</p><ul><li><p>an S3 bucket to warehouse DuckLake data</p></li><li><p>an EC2 instance running Linux that installs the DuckDB CLI 1.5.5</p></li><li><p>The EC2 instance has a <a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.08.24-quack-attack/terraform/templates/bootstrap.sh.tftpl">bootstrapper</a> that installs ducklake, creates a ducklake catalog, and binds it to the AWS S3 bucket</p></li><li><p>An AWS EBS volume attached to the EC2 instance to ensure the DuckLake catalog remains durable even in a restart/crash.</p></li></ul><p>&#8230;wait a second&#8230;no python???</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!GKAj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!GKAj!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png 424w, /__u/substackcdn.com/image/fetch/$s_!GKAj!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png 848w, /__u/substackcdn.com/image/fetch/$s_!GKAj!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!GKAj!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!GKAj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png" width="982" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:982,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1147524,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!GKAj!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png 424w, /__u/substackcdn.com/image/fetch/$s_!GKAj!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png 848w, /__u/substackcdn.com/image/fetch/$s_!GKAj!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!GKAj!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd404e6f3-52c7-47c9-a39b-9b31b3bf0256_982x880.png 1456w" sizes="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"><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"><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"><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"><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>That&#8217;s right; we don&#8217;t need no stinkin&#8217; python folks. A linux image with the DuckDB CLI gives us everything we need for this one!</p><p>Once this is deployed, we need to give EC2 about 5 minutes to ramp up so it&#8217;s ready to use. Let&#8217;s go look at the console to see if we are locked and loaded:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KRWo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KRWo!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png 424w, /__u/substackcdn.com/image/fetch/$s_!KRWo!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png 848w, /__u/substackcdn.com/image/fetch/$s_!KRWo!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KRWo!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KRWo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png" width="1456" height="341" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:341,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:214544,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!KRWo!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png 424w, /__u/substackcdn.com/image/fetch/$s_!KRWo!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png 848w, /__u/substackcdn.com/image/fetch/$s_!KRWo!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KRWo!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bac96d9-f838-4e25-abed-d2dafdcd4d7b_2954x692.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Rock and roll - status check is all green. Now let&#8217;s get cooking:</p><h2>Deploy SSH tunnel</h2><p>Since I don&#8217;t have a paid domain that I can use as the endpoint for my EC2 instance e.g. quack.yolomatt.com, I'm going to use an SSH tunnel to forward my local host port 9494 to the EC2 instance. To do that, I made this bash script:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!eYjt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!eYjt!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!eYjt!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!eYjt!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!eYjt!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!eYjt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png" width="1456" height="1357" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1357,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:385581,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!eYjt!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!eYjt!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!eYjt!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!eYjt!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494df0dc-bf4c-44f5-8d26-6fc4f8d28a5e_1648x1536.png 1456w" sizes="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"><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"><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"><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"><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 go ahead and run it so we get wired up:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HNSR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HNSR!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png 424w, /__u/substackcdn.com/image/fetch/$s_!HNSR!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png 848w, /__u/substackcdn.com/image/fetch/$s_!HNSR!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HNSR!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HNSR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png" width="1456" height="202" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:202,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46421,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!HNSR!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png 424w, /__u/substackcdn.com/image/fetch/$s_!HNSR!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png 848w, /__u/substackcdn.com/image/fetch/$s_!HNSR!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HNSR!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06b71747-356e-4f60-b67c-45d1a37768e9_1496x208.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>And Now, The Client</h2><p>Now that we have the infra and the ssh tunnel active, let&#8217;s demonstrate how to actually use a client to connect to the EC2 quack server. For that, let&#8217;s launch the DuckDB CLI locally. Our connect script is as simple as this: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!I0RH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!I0RH!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png 424w, /__u/substackcdn.com/image/fetch/$s_!I0RH!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png 848w, /__u/substackcdn.com/image/fetch/$s_!I0RH!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!I0RH!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!I0RH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png" width="1250" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:1250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:113246,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!I0RH!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png 424w, /__u/substackcdn.com/image/fetch/$s_!I0RH!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png 848w, /__u/substackcdn.com/image/fetch/$s_!I0RH!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png 1272w, /__u/substackcdn.com/image/fetch/$s_!I0RH!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb63881dd-ccf1-4732-8acb-c996dffba688_1250x400.png 1456w" sizes="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"><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"><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"><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"><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>Notice how there is ZERO mention of DuckLake in that script. It&#8217;s now handled behind the scenes with Quack. This unlocks a ton of potential for allowing clients to interact with a DuckLake without having to worry about S3 buckets and whatnot; you will also notice there is no mention of AWS S3 secrets on this connection; again, the quack server handles that; all we need to do is just connect with our super secure token &#129315;.</p><p>And now that we are connected, let&#8217;s demonstrate running some actual queries to create/insert/select data from our DuckLake:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!UOBD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!UOBD!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png 424w, /__u/substackcdn.com/image/fetch/$s_!UOBD!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png 848w, /__u/substackcdn.com/image/fetch/$s_!UOBD!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png 1272w, /__u/substackcdn.com/image/fetch/$s_!UOBD!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!UOBD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png" width="1294" height="436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:1294,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128641,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!UOBD!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png 424w, /__u/substackcdn.com/image/fetch/$s_!UOBD!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png 848w, /__u/substackcdn.com/image/fetch/$s_!UOBD!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png 1272w, /__u/substackcdn.com/image/fetch/$s_!UOBD!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0f8b385-505d-4188-accd-cbcb7dc1c20b_1294x436.png 1456w" sizes="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"><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"><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"><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"><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>You will notice that we are using the &#8220;remote.query&#8221; syntax here. Once DuckDB 2.0 rolled out this fall (fall 2026), that remote.query stuff will go away and instead we will be able to run much cleaner scripts like this instead:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Y-hb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Y-hb!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png 424w, /__u/substackcdn.com/image/fetch/$s_!Y-hb!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png 848w, /__u/substackcdn.com/image/fetch/$s_!Y-hb!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Y-hb!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Y-hb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png" width="990" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06011c93-242d-4688-8542-9518541ff988_990x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:990,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119798,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Y-hb!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png 424w, /__u/substackcdn.com/image/fetch/$s_!Y-hb!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png 848w, /__u/substackcdn.com/image/fetch/$s_!Y-hb!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Y-hb!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06011c93-242d-4688-8542-9518541ff988_990x472.png 1456w" sizes="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"><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"><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"><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"><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>And did our remote.query work&#8230;yes it did:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!G4QT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!G4QT!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png 424w, /__u/substackcdn.com/image/fetch/$s_!G4QT!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png 848w, /__u/substackcdn.com/image/fetch/$s_!G4QT!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png 1272w, /__u/substackcdn.com/image/fetch/$s_!G4QT!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!G4QT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png" width="1260" height="1044" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1044,&quot;width&quot;:1260,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:364749,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!G4QT!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png 424w, /__u/substackcdn.com/image/fetch/$s_!G4QT!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png 848w, /__u/substackcdn.com/image/fetch/$s_!G4QT!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png 1272w, /__u/substackcdn.com/image/fetch/$s_!G4QT!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29648fd2-a721-43ea-9ed8-c03619793121_1260x1044.png 1456w" sizes="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"><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"><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"><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"><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 check S3 to see if the files were actually written like Quack and EC2 were configured to do so:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!iOCm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!iOCm!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png 424w, /__u/substackcdn.com/image/fetch/$s_!iOCm!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png 848w, /__u/substackcdn.com/image/fetch/$s_!iOCm!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png 1272w, /__u/substackcdn.com/image/fetch/$s_!iOCm!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!iOCm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png" width="1456" height="516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:516,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:264248,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!iOCm!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png 424w, /__u/substackcdn.com/image/fetch/$s_!iOCm!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png 848w, /__u/substackcdn.com/image/fetch/$s_!iOCm!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png 1272w, /__u/substackcdn.com/image/fetch/$s_!iOCm!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b07ee88-8338-43c4-91f1-ff5159bcc353_2574x912.png 1456w" sizes="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"><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"><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"><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"><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>Wow&#8230;just wow!</p><h2>The Teardown</h2><p>Now that this POC is over, I&#8217;m going to nuke all the AWS assets to minimize my bill. To do so, I have simple bash script called destroy.sh:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!n8oU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!n8oU!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png 424w, /__u/substackcdn.com/image/fetch/$s_!n8oU!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png 848w, /__u/substackcdn.com/image/fetch/$s_!n8oU!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png 1272w, /__u/substackcdn.com/image/fetch/$s_!n8oU!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!n8oU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png" width="1446" height="654" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:654,&quot;width&quot;:1446,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:197040,&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://performancede.substack.com/i/213169059?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!n8oU!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png 424w, /__u/substackcdn.com/image/fetch/$s_!n8oU!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png 848w, /__u/substackcdn.com/image/fetch/$s_!n8oU!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png 1272w, /__u/substackcdn.com/image/fetch/$s_!n8oU!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6472e4f5-6b5d-479c-8896-e0f4ef9e0a44_1446x654.png 1456w" sizes="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"><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"><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"><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"><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>There is just something so satisfying about running a single script to take out the trash.</p><h2>Conclusion</h2><p>This article demonstrated how to get a Quack server on AWS EC2 that serves up a ducklake. The key takeaways of this are:</p><ol><li><p>clients no longer need to attach ducklakes or AWS credentials, nor have any knowledge that they are the backend</p></li><li><p>Quack on EC2 can be a cost efficient alternative to AWS Aurora Postgres on hosting your DuckLake catalog</p></li><li><p>Quack allows multiple concurrent clients to interact with and WRITE to the DuckLake&#8230;that is huge for concurrency scaling</p></li></ol><p><a href="https://github.com/mattmartin14/dream_machine/tree/main/substack/articles/2026.08.24-quack-attack">THE CODE</a></p><p>Thanks for reading,</p><p>Matt</p><p></p>]]></content:encoded></item><item><title><![CDATA[Querying 1 Thousand JSON Files From S3]]></title><description><![CDATA[And Pitting DuckDB against Spark]]></description><link>https://performancede.substack.com/p/querying-1-thousand-json-files-from</link><guid isPermaLink="false">https://performancede.substack.com/p/querying-1-thousand-json-files-from</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Fri, 14 Aug 2026 13:58:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Xz_v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.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="/__u/substackcdn.com/image/fetch/$s_!Xz_v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Xz_v!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png 424w, /__u/substackcdn.com/image/fetch/$s_!Xz_v!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png 848w, /__u/substackcdn.com/image/fetch/$s_!Xz_v!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Xz_v!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Xz_v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png" width="1456" height="798" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:798,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2441131,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Xz_v!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png 424w, /__u/substackcdn.com/image/fetch/$s_!Xz_v!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png 848w, /__u/substackcdn.com/image/fetch/$s_!Xz_v!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Xz_v!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcd367f3-6ad7-4a64-975a-e997a5c209f6_1694x929.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"><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"><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"><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"><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 common task I have to wrangle with is reading JSON files from an object store; And from all I have seen over the years, its actually quite memory intensive for engines like Spark and DuckDB to deserialize JSON and read it in; however, I figured I should go ahead and finally build a benchmark and compare the 2; and that&#8217;s exactly what this article will cover today. </p><p>We will be pitting 2 AWS services against each other to see which one can process the 1K JSON files the quickest and cheapest. While most of the files are 15kb in size or less, I am throwing a common wrench into this test:</p><ul><li><p>we will have a handful of the files exceed 20MB in size. The purpose behind this is two-fold - It will definitely generate some skew on the parallel processing; however, this also happens in the real world; not every file and/or process follows the happy path. You end up with some easter egg files here and there.</p><p></p></li></ul><p>For the 2 AWS services we will be benchmarking, they will be ECS Fargate using DuckDB and AWS EMR Serverless using Spark. Although AWS offers Glue as another serverless spark service (try saying that phrase 5 times fast&#8230;.), I ultimately chose EMR over glue to get a more &#8220;pure spark&#8221; setup.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://performancede.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">Matt Martin's Substack 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></p><h2>The Fabricated Data</h2><p>The fabricated data represents retail return chat conversations. Here&#8217;s a sample of what it looks like:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!iy9f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!iy9f!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png 424w, /__u/substackcdn.com/image/fetch/$s_!iy9f!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png 848w, /__u/substackcdn.com/image/fetch/$s_!iy9f!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png 1272w, /__u/substackcdn.com/image/fetch/$s_!iy9f!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!iy9f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png" width="975" height="436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:975,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96955,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!iy9f!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png 424w, /__u/substackcdn.com/image/fetch/$s_!iy9f!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png 848w, /__u/substackcdn.com/image/fetch/$s_!iy9f!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png 1272w, /__u/substackcdn.com/image/fetch/$s_!iy9f!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8839dd17-25d2-4c8a-bf49-80ad8bde6a29_975x436.png 1456w" sizes="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"><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"><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"><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"><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 actual script that creates these 1,000 files and slings them all up to S3 can be found <a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.08.12-duckdb_vs_spark_emr/skew_demo/generate_data.py">here</a>.</p><h2>The AWS Infrastructure</h2><p>If you have followed along from some of my earlier articles, you will understand why using Terraform to deploy all the infra makes sense. You can quickly spin up and spin down these things and not incur a sizable bill at the end. What our terraform will deploy is:</p><ul><li><p>AWS ECS Cluster and Task (Task is the actual ETL job)</p></li><li><p>AWS ECR Repository + Docker Image that hosts the code</p></li><li><p>AWS IAM roles to execute the ECS task</p></li><li><p>AWS EMR Serverless application</p></li><li><p>AWS IAM role to execute EMR job</p></li><li><p>typical cloud watch log stuff</p></li></ul><p>To deploy the infra, we can run this simple bash script:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-ZkC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-ZkC!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png 424w, /__u/substackcdn.com/image/fetch/$s_!-ZkC!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png 848w, /__u/substackcdn.com/image/fetch/$s_!-ZkC!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-ZkC!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-ZkC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png" width="560" height="88" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:88,&quot;width&quot;:560,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10791,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-ZkC!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png 424w, /__u/substackcdn.com/image/fetch/$s_!-ZkC!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png 848w, /__u/substackcdn.com/image/fetch/$s_!-ZkC!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-ZkC!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ac9e0b-a19b-45e4-9bd0-09bf4d9350db_560x88.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And if all goes well, after about 2 minutes, we should see this:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!YQdQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!YQdQ!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png 424w, /__u/substackcdn.com/image/fetch/$s_!YQdQ!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png 848w, /__u/substackcdn.com/image/fetch/$s_!YQdQ!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png 1272w, /__u/substackcdn.com/image/fetch/$s_!YQdQ!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!YQdQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png" width="820" height="85" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:85,&quot;width&quot;:820,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56556,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!YQdQ!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png 424w, /__u/substackcdn.com/image/fetch/$s_!YQdQ!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png 848w, /__u/substackcdn.com/image/fetch/$s_!YQdQ!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png 1272w, /__u/substackcdn.com/image/fetch/$s_!YQdQ!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a7cb5ef-86c6-42e8-9e79-7845f40071e1_820x85.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>And Now The ETL</h2><p>&#8230;and this is where things might get a little subjective so strap in &#129315;.</p><p>The general premise of the ETL is that it will perform the following steps:</p><ol><li><p>Read in the raw json files from s3</p></li><li><p>flatten it</p></li><li><p>do some aggregation to get things like message counts, order counts, etc</p></li><li><p>write aggregate results back out to a json file on S3</p></li></ol><p>Here&#8217;s a link to both the DuckDB ETL script and the Spark ETL script:</p><ul><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.08.12-duckdb_vs_spark_emr/skew_demo/duckdb_job.py">DuckDB ETL</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.08.12-duckdb_vs_spark_emr/skew_demo/spark_job.py">Spark ETL</a></p></li></ul><p>One of the things I try to always avoid on ETL jobs is multiple round-trips to the object store. To do so, with DuckDB, I&#8217;m creating an in-memory DuckDB database and reading all the S3 files in there once. From there, DuckDB then runs queries to flatten, aggregate, and copy out. With Spark, you don&#8217;t really get that benefit of jamming the raw data into a local database. However, Spark &#8220;should&#8221; be smart enough as it builds logical plans to know what it can cache on its workers and reuse as we build temp global views. Thus, the spark version may or may not make a few trips to S3. But it&#8217;s hard to determine unless you go really deep into the logs. Thus, we will just trust that Spark will make the smart decision here on when and how many times it wants to hit S3 vs. caching the data.</p><h2>Running the Benchmark</h2><p>To run a benchmark, I have a handy shell script. You can provide it a run date so when it puts the results in S3, it&#8217;s saved off in a folder by that run-date+a unique ID. To execute the shell script, we run the following in terminal:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rkal!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rkal!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png 424w, /__u/substackcdn.com/image/fetch/$s_!rkal!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png 848w, /__u/substackcdn.com/image/fetch/$s_!rkal!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rkal!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rkal!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png" width="702" height="72" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:72,&quot;width&quot;:702,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11971,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!rkal!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png 424w, /__u/substackcdn.com/image/fetch/$s_!rkal!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png 848w, /__u/substackcdn.com/image/fetch/$s_!rkal!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rkal!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c73982e-fd44-416c-86cc-b5fc9b0f24e1_702x72.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>What this does is the following:</p><ul><li><p>runs the ECS Fargate DuckDB job</p></li><li><p>subsequently runs the EMR Serverless Spark Job</p></li></ul><p>To ensure we have some consistency, I ran each benchmark 3 times so we could get multiple runs and have a good idea of the overall time. And to make that easy, I created another bash script called &#8220;run_benchmark_batch.sh&#8221; which can be found <a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.08.12-duckdb_vs_spark_emr/scripts/run_benchmark_batch.sh">here</a>.</p><h2>The Results</h2><p>Below is a summary of the results for all 3 benchmarks:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Ligg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Ligg!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png 424w, /__u/substackcdn.com/image/fetch/$s_!Ligg!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png 848w, /__u/substackcdn.com/image/fetch/$s_!Ligg!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Ligg!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Ligg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png" width="690" height="248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:248,&quot;width&quot;:690,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61141,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Ligg!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png 424w, /__u/substackcdn.com/image/fetch/$s_!Ligg!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png 848w, /__u/substackcdn.com/image/fetch/$s_!Ligg!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Ligg!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f1b1a64-6337-4858-9fe9-9c60b67fd15a_690x248.png 1456w" sizes="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"><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"><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"><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"><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 isolate start-up times, I have in each ETL script a timer capturing the actual start of the data read from S3 to when it finishes writing the aggregate file back to S3. On average, DuckDB running on ECS fargate had an in-process time of 48.8 seconds, whereas EMR serverless on average took 167.53 seconds. No doubt the skew of the 20MB files played into causing EMR and its Spark plan to have some issues. However, it&#8217;s fascinating that DuckDB was able to just deal with all this at a remarkably faster speed.</p><p>For those wondering how much CPU/RAM I provided each service, here you go:</p><ul><li><p>ECS Fargate - 2 CPUs, 4 GB RAM</p></li><li><p>EMR Serverless - Max 8 processors and 32GB Ram</p><ul><li><p>That is a ceiling of what EMR can use; its serverless model will actually optimize the query plan and flex up/down the needed resources so it might not use all 32GB of RAM nor all 8 processors.</p></li></ul></li></ul><p>One other thing that was very interesting to watch was the start-up time for both services. ECS fargate was like clockwork at 22-23 seconds to fire up and start running. Spark had a little more variability and definitely took more time; however, to be fair, Spark is having to acquire more resources than ECS Fargate.</p><h2>The Financials</h2><p>Now to a more interesting aspect of this benchmark; I wanted to try and get close to exact costs for each service. To do so, I used AWS&#8217;s cost explorer (CE) and turned on our benchmark ID in the cost explorer allocation tags. AWS Cost explorer has a lag of 24-48 hours for allocating down to tags; as of this writing, it was able to get the real costs for ECS Fargate; however, the EMR jobs have not propagated the costs to CE yet, thus they are an estimate below:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Rs_I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Rs_I!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png 424w, /__u/substackcdn.com/image/fetch/$s_!Rs_I!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png 848w, /__u/substackcdn.com/image/fetch/$s_!Rs_I!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Rs_I!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Rs_I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png" width="561" height="192" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:192,&quot;width&quot;:561,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34751,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Rs_I!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png 424w, /__u/substackcdn.com/image/fetch/$s_!Rs_I!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png 848w, /__u/substackcdn.com/image/fetch/$s_!Rs_I!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Rs_I!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21f8e476-5a77-4245-8ce3-fa4aaf94a90c_561x192.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ul><li><p>The EMR serverless cost estimate is based on the bill vCPU-hour and memoryGB-hour we were able to pull from the EMR logs.</p></li></ul><p>As you can see, the cost to run ECS Fargate is <strong>significantly</strong> less than EMR serverless; so DuckDB wins on both speed and cost here. </p><h2>Tearing Down the Infra</h2><p>This is probably the most satisfying part of the testing. I can run a simple bash script below that nukes all the AWS infrastructure I spun up:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!bl8-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!bl8-!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png 424w, /__u/substackcdn.com/image/fetch/$s_!bl8-!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png 848w, /__u/substackcdn.com/image/fetch/$s_!bl8-!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bl8-!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!bl8-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png" width="553" height="81" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:81,&quot;width&quot;:553,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10624,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!bl8-!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png 424w, /__u/substackcdn.com/image/fetch/$s_!bl8-!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png 848w, /__u/substackcdn.com/image/fetch/$s_!bl8-!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bl8-!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c28c95d-31c4-4902-ab21-30f918425b50_553x81.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And if all goes well, you should see this message after about 1 minute:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!kkCs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!kkCs!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png 424w, /__u/substackcdn.com/image/fetch/$s_!kkCs!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png 848w, /__u/substackcdn.com/image/fetch/$s_!kkCs!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kkCs!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!kkCs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png" width="773" height="209" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:209,&quot;width&quot;:773,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56387,&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://performancede.substack.com/i/211173544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!kkCs!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png 424w, /__u/substackcdn.com/image/fetch/$s_!kkCs!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png 848w, /__u/substackcdn.com/image/fetch/$s_!kkCs!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kkCs!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F750582d0-fec6-4b92-aa3e-0c06c6fad514_773x209.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>Conclusion</h2><p>I&#8217;m not looking to start a war here with the Spark evangelists; am I using the right tool for the right job? maybe and maybe not; the data is definitely not GB of size; however, I wanted to demonstrate that many workloads today that use Spark to process data like this can probably benefit by transitioning over to the Duck; you will get a decent speed boost and you will also make your employer happy by saving some $$$, especially if you are running hundreds or thousands of daily jobs that fit this size of data. Those 3 cent runs can add up very quickly.</p><p>Another thing to remember is you can easily run the DuckDB jobs locally from your laptop; so QA and testing scripts is much easier vs. sending spark jobs up to EMR and praying to the AWS gods that no errors occur after waiting a few minutes.</p><p>As always, the code link is below and you are welcome to pull it and test it yourself and run your own benchmarks, if you think mine are <em><strong>sus</strong></em> (learned that word from my kids recently &#128516;).</p><p><a href="https://github.com/mattmartin14/dream_machine/tree/main/substack/articles/2026.08.12-duckdb_vs_spark_emr">THE CODE</a></p><p>Thanks for reading,<br>Matt</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[LakeKeeper+MinIO]]></title><description><![CDATA[Simulating a real AWS Iceberg workload locally]]></description><link>https://performancede.substack.com/p/lakekeeperminio</link><guid isPermaLink="false">https://performancede.substack.com/p/lakekeeperminio</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Mon, 20 Jul 2026 13:06:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xL4O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_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="/__u/substackcdn.com/image/fetch/$s_!xL4O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xL4O!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!xL4O!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!xL4O!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xL4O!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xL4O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7030f95-2799-4e12-ac88-0e4ce64ca6fa_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;:2297358,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!xL4O!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!xL4O!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!xL4O!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xL4O!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030f95-2799-4e12-ac88-0e4ce64ca6fa_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"><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"><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"><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"><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 is a rather bold statement I&#8217;m about to make, but I think <strong>we have finally hit the holy grail of local Iceberg development on DuckDB</strong> to build genuine scripts that can be tested fast and cheap locally and then deployed up to the AWS stack (Or GCP/Azure if you&#8217;d like). </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://performancede.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">Matt Martin's Substack 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>If you rewind nearly a year ago, DuckDB&#8217;s Iceberg extension just started supporting more than reading data; you could now do simple writing such as creating a bare bones table and doing inserts. At the time, this was a significant shift in the support posture DuckDB was offering for Iceberg, given DuckLabs was also rolling out DuckLake.</p><blockquote><p>Side Note - I&#8217;m actually in the midst of authoring the O&#8217;Reilly book &#8220;DuckLake - The Definitive Guide&#8221; with my co-author <a href="https://www.linkedin.com/in/alex-monahan/">Alex Monahan</a>. You can get early release chapters at <a href="https://motherduck.com/lp/ducklake-lakehouse-table-format-book-full/">this link</a> if you are interested.</p></blockquote><p>However, fast-forward to today and the DuckDB Iceberg extension now supports all of the following DDL/DML syntax:</p><ul><li><p>CREATE TABLE AS (CTAS)</p></li><li><p>MERGE INTO</p></li><li><p>INSERT</p></li><li><p>UPDATE</p></li><li><p>DELETE</p></li></ul><p>This is a big freaking deal. You now have the ability to author scripts that can easily read files from S3/GCS/Azure, do transformations, and then merge them to an Iceberg target, all with just using DuckDB - no spark necessary.</p><p>However, what do we do about local development?</p><h2>Hello LakeKeeper+MinIO</h2><p>I&#8217;ve heard of MinIO in the past, but never really gave it a try until a few months ago. MinIO basically is a simulated S3 environment, but without you having to need an AWS account. It&#8217;s simple to stand up and all runs in Docker.</p><p><a href="https://github.com/lakekeeper/lakekeeper">LakeKeeper</a> is an Iceberg catalog written in rust. When you marry the 2 of these together in a simple docker setup, you get the ability to build and run CRUD scripts on Iceberg tables, but locally and fast. And then, when it&#8217;s time to promote the locally tested script up to S3, you can do so by simply toggling a few environment variables. And that&#8217;s what the rest of this article will showcase and walk through.</p><h2>The Docker File</h2><p>First thing we will do is setup a simple docker compose file that builds our environment for MinIO+LakeKeeper.  The full script is about 142 lines long, so I won&#8217;t post here, but there&#8217;s a link at the bottom of this article to it, as always. One important thing I did for this docker file was put my MinIO bucket name in a .env file; when the docker compose script runs, it will reference the .env file and pull in the minio bucket name, so that it&#8217;s not hardcoded throughout the file. The bucket name also gets reused in a a few other scripts.</p><h2>The Raw Data</h2><p>As like many of my prior posts, I&#8217;m going to use the TPCH dataset and load the orders table to both the MinIO local bucket, as well as the AWS S3 bucket. </p><p>The actual script to push to a bucket is as simple as this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HGeR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HGeR!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png 424w, /__u/substackcdn.com/image/fetch/$s_!HGeR!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png 848w, /__u/substackcdn.com/image/fetch/$s_!HGeR!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HGeR!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HGeR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png" width="1380" height="508" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:508,&quot;width&quot;:1380,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131445,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!HGeR!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png 424w, /__u/substackcdn.com/image/fetch/$s_!HGeR!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png 848w, /__u/substackcdn.com/image/fetch/$s_!HGeR!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HGeR!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabf8f67c-c37b-4a9a-bd55-4a047cbc771a_1380x508.png 1456w" sizes="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"><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"><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"><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"><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>You will notice a &#8220;__BUCKET__&#8221; placeholder. That gets substituted for the bucket name at run time depending if we are targeting dev or prod.</p><h2>The Iceberg Workload</h2><p>Now that our raw dataset is squared away, this Iceberg script demonstrates what is now possible when we run DuckDB against an authenticated Iceberg warehouse. The actual script that wires up environment to target for DuckDB is in a bash script that we will talk about soon:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!iKtM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!iKtM!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png 424w, /__u/substackcdn.com/image/fetch/$s_!iKtM!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png 848w, /__u/substackcdn.com/image/fetch/$s_!iKtM!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png 1272w, /__u/substackcdn.com/image/fetch/$s_!iKtM!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!iKtM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png" width="1456" height="1336" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1336,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:477175,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!iKtM!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png 424w, /__u/substackcdn.com/image/fetch/$s_!iKtM!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png 848w, /__u/substackcdn.com/image/fetch/$s_!iKtM!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png 1272w, /__u/substackcdn.com/image/fetch/$s_!iKtM!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e81ed51-6891-4433-a422-ba32c955b0e9_1888x1732.png 1456w" sizes="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"><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"><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"><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"><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 this script does is the following:</p><ol><li><p>reads from the raw source bucket, which is substituted at run time depending on if we are targeting dev (MinIO) or prod (AWS S3)</p></li><li><p>creates an iceberg schema</p></li><li><p>runs a CTAS</p></li><li><p>creates a temp table and then runs a MERGE statement</p></li><li><p>finally, demonstrates running DELETE/UPDATE/INSERT/SELECT</p></li></ol><p>The script targets the full spectrum of the most common DDL/DML operations one would run on an Iceberg table, less the maintenance operations such as compaction. I&#8217;d say this is a pretty significant step for the DuckDB Iceberg Extension</p><h2>Wiring Up the Environment</h2><p>To wire up the environment, we first have a bash script that has a reusable function to get our targeted bucket name:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jr0t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jr0t!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png 424w, /__u/substackcdn.com/image/fetch/$s_!jr0t!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png 848w, /__u/substackcdn.com/image/fetch/$s_!jr0t!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jr0t!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jr0t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png" width="1456" height="1597" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1597,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:334079,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!jr0t!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png 424w, /__u/substackcdn.com/image/fetch/$s_!jr0t!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png 848w, /__u/substackcdn.com/image/fetch/$s_!jr0t!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jr0t!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F748eefae-2440-4af9-84ad-cec83eecaf9c_1612x1768.png 1456w" sizes="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"><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"><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"><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"><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 function resolve_bucket_for_mode will get called in 2 other bash scripts:</p><ul><li><p>the raw data load</p></li><li><p>the ETL/workload</p></li></ul><p>Next, we have the bash script for the raw data load. When we run this script, we can simply pass in as a param either &#8220;dev&#8221; or &#8220;prod&#8221; depending on which environment we want to run the script on:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dOxS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dOxS!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png 424w, /__u/substackcdn.com/image/fetch/$s_!dOxS!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png 848w, /__u/substackcdn.com/image/fetch/$s_!dOxS!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dOxS!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dOxS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png" width="1208" height="2020" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2020,&quot;width&quot;:1208,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:363772,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dOxS!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png 424w, /__u/substackcdn.com/image/fetch/$s_!dOxS!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png 848w, /__u/substackcdn.com/image/fetch/$s_!dOxS!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dOxS!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e9ed51-7fec-486a-9340-8b2971fb9360_1208x2020.png 1456w" sizes="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"><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"><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"><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"><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 think starting at line 10 is the secret sauce you&#8217;d probably care about on this post the most; it demonstrates how we setup our connection to MinIO if we are running in dev mode.</p><p>Finally, here&#8217;s the bash script to run the actual ETL:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ZoV_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZoV_!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZoV_!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZoV_!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZoV_!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZoV_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png" width="1456" height="2470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2470,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:547869,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ZoV_!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png 424w, /__u/substackcdn.com/image/fetch/$s_!ZoV_!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png 848w, /__u/substackcdn.com/image/fetch/$s_!ZoV_!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ZoV_!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe95468b-14ac-44f7-9480-71d9fc54e32f_1700x2884.png 1456w" sizes="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"><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"><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"><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"><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>You&#8217;ll notice in this bash script, depending on our environment mode, we will either establish and attach a LakeKeeper connection to DuckDB or an S3 Table Bucket for AWS&#8217;s managed Iceberg experience.</p><h2>Alright, Let&#8217;s Run This</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!n1RB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!n1RB!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!n1RB!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!n1RB!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!n1RB!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!n1RB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg" width="474" height="349" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:349,&quot;width&quot;:474,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!n1RB!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!n1RB!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!n1RB!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!n1RB!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2970f5a0-fab8-44b9-998c-263a74e0e0c9_474x349.jpeg 1456w" sizes="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"><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"><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"><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"><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 that we have all the plumbing in place, let&#8217;s go actually run this.</p><p>First let&#8217;s spin up the Docker container:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_adh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_adh!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png 424w, /__u/substackcdn.com/image/fetch/$s_!_adh!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png 848w, /__u/substackcdn.com/image/fetch/$s_!_adh!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_adh!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_adh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png" width="556" height="218" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:218,&quot;width&quot;:556,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53081,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!_adh!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png 424w, /__u/substackcdn.com/image/fetch/$s_!_adh!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png 848w, /__u/substackcdn.com/image/fetch/$s_!_adh!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_adh!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ddf539-7dcb-4736-973d-4e97104d60bc_556x218.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>So far, so good. Now, let&#8217;s load the raw data to dev and prod. First dev:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2DT2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2DT2!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!2DT2!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!2DT2!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2DT2!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2DT2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png" width="445" height="304" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:304,&quot;width&quot;:445,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25529,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!2DT2!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!2DT2!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!2DT2!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2DT2!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b927e75-4896-468d-a1b2-cd85f45a6c3d_445x304.png 1456w" sizes="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"><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"><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"><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"><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>And now the raw load to prod (AWS):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Crf9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Crf9!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!Crf9!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!Crf9!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Crf9!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Crf9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png" width="445" height="304" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:304,&quot;width&quot;:445,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25527,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Crf9!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!Crf9!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!Crf9!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Crf9!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3fdac90-f613-41f5-9935-2f2847fb1660_445x304.png 1456w" sizes="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"><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"><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"><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"><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>Alright, we have our raw data in both environments. Now let&#8217;s execute the actual Iceberg workload. First up - dev:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yPEF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yPEF!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!yPEF!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!yPEF!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yPEF!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yPEF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png" width="445" height="304" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:304,&quot;width&quot;:445,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25768,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!yPEF!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!yPEF!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!yPEF!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yPEF!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcb80574-7da0-472a-b95e-1ab7f036d033_445x304.png 1456w" sizes="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"><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"><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"><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"><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>And now prod:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-3Mo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-3Mo!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!-3Mo!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!-3Mo!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-3Mo!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-3Mo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png" width="445" height="304" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:304,&quot;width&quot;:445,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25781,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-3Mo!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!-3Mo!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!-3Mo!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-3Mo!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea86ab57-c0c1-4e4f-8680-2c730cca8ff7_445x304.png 1456w" sizes="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"><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"><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"><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"><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>Wow - so easy a caveman can&#8230;wait a second&#8230;I don&#8217;t work for that company &#129315;.</p><p>Let&#8217;s also go take a peak in Amazon Athena to verify the script isn&#8217;t lying to us:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Z1md!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Z1md!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png 424w, /__u/substackcdn.com/image/fetch/$s_!Z1md!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png 848w, /__u/substackcdn.com/image/fetch/$s_!Z1md!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Z1md!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Z1md!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png" width="1456" height="707" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:707,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:129161,&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://performancede.substack.com/i/207692328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Z1md!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png 424w, /__u/substackcdn.com/image/fetch/$s_!Z1md!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png 848w, /__u/substackcdn.com/image/fetch/$s_!Z1md!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Z1md!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b335649-8e89-41ff-b5b2-a6f837b0e6f8_1489x723.png 1456w" sizes="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"><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"><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"><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"><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>Bingo! All works.</p><h2>Summary</h2><p>At this point, I think we have hit a special setup for running Iceberg workloads locally to test, without the need for Spark. DuckDB covers all the DML/DDL I think most would need. And toggling between dev and prod is as simple as altering the secrets and attach statement for the Iceberg catalog.</p><p>One other think you will notice is this entire project was done without a single line of python code; the DuckDB CLI has come a very VERY long way and is very powerful out of the gate. That CLI coupled with some bash - and you are good to go.</p><p>On the subject of S3Tables vs. traditional AWS glue tables - yes, traditional glue tables with Iceberg support in AWS were out well before S3Tables came about; however, I think S3Tables have had enough runway at this point to hammer out most of the kinks, and overall, it&#8217;s a more fluid and easier experience to attach and create tables managed by the S3Table service. You don&#8217;t have to specify bucket paths for every table you make, and it fits better with testing against a local MinIO+Lakekeeper setup IMO.</p><p>I hope this inspires others to realize they don&#8217;t always need that spark sledgehammer, and that they could probably save some significant $$$ going this route instead.</p><p><a href="https://github.com/mattmartin14/dream_machine/tree/main/substack/articles/2026.07.20-lakekeeper">THE CODE</a></p><p>Thanks for reading,<br>Matt</p>]]></content:encoded></item><item><title><![CDATA[Orchestrating DuckDB ETL in AWS With Airflow]]></title><description><![CDATA[can call this one round 3]]></description><link>https://performancede.substack.com/p/orchestrating-duckdb-etl-in-aws-with</link><guid isPermaLink="false">https://performancede.substack.com/p/orchestrating-duckdb-etl-in-aws-with</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Mon, 15 Jun 2026 14:08:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!N0uP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.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="/__u/substackcdn.com/image/fetch/$s_!N0uP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!N0uP!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png 424w, /__u/substackcdn.com/image/fetch/$s_!N0uP!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png 848w, /__u/substackcdn.com/image/fetch/$s_!N0uP!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png 1272w, /__u/substackcdn.com/image/fetch/$s_!N0uP!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!N0uP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png" width="1183" height="1329" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1329,&quot;width&quot;:1183,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2286280,&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://performancede.substack.com/i/202125521?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!N0uP!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png 424w, /__u/substackcdn.com/image/fetch/$s_!N0uP!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png 848w, /__u/substackcdn.com/image/fetch/$s_!N0uP!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.png 1272w, /__u/substackcdn.com/image/fetch/$s_!N0uP!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1924fca-1d8a-4488-bbf3-ffec5ec74992_1183x1329.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"><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"><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"><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"><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 month ago, I published a couple articles that talked about how to deploy infrastructure and ETL in AWS for DuckDB workloads. The setup uses ECS Fargate for elastic and serverless compute; it also uses a generic ECR image so it can be bootstrapped to multiple ETL scripts, which IMO is better than deploying an image per script where the script gets bake&#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/orchestrating-duckdb-etl-in-aws-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AWS Duck DB Full ETL Walk Through - Mulligan]]></title><description><![CDATA[This round is to help illustrate deploying multiple jobs at scale.]]></description><link>https://performancede.substack.com/p/aws-duck-db-full-etl-walk-through</link><guid isPermaLink="false">https://performancede.substack.com/p/aws-duck-db-full-etl-walk-through</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Wed, 20 May 2026 13:03:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!g1vf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!g1vf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!g1vf!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!g1vf!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!g1vf!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!g1vf!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!g1vf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic&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;:508255,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/198548200?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!g1vf!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!g1vf!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!g1vf!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!g1vf!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F163ea749-1da0-4341-b28b-825b4864e9b2_1535x1024.heic 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"><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"><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"><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"><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>Last week, I published<a href="/__u/performancede.substack.com/p/complete-end-to-end-build-of-etl"> the longest article </a>I&#8217;ve ever written on this platform; it was a full End-To-End walkthrough on how to deploy DuckDB ETL jobs to AWS at scale; the article was well received but it also sparked some open ended questions. I was missing the following things in the article:</p><ol><li><p>CICD bash scripts to deploy all the AWS assets</p></li><li><p>Demonstrating deploying multiple jobs</p></li><li><p>Clarity on how to remove all the assets at the end to save some $$</p></li></ol><p>Today, we will answer these questions. I&#8217;d recommend though that before you proceed, you take a look at the previous article so you understand what all gets deployed and why.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://performancede.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">Matt Martin's Substack 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><h2>Separation of Concerns</h2><h3><em>First, The Foundational Assets</em></h3><p>The first thing we will do here is separate out the foundational infrastructure deployment from the actual ETL jobs. The rationale is simple. You need to deploy the host/server/cluster farm to hold all your jobs. You can think of this as being analogous to a databricks workspace or an Airflow instance. Thus, in our foundational deployment, we will do the following:</p><ol><li><p>Create the ECS cluster</p></li><li><p>Create the ECR repository</p></li><li><p>Deploy the S3 buckets (Raw and Agg)</p></li><li><p>Create the log group in Cloudwatch</p></li><li><p>Create the slack webhook in the secrets manager</p></li><li><p>Create the IAM roles to execute ECS tasks and pull ECR images</p></li><li><p>Build the Docker Image (Our ETL runner) and push up/register in our ECR repository</p></li></ol><p>To do this, I created this handy bash script here: <a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.21-ecs_etl_part_2/deploy/deploy_foundational.sh">deploy foundational</a>. Here&#8217;s how it looks when we decide to start executing it:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ZGk4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZGk4!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic 424w, /__u/substackcdn.com/image/fetch/$s_!ZGk4!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic 848w, /__u/substackcdn.com/image/fetch/$s_!ZGk4!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!ZGk4!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZGk4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic" width="736" height="255" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:255,&quot;width&quot;:736,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35105,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/198548200?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ZGk4!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic 424w, /__u/substackcdn.com/image/fetch/$s_!ZGk4!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic 848w, /__u/substackcdn.com/image/fetch/$s_!ZGk4!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!ZGk4!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8ee308a-f03c-4b4f-a6bb-9e44a2afc1ef_736x255.heic 1456w" sizes="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"><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"><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"><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"><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 bash script invokes the terraform to deploy all the AWS assets as well as execute the docker image build and subsequently push it up to ECR.</p><h3><em>Next, The Dummy Datasets</em></h3><p>Once the foundational AWS assets are deployed, we will then run a script that now deploys 2 separate dummy data sets to S3. I&#8217;m deploying 2 because later, we will be deploying 2 separate ETL jobs that process the individual datasets. The script for this one is very straight forward and can be found <a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.21-ecs_etl_part_2/scripts/pre_gen_data.py">here</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!QOka!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!QOka!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic 424w, /__u/substackcdn.com/image/fetch/$s_!QOka!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic 848w, /__u/substackcdn.com/image/fetch/$s_!QOka!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!QOka!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!QOka!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic" width="1456" height="1226" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1226,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:117370,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/198548200?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!QOka!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic 424w, /__u/substackcdn.com/image/fetch/$s_!QOka!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic 848w, /__u/substackcdn.com/image/fetch/$s_!QOka!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!QOka!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7317f4f8-7eb7-40c3-a114-4d0721dc3457_1758x1480.heic 1456w" sizes="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"><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"><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"><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"><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>Side Note</strong> - The DuckDB TPCH plugin is awesome; I used to write a ton of scripts to generate dummy data, but now I just use TPCH and in 3 lines of code, I have a full suite of tables. Its very easy and time efficient.</p></blockquote><p></p><h3><em>Thirdly?? If that&#8217;s even a word - The ETL Jobs</em></h3><p>Now that we have our foundational assets and dummy data pre-loaded, it&#8217;s time for us to deploy and schedule 2 separate ETL jobs. To make this process scalable and simple, I created a bash script that takes in the following parameters to deploy a job:</p><ul><li><p>name we want to call the job</p></li><li><p>the location of our local python script path (the actual ETL code)</p></li><li><p>the target s3 path we want to deploy the script to</p></li><li><p>the cpu we want allocated to the task</p></li><li><p>the ram we want allocated to the task</p></li><li><p>our cron schedule</p></li></ul><p>Below is an example that deploys our orders ETL pipeline. I&#8217;ve given it 2 CPU cores and 4GB of RAM and told it to fire daily on a schedule at 5am.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!aD_t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!aD_t!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic 424w, /__u/substackcdn.com/image/fetch/$s_!aD_t!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic 848w, /__u/substackcdn.com/image/fetch/$s_!aD_t!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!aD_t!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!aD_t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic" width="1266" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1266,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70093,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/198548200?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!aD_t!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic 424w, /__u/substackcdn.com/image/fetch/$s_!aD_t!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic 848w, /__u/substackcdn.com/image/fetch/$s_!aD_t!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!aD_t!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39834d1e-5b41-4b6b-912f-9becd93e85d9_1266x832.heic 1456w" sizes="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"><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"><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"><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"><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>Here are the links to both job&#8217;s deployment bash scripts:</p><ul><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.21-ecs_etl_part_2/deploy/deploy_orders_job.sh">Orders Job</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.21-ecs_etl_part_2/deploy/deploy_cust_job.sh">Customers Job</a></p></li></ul><p>I hope now you see the scale factor of this setup; with just a few lines of code, we can deploy numerous, independent ETL jobs, each of which can have their own schedule, their own CPU/RAM config, and they all can reuse the same base docker/ECR image. Plus, they are <em><strong>SERVERLESS</strong></em>; thus they only acquire the compute when they are needed to run. This makes deploying hundreds of scripts super easy.</p><p>Here&#8217;s what the two ECS tasks look like when we deploy them:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HzhU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HzhU!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic 424w, /__u/substackcdn.com/image/fetch/$s_!HzhU!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic 848w, /__u/substackcdn.com/image/fetch/$s_!HzhU!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!HzhU!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HzhU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic" width="1456" height="834" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:834,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192727,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/198548200?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!HzhU!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic 424w, /__u/substackcdn.com/image/fetch/$s_!HzhU!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic 848w, /__u/substackcdn.com/image/fetch/$s_!HzhU!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!HzhU!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0997d2c0-0084-4dbd-bb17-327edf5f31e9_1900x1088.heic 1456w" sizes="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"><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"><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"><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"><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>You will notice how each has their respective script path as param. This setup is one I truly love and think you will too.</p><p>And here are both of their schedules in EventBridge:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jTZx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jTZx!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic 424w, /__u/substackcdn.com/image/fetch/$s_!jTZx!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic 848w, /__u/substackcdn.com/image/fetch/$s_!jTZx!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!jTZx!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jTZx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic" width="1426" height="511" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:511,&quot;width&quot;:1426,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36419,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/198548200?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!jTZx!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic 424w, /__u/substackcdn.com/image/fetch/$s_!jTZx!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic 848w, /__u/substackcdn.com/image/fetch/$s_!jTZx!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!jTZx!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc089874-fe89-458f-83e3-1b2cff949ebf_1426x511.heic 1456w" sizes="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"><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"><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"><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"><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><h2>The Local Dev/Test Experience</h2><p>One of the major things I strive for when developing an ETL framework that has to get deployed to the cloud is ensuring I have a seamless local development/testing experience. I have been in numerous situations where I burned <strong>HOURS</strong> deploying jobs to the cloud; it would look something horrifying like this:</p><ul><li><p>comit code to git repository</p></li><li><p>kick off CICD script, which runs the terraform to deploy stuff (10 minutes)</p></li><li><p>login to web console - manually kick off jobs</p></li><li><p>wait for jobs to complete and/or error (15 minutes)</p></li><li><p>when they error, go scavenge through cloud watch and cloud trail logs (30 minutes)</p></li><li><p>Find suspected bug, fix local code, redeploy (20 minutes)</p></li></ul><p>And I&#8217;d end up repeating this cycle 4 or 5 times in a day in some cases. Stack that along with meetings in between, and the multiple context switching, and you can see where this is going&#8230;it ain&#8217;t a fun experience.</p><p>Thus, with this ECS setup, I wanted to locally test the scripts before sending them up to ensure I don&#8217;t have to get into that nasty debug cycle. The good news is, with the Duck, local testing against cloud assets such as S3 files is brain-dead easy; I setup separate bash scripts below to test both ETL python scripts locally:</p><ul><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.21-ecs_etl_part_2/scripts/run_cust_etl_local.sh">run customer etl locally</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.21-ecs_etl_part_2/scripts/run_orders_etl_local.sh">run orders etl locally</a></p></li></ul><p>Having the ability to run the ETL locally before deploying the jobs to the cloud is a true time saver. I can rapidly debug, ensure it runs correctly, and then simply deploy the scheduled tasks to AWS once I know they are correct.</p><h2>And If All Goes Well, We Get Nice Slack Notifications</h2><p>Here&#8217;s what happened when both jobs fired successfully on ECS:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!csbA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!csbA!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic 424w, /__u/substackcdn.com/image/fetch/$s_!csbA!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic 848w, /__u/substackcdn.com/image/fetch/$s_!csbA!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!csbA!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!csbA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic" width="838" height="750" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:750,&quot;width&quot;:838,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52468,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/198548200?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!csbA!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic 424w, /__u/substackcdn.com/image/fetch/$s_!csbA!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic 848w, /__u/substackcdn.com/image/fetch/$s_!csbA!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!csbA!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2505b7e1-3cb4-4ccc-9229-e102be29fe18_838x750.heic 1456w" sizes="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"><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"><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"><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"><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>All I gotta say about that is&#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!TyyL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!TyyL!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png 424w, /__u/substackcdn.com/image/fetch/$s_!TyyL!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png 848w, /__u/substackcdn.com/image/fetch/$s_!TyyL!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TyyL!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!TyyL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png" width="561" height="367" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67b80c31-4993-4245-8748-9b4c9734a758_561x367.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:367,&quot;width&quot;:561,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Winner Winner Chicken Dinner | Fast Play | Hoosier Lottery | Hoosier Lottery&quot;,&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="Winner Winner Chicken Dinner | Fast Play | Hoosier Lottery | Hoosier Lottery" title="Winner Winner Chicken Dinner | Fast Play | Hoosier Lottery | Hoosier Lottery" srcset="/__u/substackcdn.com/image/fetch/$s_!TyyL!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png 424w, /__u/substackcdn.com/image/fetch/$s_!TyyL!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png 848w, /__u/substackcdn.com/image/fetch/$s_!TyyL!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png 1272w, /__u/substackcdn.com/image/fetch/$s_!TyyL!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b80c31-4993-4245-8748-9b4c9734a758_561x367.png 1456w" sizes="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"><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"><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"><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"><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><h2>And Now The Really Fun Part&#8230;The Teardown</h2><p>One of the biggest value-props of setting up this full ETL deployment with Terraform is that destroying all those assets in AWS and minimizing your bill after testing is super easy. I setup a bash script to nuke all the AWS assets and this is what it looks like when you run it:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OPtD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OPtD!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic 424w, /__u/substackcdn.com/image/fetch/$s_!OPtD!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic 848w, /__u/substackcdn.com/image/fetch/$s_!OPtD!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!OPtD!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OPtD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic" width="714" height="399" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:399,&quot;width&quot;:714,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63657,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/198548200?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!OPtD!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic 424w, /__u/substackcdn.com/image/fetch/$s_!OPtD!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic 848w, /__u/substackcdn.com/image/fetch/$s_!OPtD!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!OPtD!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14a8744e-693f-48f5-a3c2-c28119aa6c66_714x399.heic 1456w" sizes="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"><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"><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"><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"><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>Here&#8217;s also a link to the teardown script</p><ul><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.21-ecs_etl_part_2/deploy/teardown_all.sh">teardown script</a></p></li></ul><p>That teardown script ran in about 30 seconds. Instead of me tediously clicking through web screens and hoping I remembered everything to delete, the script just handles it all for you.</p><h2>Conclusion</h2><p>I hope this updated article squares away any concerns on the modularity and scalability of this deployment pattern of AWS ETL jobs for DuckDB. </p><p><a href="https://github.com/mattmartin14/dream_machine/tree/main/substack/articles/2026.05.21-ecs_etl_part_2">THE CODE</a></p><p>Thanks for reading,<br>Matt</p>]]></content:encoded></item><item><title><![CDATA[Complete End-To-End Build of ETL Pipeline in AWS ]]></title><description><![CDATA[With ECS Fargate and The Duck.]]></description><link>https://performancede.substack.com/p/complete-end-to-end-build-of-etl</link><guid isPermaLink="false">https://performancede.substack.com/p/complete-end-to-end-build-of-etl</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Tue, 12 May 2026 13:36:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!a_GH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic" 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="/__u/substackcdn.com/image/fetch/$s_!a_GH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!a_GH!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic 424w, /__u/substackcdn.com/image/fetch/$s_!a_GH!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic 848w, /__u/substackcdn.com/image/fetch/$s_!a_GH!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!a_GH!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!a_GH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic" width="1402" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:403483,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!a_GH!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic 424w, /__u/substackcdn.com/image/fetch/$s_!a_GH!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic 848w, /__u/substackcdn.com/image/fetch/$s_!a_GH!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!a_GH!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b673d62-5ab7-4ed4-8563-46a11369bb55_1402x1122.heic 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"><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"><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"><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"><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 one has been a long time coming. I&#8217;ve mulled over several months if I had the patience and willingness to write this one and do a full scale tutorial. But I ultimately came to the conclusion that something like this is absolutely needed. For years now, we get sold by this idea from consultants that building ETL in AWS is &#8220;easy&#8221;. This brings me to this somewhat practical representation of reality:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IwyF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IwyF!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png 424w, /__u/substackcdn.com/image/fetch/$s_!IwyF!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png 848w, /__u/substackcdn.com/image/fetch/$s_!IwyF!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IwyF!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IwyF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png" width="1456" height="1099" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1099,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1135693,&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://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!IwyF!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png 424w, /__u/substackcdn.com/image/fetch/$s_!IwyF!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png 848w, /__u/substackcdn.com/image/fetch/$s_!IwyF!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IwyF!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152881e1-df4e-4335-a2f4-94e7dcd771e9_1460x1102.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"><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"><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"><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"><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>Memes aside, this article is going to walk us through a full build out of deploying a modular, scalable, and reusable ETL infra in AWS using ECS Fargate and DuckDB.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://performancede.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">Matt Martin's Substack 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></p><h2>What is ECS Fargate?</h2><p>ECS stands for &#8220;Elastic Container Service&#8221;; the &#8220;Fargate&#8221; part is just some random word that means more/less &#8216;<em>serverless</em>&#8217;. So why would we want to deploy a DuckDB ETL script in a docker container instead of something like AWS Glue? A few reasons:</p><ol><li><p>Glue is purpose-built for spark jobs; it will spin up a cluster of compute resources, which does not fit the bill for DuckDB and single-node execution; it is also generally more expensive because of this</p></li><li><p>Glue shell jobs (their single node execution service for python scripts) can only run on python 3.9, which last time I checked was at EOL as of October 2025; additionally, the more recent versions of DuckDB (1.4 and above) I believe don&#8217;t even deploy to 3.9</p></li><li><p>Glue shell jobs have limited CPU and ram; with ECS fargate, we can easily toggle all of that and scale up the CPU and RAM as needed</p></li><li><p>Deploying additional python packages in glue is a nightmare when your org doesn&#8217;t allow you to access the PYPI repo directly</p></li><li><p>With Fargate, you get to control how much CPU, RAM, and ephemeral disk space you want to provision with simple parameters</p></li><li><p>With Fargate, you get to control the contents of the docker image including the python version and any other packages you want to bundle with it</p></li></ol><h2>30,000 Ft. Architectural Overview</h2><p>What we will be deploying in this tutorial at the highest level is:</p><ol><li><p>a Docker image with python 3.13, DuckDB 1.5.2, and DuckDB extensions httpfs and aws <strong>pre-installed</strong></p></li><li><p>An ECS Task, which is analogous to an ETL pipeline; the task takes in a parameter of the S3 location for the script and then executes it against the docker image we have deployed up. This makes our docker image modular and reusable</p></li><li><p>A scheduler to run the job at a specific time of the day; this is done via AWS Event Bridge</p></li><li><p>An alert that posts to a Slack channel if our job succeeds or fails - this is key to monitoring and observability, which many teams neglect until they get yelled at by the business about a table that hasn&#8217;t updated in 3 weeks&#8230;</p></li></ol><p>You will notice up above I put in bold &#8220;pre-installed&#8221;; in many organizations, for security reasons, they do not allow jobs in the cloud to reach out to public repos to pull python packages; thus, we will pre-install them in the docker image so at run time, they are already there.</p><p>I hope at this high level, what I&#8217;m saying makes sense. Now we will dig into the actual low level part of this.</p><h2>Ground Level Architectural Overview</h2><p>This part is effectively what I refer to as the &#8220;AWS Legos&#8221; and this pulls back the curtain so you understand exactly how the sausage is made. To deploy a reusable docker image up to AWS to run DuckDB ETL, this is all we will have to deploy:</p><ol><li><p>An AWS ECS Cluster - this is just a logical grouping to hold tasks (its not like a spark cluster&#8230;no compute whatsoever)</p></li><li><p>An AWS ECS Task - The actual job</p></li><li><p>An ECR repository - to hold our docker image</p></li><li><p>an EventBridge Trigger - the scheduler to run the job</p></li><li><p>AWS Secrets manager entry for our Slack Webhook - to secure our Slack Webhook URL</p></li><li><p>AWS Cloud Watch Logs - to log the task as it runs; is equivalent to the stdout; helpful for debugging</p></li><li><p>An IAM role that can pull the ECR Image (Docker image)</p></li><li><p>An IAM role that can execute the ECS task</p></li><li><p>an IAM role to run the scheduler from EventBridge</p></li><li><p>The actual ETL script - gets deployed to an S3 bucket</p></li></ol><p>These assets will get deployed via the terraform code for our project located here: </p><ul><li><p><a href="https://github.com/mattmartin14/dream_machine/tree/main/substack/articles/2026.05.12-ecs_etl/terraform">TF Code</a></p></li></ul><p>But there is something important to consider when deploying Terraform code; you actually need a separate IAM role that you have already provisioned that has the ability to deploy all those assets mentioned above. I had previously made terraform role that I called my svc-infra-role; the template for it&#8217;s IAM policy can be found here:</p><ul><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.12-ecs_etl/misc/infra_role.json">IAM Infra Role Template</a></p></li></ul><p>Additionally, I had pre-created my S3 buckets vs. having the Terraform create them; the reason behind this is 2-fold:</p><ol><li><p>This allows me to test the script locally before deploying up to AWS; if the buckets didn&#8217;t already exist, the process would fail</p></li><li><p>I needed a &#8220;source&#8221; S3 bucket to pre-generate some dummy data that our ETL script could pull from.</p></li></ol><h2>The ETL Script</h2><p>Our ETL script is pretty straightforward. It does the following steps:</p><ol><li><p>runs an aggregation query against the source parquet file and stores the result in temp space</p></li><li><p>does 3 QA/validation checks: row counts, nulls, and checks where the total_price column is less than 100</p><ol><li><p>if any of these QA checks fail, then the process errors out and sends an error notification to slack</p></li></ol></li><li><p>If all QA checks pass, then the final file is written to the destination S3 bucket and a success notification is sent to Slack</p></li></ol><p>Here&#8217;s what the script looks like in all its glory:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!gjlf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!gjlf!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic 424w, /__u/substackcdn.com/image/fetch/$s_!gjlf!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic 848w, /__u/substackcdn.com/image/fetch/$s_!gjlf!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!gjlf!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!gjlf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic" width="1456" height="2901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2901,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:566905,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!gjlf!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic 424w, /__u/substackcdn.com/image/fetch/$s_!gjlf!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic 848w, /__u/substackcdn.com/image/fetch/$s_!gjlf!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!gjlf!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fb55493-d8e3-462f-b126-7e39dfc56ebe_2422x4826.heic 1456w" sizes="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"><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"><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"><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"><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><h2>The Source Dataset</h2><p>For our main ETL script to run, it has to pull its source dummy data. That was a simple DuckDB script that I ran locally using TPCH dataset, which looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4tpx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4tpx!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic 424w, /__u/substackcdn.com/image/fetch/$s_!4tpx!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic 848w, /__u/substackcdn.com/image/fetch/$s_!4tpx!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!4tpx!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4tpx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic" width="1456" height="1034" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1034,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103705,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4tpx!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic 424w, /__u/substackcdn.com/image/fetch/$s_!4tpx!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic 848w, /__u/substackcdn.com/image/fetch/$s_!4tpx!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!4tpx!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe1e756-e047-4fc2-86c0-5666c2364979_1830x1300.heic 1456w" sizes="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"><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"><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"><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"><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><h2>The Helpers Library</h2><p>You&#8217;ll notice in our ETL script that we are importing a module called &#8220;helpers&#8221;. This is a common pattern that I and many others use for ETL. Many of the reusable functions like sending slack notifications, uploading files to s3, etc., I will pre-bundle with the docker image. All the code from our helpers library can be found here:</p><ul><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.12-ecs_etl/helpers/common.py">helpers library code</a></p></li></ul><h2>The Docker Image</h2><p>Our Docker Image is pretty simple. It&#8217;s the amazonlinux 2023 image which comes pre-bundled with the AWS CLI; that is important since DuckDB needs to authenticate to various AWS services using the &#8220;credential_chain&#8221;. You will see that we are also installing python 3.13 on the base image, DuckDB (via the requirements file) and adding DuckDB extensions httpfs and aws; again as a friendly reminder, we are pre-installing the extensions with the assumption that once we deploy this ETL script to AWS, our security policy prevents us from reaching outside of our AWS network to public repositories. Here&#8217;s what the image ends up looking like:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Ho-o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Ho-o!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic 424w, /__u/substackcdn.com/image/fetch/$s_!Ho-o!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic 848w, /__u/substackcdn.com/image/fetch/$s_!Ho-o!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!Ho-o!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Ho-o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic" width="1456" height="421" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:421,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128698,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Ho-o!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic 424w, /__u/substackcdn.com/image/fetch/$s_!Ho-o!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic 848w, /__u/substackcdn.com/image/fetch/$s_!Ho-o!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!Ho-o!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F488fa433-58b5-40cc-923e-edfac8ae4696_3752x1084.heic 1456w" sizes="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"><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"><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"><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"><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 few other important things to note here:</p><ol><li><p>you can see we are copying our helpers folder into the main app folder. We then subsequently update the PYTHONPATH environment variable to include the app folder. This ensures that when our main ETL script imports the helpers module, it will find it and not error</p></li><li><p>Our command at the end is calling runner.py. This is the entry point for the container that runs a python script which does the following:</p><ol><li><p>takes in a param for the S3 ETL script path location</p></li><li><p>uses boto3 to download that ETL script into the docker image</p></li><li><p>executes the ETL script</p></li></ol></li></ol><p>The runner.py code looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!E5iH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!E5iH!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic 424w, /__u/substackcdn.com/image/fetch/$s_!E5iH!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic 848w, /__u/substackcdn.com/image/fetch/$s_!E5iH!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!E5iH!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!E5iH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic" width="1456" height="2169" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2169,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:282174,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!E5iH!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic 424w, /__u/substackcdn.com/image/fetch/$s_!E5iH!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic 848w, /__u/substackcdn.com/image/fetch/$s_!E5iH!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!E5iH!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43b0735d-8768-44ca-a4a9-f182e29e4570_1960x2920.heic 1456w" sizes="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"><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"><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"><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"><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, the beauty in all of this is that we can now pass into our image any DuckDB ETL script we have uploaded to S3, thus making this a reusable image.</p><h2>Observability and Notifications</h2><p>I setup a <a href="https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/">slack webhook</a> to handle posting notifications of the ETL script to a slack channel; slack web hooks essentially allow you to run an http POST call to an endpoint where you can send many types of messages; i&#8217;ve setup the webhook code to handle 3 types of notifications:</p><ul><li><p>success (green)</p></li><li><p>error (red)</p></li><li><p>basic info (blue dot)</p></li></ul><p>Below is a screenshot of how each of these types of notifications appear in Slack:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rfrS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rfrS!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic 424w, /__u/substackcdn.com/image/fetch/$s_!rfrS!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic 848w, /__u/substackcdn.com/image/fetch/$s_!rfrS!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!rfrS!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rfrS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic" width="1021" height="983" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:983,&quot;width&quot;:1021,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64751,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!rfrS!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic 424w, /__u/substackcdn.com/image/fetch/$s_!rfrS!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic 848w, /__u/substackcdn.com/image/fetch/$s_!rfrS!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!rfrS!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a1fb45-e904-4476-ba3c-d6e71087726e_1021x983.heic 1456w" sizes="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"><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"><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"><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"><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 thing to be careful about though is exposing your webhook url; if anyone gets a hold of it, they can start posting to it; thus, to secure the webhook URL, I simply loaded it to AWS&#8217;s secret&#8217;s manager as a simple key/val pair like in the screenshot below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!oNYw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!oNYw!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic 424w, /__u/substackcdn.com/image/fetch/$s_!oNYw!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic 848w, /__u/substackcdn.com/image/fetch/$s_!oNYw!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!oNYw!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!oNYw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic" width="1456" height="662" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:662,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51719,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!oNYw!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic 424w, /__u/substackcdn.com/image/fetch/$s_!oNYw!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic 848w, /__u/substackcdn.com/image/fetch/$s_!oNYw!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!oNYw!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20a90827-6425-4b26-a503-5d73917fb6bb_1644x748.heic 1456w" sizes="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"><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"><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"><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"><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 actual slack notification python code simply pulls down the secured URL from secrets manager at runtime using the boto3 api.</p><h2>Deployment</h2><p>To deploy all of these assets, we need to run the following in order:</p><ol><li><p>Terraform code to deploy the assets. This is done via in our terminal using terraform apply and logging into our infra aws role that I provided details on above</p></li><li><p>Once the terraform is deployed, we then need to build and deploy our Docker image up to our AWS ECR repository. I have a simple bash script called &#8220;build_and_deploy.sh&#8221; located <a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.12-ecs_etl/docker/build_and_push.sh">here</a></p></li></ol><p>Assuming everything was all rainbows and unicorns, we should be able to see the following assets in AWS:</p><h3>The ECR Image</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!km9F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!km9F!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic 424w, /__u/substackcdn.com/image/fetch/$s_!km9F!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic 848w, /__u/substackcdn.com/image/fetch/$s_!km9F!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!km9F!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!km9F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic" width="1456" height="741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:741,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75630,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!km9F!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic 424w, /__u/substackcdn.com/image/fetch/$s_!km9F!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic 848w, /__u/substackcdn.com/image/fetch/$s_!km9F!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!km9F!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe16419c-5af9-4bdc-b230-062ebcf18d6e_1861x947.heic 1456w" sizes="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"><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"><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"><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"><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>That image is tiny&#8230;only 133MB in size</p><h3>The ECS Task</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!TcmF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!TcmF!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic 424w, /__u/substackcdn.com/image/fetch/$s_!TcmF!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic 848w, /__u/substackcdn.com/image/fetch/$s_!TcmF!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!TcmF!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!TcmF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic" width="1456" height="741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:741,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99522,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!TcmF!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic 424w, /__u/substackcdn.com/image/fetch/$s_!TcmF!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic 848w, /__u/substackcdn.com/image/fetch/$s_!TcmF!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!TcmF!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f48b555-d108-4c18-9a17-5bbc72f50bdc_1861x947.heic 1456w" sizes="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"><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"><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"><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"><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><h3>The IAM Roles</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!fxp0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!fxp0!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic 424w, /__u/substackcdn.com/image/fetch/$s_!fxp0!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic 848w, /__u/substackcdn.com/image/fetch/$s_!fxp0!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!fxp0!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!fxp0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic" width="1322" height="481" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:481,&quot;width&quot;:1322,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:67687,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!fxp0!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic 424w, /__u/substackcdn.com/image/fetch/$s_!fxp0!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic 848w, /__u/substackcdn.com/image/fetch/$s_!fxp0!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!fxp0!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cef0001-5767-4f49-b8f2-5f990106d9bb_1322x481.heic 1456w" sizes="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"><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"><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"><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"><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><h3>The Scheduler</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SzAy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SzAy!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic 424w, /__u/substackcdn.com/image/fetch/$s_!SzAy!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic 848w, /__u/substackcdn.com/image/fetch/$s_!SzAy!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!SzAy!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SzAy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100129,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!SzAy!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic 424w, /__u/substackcdn.com/image/fetch/$s_!SzAy!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic 848w, /__u/substackcdn.com/image/fetch/$s_!SzAy!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!SzAy!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c60e51-14ea-44fa-9668-4e651b1b0e1f_1861x973.heic 1456w" sizes="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"><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"><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"><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"><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><h2>Ok&#8230;This Was A Lot; Now How Do I Run This?</h2><p>We can either wait for the EventBridge scheduler to kick off tomorrow morning, or we can manually start the ECS task with this simple bash script:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MA-O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MA-O!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic 424w, /__u/substackcdn.com/image/fetch/$s_!MA-O!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic 848w, /__u/substackcdn.com/image/fetch/$s_!MA-O!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!MA-O!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MA-O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic" width="1456" height="513" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:513,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152619,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!MA-O!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic 424w, /__u/substackcdn.com/image/fetch/$s_!MA-O!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic 848w, /__u/substackcdn.com/image/fetch/$s_!MA-O!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!MA-O!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a58e46-4948-46ed-a524-05502ca307be_2768x976.heic 1456w" sizes="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"><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"><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"><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"><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>Like I had mentioned before, ECS Fargate is very fast at spinning up and will launch the job in a matter of about 30 seconds. And if all goes well, we will get a beautiful slack notification like the following:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!CwW6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CwW6!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png 424w, /__u/substackcdn.com/image/fetch/$s_!CwW6!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png 848w, /__u/substackcdn.com/image/fetch/$s_!CwW6!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CwW6!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CwW6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png" width="796" height="410" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:410,&quot;width&quot;:796,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60985,&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://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!CwW6!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png 424w, /__u/substackcdn.com/image/fetch/$s_!CwW6!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png 848w, /__u/substackcdn.com/image/fetch/$s_!CwW6!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CwW6!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f93349b-2b4a-4506-bb32-bcca7ff98b93_796x410.png 1456w" sizes="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"><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"><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"><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"><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 can also go check our cloud watch logs and we should see some good stdout info messages there as well:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!p1xy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!p1xy!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic 424w, /__u/substackcdn.com/image/fetch/$s_!p1xy!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic 848w, /__u/substackcdn.com/image/fetch/$s_!p1xy!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!p1xy!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!p1xy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic" width="1456" height="591" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:591,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139335,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!p1xy!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic 424w, /__u/substackcdn.com/image/fetch/$s_!p1xy!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic 848w, /__u/substackcdn.com/image/fetch/$s_!p1xy!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!p1xy!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feab7178b-ce82-43e5-8921-f2c9f6a838c0_1845x749.heic 1456w" sizes="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"><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"><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"><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"><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></p><p>Additionally, we can run this simple validation script that uses DuckDB to read the results that were written to our S3 target from the job:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!VHLq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!VHLq!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic 424w, /__u/substackcdn.com/image/fetch/$s_!VHLq!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic 848w, /__u/substackcdn.com/image/fetch/$s_!VHLq!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!VHLq!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!VHLq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic" width="1440" height="904" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:904,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64064,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196890356?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!VHLq!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic 424w, /__u/substackcdn.com/image/fetch/$s_!VHLq!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic 848w, /__u/substackcdn.com/image/fetch/$s_!VHLq!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!VHLq!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5927a124-9c8b-4ed9-8ff7-9688967a2165_1440x904.heic 1456w" sizes="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"><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"><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"><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"><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><h1><em><strong>&#8230;And congrats, you have reached the end of the monopoly board and have officially deployed a modular, scalable, reusable ETL infrastructure suite on AWS.</strong></em></h1><h2>I Know That Was A Lot - There Is A Silver Lining</h2><p>We just covered nearly everything under the sun that is required for deploying ETL to AWS that gives you a scalable and modular setup. You could have taken numerous shortcuts such as:</p><ol><li><p>one IAM role to rule them all that has blanket access to everything</p><ol><li><p>this is known as &#8220;god mode&#8221; and is highly discouraged due to its security implications if it ever fell into the wrong hands</p></li></ol></li><li><p>bake the ETL script into the image, thus eliminating the need for the launcher code that downloads the script</p><ol><li><p>this would make the image though built for single use at that point and no longer modular to accept any script we want to run</p></li></ol></li><li><p>just throw all helper functions and main etl into one giant script and pop into glue</p><ol><li><p>You&#8217;d still have to grapple with the ability of the glue job to import python packages if you don&#8217;t have open internet access, its scaling issues, and that it runs on python 3.9.</p></li></ol></li></ol><p>Therefore, I think the setup we just built hits the sweet spot; and for future deployments, you will not have to deploy the Docker Image, ECR repo, nor the ECS cluster; and you might even be able to reuse some of the IAM roles that you had already deployed.</p><h2>The Financials</h2><p>Believe it or not, the cost for me to run and deploy this entire demo was just shy of <em><strong>50 cents</strong></em>; of course, I did destroy the AWS assets after I finish the demo so I wouldn&#8217;t keep incurring a bill; but for what its worth, ECS Fargate tasks are relatively cheap compared to Glue; additionally, our ECR image, which was about 133MB in size, would cost l<a href="https://aws.amazon.com/ecr/pricing/">ess than 10 cents a month</a> to store in ECR.   </p><h2>Further Musing</h2><p>If you made it this far, you can see that there was a lot involved in this tutorial. And this, again, is why many companies are moving to data management platforms such as Databricks and Snowflake; they offer more seamless integrations and you can spend more time focusing on the business outcomes vs. the infrastructure. However, if you fork the code that I demonstrated today and applied a little elbow grease to fit it to your orgs standards, this will get you a simple and repeatable deployment pattern that scales very well.</p><h2>ALL THE CODE</h2><ul><li><p><a href="https://github.com/mattmartin14/dream_machine/tree/main/substack/articles/2026.05.12-ecs_etl">main repo link</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/tree/main/substack/articles/2026.05.12-ecs_etl/docker">docker stuff</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.12-ecs_etl/scripts/sales_etl.py">main etl script</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.12-ecs_etl/scripts/pre_gen_data.py">pre-gen data script</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.12-ecs_etl/scripts/validate.py">post run validation</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/blob/main/substack/articles/2026.05.12-ecs_etl/helpers/common.py">helpers lib</a></p></li><li><p><a href="https://github.com/mattmartin14/dream_machine/tree/main/substack/articles/2026.05.12-ecs_etl/terraform">terraform</a></p></li></ul><h2>And What You Really Cared About? The Duck Wizard Image Prompt</h2><p>Let&#8217;s face it; if you&#8217;ve gotten this far on this article, what you really cared was the prompt I gave ChatGPT to generate the wizard duck at the beginning of this article. Here it is:</p><div class="pullquote"><p>an image of a duck dressed as a wizard with its hands up in the air and a cloud of sparkle and dust that shows wizzing around various aws services such as S3, ECS Fargate, ECR, CloudWatch, EventBridge, and SecretsManager; the duck appears to be concentrating hard and casting a spell; in front of him is a black caldron that all this sparkle and dust is flowing into; the caldron has neon green ooze boiling; the banner above all this says "DuckDB AWS ETL"; have a few rainbows and unicorns flying in the background</p></div><p>Thanks for reading,<br>Matt</p>]]></content:encoded></item><item><title><![CDATA[I Tried the C Client For DuckDB]]></title><description><![CDATA[Purely out of curiosity]]></description><link>https://performancede.substack.com/p/i-tried-the-c-client-for-duckdb</link><guid isPermaLink="false">https://performancede.substack.com/p/i-tried-the-c-client-for-duckdb</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Mon, 04 May 2026 11:05:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!t9t5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic" 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="/__u/substackcdn.com/image/fetch/$s_!t9t5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!t9t5!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic 424w, /__u/substackcdn.com/image/fetch/$s_!t9t5!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic 848w, /__u/substackcdn.com/image/fetch/$s_!t9t5!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!t9t5!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!t9t5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic" width="1402" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:337050,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/196297341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!t9t5!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic 424w, /__u/substackcdn.com/image/fetch/$s_!t9t5!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic 848w, /__u/substackcdn.com/image/fetch/$s_!t9t5!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!t9t5!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37453a72-9e4c-4221-b0bd-fcf4c7baebcd_1402x1122.heic 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"><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"><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"><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"><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>From time to time, I pay homage to the language that started it all; the one that runs most of the world still today - good ole C code. If you started off in your programming journey with a language like Python, then trying to write in C can be somewhat daunting. But once you unpack the language, it&#8217;s actually very very simple. I think where most people&#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/i-tried-the-c-client-for-duckdb">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What's a Predicate Pushdown?]]></title><description><![CDATA[And why does it matter?]]></description><link>https://performancede.substack.com/p/whats-a-predicate-pushdown</link><guid isPermaLink="false">https://performancede.substack.com/p/whats-a-predicate-pushdown</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Tue, 28 Apr 2026 13:43:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5ysL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic" 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="/__u/substackcdn.com/image/fetch/$s_!5ysL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!5ysL!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic 424w, /__u/substackcdn.com/image/fetch/$s_!5ysL!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic 848w, /__u/substackcdn.com/image/fetch/$s_!5ysL!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!5ysL!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!5ysL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic" width="1402" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:220908,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/195743359?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!5ysL!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic 424w, /__u/substackcdn.com/image/fetch/$s_!5ysL!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic 848w, /__u/substackcdn.com/image/fetch/$s_!5ysL!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!5ysL!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d042197-0ed2-4972-b27a-97799c8709f2_1402x1122.heic 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"><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"><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"><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"><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 you&#8217;ve been in data engineering long enough, you&#8217;ve probably heard the phrase &#8220;predicate pushdown&#8221; for query optimization. But what exactly does that mean? How is it getting used in query engines today? And what are the implications of this idea?</p><div class="pullquote"><p><strong>Predicate Pushdown</strong></p><p>In simple terms, predicate pushdown applies a query&#8217;s set of filter(s) as close to the d&#8230;</p></div>
      <p>
          <a href="/__u/performancede.substack.com/p/whats-a-predicate-pushdown">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AWS Athena and ETL Part 2]]></title><description><![CDATA[To Satisfy the purists]]></description><link>https://performancede.substack.com/p/aws-athena-and-etl-part-2</link><guid isPermaLink="false">https://performancede.substack.com/p/aws-athena-and-etl-part-2</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Mon, 13 Apr 2026 12:17:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nUla!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic" 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="/__u/substackcdn.com/image/fetch/$s_!nUla!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!nUla!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!nUla!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!nUla!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!nUla!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!nUla!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic&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;:270752,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/194061840?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!nUla!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!nUla!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!nUla!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!nUla!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91471c85-aca4-419d-9494-823cbb627cfe_1536x1024.heic 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"><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"><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"><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"><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 wrote <a href="/__u/performancede.substack.com/p/aws-athena-cli-for-etl">an article last week</a> that I thought would spark some interest. You can use AWS Athena as a serverless and cheap ETL engine with nothing more than some bash scripts. I&#8217;ve actually started using this approach in some projects I&#8217;ve been working on that just need to manipulate some json files sitting in s3.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://performancede.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">Matt Martin's Substack is a reader-supporte&#8230;</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>
          <a href="/__u/performancede.substack.com/p/aws-athena-and-etl-part-2">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AWS Athena CLI for ETL?]]></title><description><![CDATA[A decent cheat code]]></description><link>https://performancede.substack.com/p/aws-athena-cli-for-etl</link><guid isPermaLink="false">https://performancede.substack.com/p/aws-athena-cli-for-etl</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Fri, 10 Apr 2026 13:11:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!T2qX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic" 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="/__u/substackcdn.com/image/fetch/$s_!T2qX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!T2qX!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!T2qX!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!T2qX!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!T2qX!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!T2qX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic&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;:333855,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/193788016?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!T2qX!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!T2qX!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!T2qX!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!T2qX!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3682dc7e-5685-43b5-9693-5e2183c6a507_1536x1024.heic 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"><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"><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"><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"><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>Something I&#8217;ve come to like lately is using CLI&#8217;s more than python, especially for AWS and DuckDB. There is just something gratifying about a CLI&#8217;s simplicity; With that being said, today we are going to talk about a common problem that rears its ugly head in the ETL world and how to take a &#8216;poormans&#8217; ETL approach to it using AWS Athena. </p><p>The problem we &#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/aws-athena-cli-for-etl">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[DuckDB 1.5 And Iceberg]]></title><description><![CDATA[AWS Glue Catalog Gets A Facelift]]></description><link>https://performancede.substack.com/p/duckdb-15-and-iceberg</link><guid isPermaLink="false">https://performancede.substack.com/p/duckdb-15-and-iceberg</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Fri, 13 Mar 2026 12:36:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aWG4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic" 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="/__u/substackcdn.com/image/fetch/$s_!aWG4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!aWG4!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!aWG4!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!aWG4!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!aWG4!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!aWG4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:342898,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/190826568?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!aWG4!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!aWG4!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!aWG4!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!aWG4!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3051514d-25e5-4155-9e57-eac16f3fcb8c_1024x1536.heic 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"><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"><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"><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"><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>For a while now, the DuckDB Iceberg extension has had great support for AWS S3 Tables (AWS&#8217;s managed Iceberg table experience); you can perform basic CRUD operations such as create a table, insert, update, and delete. I wrote about this a few months ago <a href="/__u/performancede.substack.com/p/aws-s3-tables-and-duckdb">here</a>; but for many that have been on the AWS stack for a while, you all know well that S3 Tables are &#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/duckdb-15-and-iceberg">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[DuckLake and BI Tools]]></title><description><![CDATA[Yep, it Works]]></description><link>https://performancede.substack.com/p/ducklake-and-bi-tools</link><guid isPermaLink="false">https://performancede.substack.com/p/ducklake-and-bi-tools</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Fri, 27 Feb 2026 16:19:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6zIi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic" 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="/__u/substackcdn.com/image/fetch/$s_!6zIi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6zIi!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!6zIi!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!6zIi!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!6zIi!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6zIi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157331,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/189372680?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!6zIi!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!6zIi!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!6zIi!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!6zIi!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b15edf4-3dbf-4aef-90d2-158e2df79fce_1024x1024.heic 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"><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"><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"><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"><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 think it&#8217;s no secret at this point, but if you saw my post the other day or the LinkedIn announcement, you&#8217;d know that Alex and I are hard at work on the O&#8217;Reilly book titled &#8220;DuckLake - The Definitive Guide&#8221;. With that being said, when Ducklake first came out in 2025, I was amazed at how easy it was to get up and running; but like most data warehousi&#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/ducklake-and-bi-tools">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Secret Is Out]]></title><description><![CDATA[I'm writing a book]]></description><link>https://performancede.substack.com/p/the-secret-is-out</link><guid isPermaLink="false">https://performancede.substack.com/p/the-secret-is-out</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Mon, 23 Feb 2026 20:15:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Wb2k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic" 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="/__u/substackcdn.com/image/fetch/$s_!Wb2k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Wb2k!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic 424w, /__u/substackcdn.com/image/fetch/$s_!Wb2k!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic 848w, /__u/substackcdn.com/image/fetch/$s_!Wb2k!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!Wb2k!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Wb2k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic" width="1456" height="1912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:464631,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/188943760?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Wb2k!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic 424w, /__u/substackcdn.com/image/fetch/$s_!Wb2k!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic 848w, /__u/substackcdn.com/image/fetch/$s_!Wb2k!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!Wb2k!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57b0c942-e336-42d1-82ee-436d3ac928f6_2100x2757.heic 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"><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"><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"><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"><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 haven&#8217;t written on Substack in over a month, and if you saw the announcement this morning via LinkedIn, you&#8217;d understand why. I&#8217;m currently working on a book with Alex Monahan that we hope to roll out by the end of the year. I&#8217;ve never written a book before so this will be a major shift in how I approach projects. I do plan to still write here from ti&#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/the-secret-is-out">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[MotherDuck and The Hybrid Cloud]]></title><description><![CDATA[Making Big Data Look Small Across the Pond]]></description><link>https://performancede.substack.com/p/motherduck-and-the-hybrid-cloud</link><guid isPermaLink="false">https://performancede.substack.com/p/motherduck-and-the-hybrid-cloud</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Tue, 20 Jan 2026 13:44:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dvKK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic" 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="/__u/substackcdn.com/image/fetch/$s_!dvKK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dvKK!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!dvKK!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!dvKK!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!dvKK!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dvKK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165065,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/183130314?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dvKK!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!dvKK!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!dvKK!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!dvKK!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6758a2ec-3f41-40d6-9ee0-7ab59765d54d_1024x1536.heic 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"><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"><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"><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"><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 on a roll lately with <a href="https://motherduck.com">MotherDuck</a>, who is the sponsor of today&#8217;s article:</p>
      <p>
          <a href="/__u/performancede.substack.com/p/motherduck-and-the-hybrid-cloud">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Mixing Motherduck With Other Metastores]]></title><description><![CDATA[The Need is Definitely Out There]]></description><link>https://performancede.substack.com/p/mixing-motherduck-with-other-metastores</link><guid isPermaLink="false">https://performancede.substack.com/p/mixing-motherduck-with-other-metastores</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Wed, 14 Jan 2026 18:36:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8R-v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic" 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="/__u/substackcdn.com/image/fetch/$s_!8R-v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!8R-v!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!8R-v!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!8R-v!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!8R-v!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!8R-v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic&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;:109933,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/183130347?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!8R-v!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!8R-v!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!8R-v!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!8R-v!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc448bfd0-fea5-4878-a122-cc0708bb8811_1536x1024.heic 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"><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"><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"><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"><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 live in a world where nothing is ever perfect; especially in the data engineering space, we are tasked quite often with solving integration problems where we have multiple catalogs and multiple data stores floating around the ether; to further complicate things, these catalogs can also be in different clouds or managed services. I know most of you re&#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/mixing-motherduck-with-other-metastores">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Multi-Cloud Lakehouse with MotherDuck]]></title><description><![CDATA[To bring together all the madness]]></description><link>https://performancede.substack.com/p/multi-cloud-lakehouse-with-motherduck</link><guid isPermaLink="false">https://performancede.substack.com/p/multi-cloud-lakehouse-with-motherduck</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Wed, 07 Jan 2026 13:17:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-5Rw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic" 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="/__u/substackcdn.com/image/fetch/$s_!-5Rw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-5Rw!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!-5Rw!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!-5Rw!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!-5Rw!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-5Rw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic&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;:255080,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/183130282?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-5Rw!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic 424w, /__u/substackcdn.com/image/fetch/$s_!-5Rw!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic 848w, /__u/substackcdn.com/image/fetch/$s_!-5Rw!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!-5Rw!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd1d0f23-792b-4acb-9b43-07abeed654d0_1536x1024.heic 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"><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"><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"><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"><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 live in a world these days where we have many choices abound for data services; the 3 predominant cloud providers are no doubt AWS, GCP and Azure; and what&#8217;s really interesting about the current landscape is that many orgs find themselves in situations where they have built up apps and data stores that span across more than just one cloud; this is us&#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/multi-cloud-lakehouse-with-motherduck">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Building A Meaningful Semantic Layer]]></title><description><![CDATA[For My Concept 2 Rowing Data]]></description><link>https://performancede.substack.com/p/building-a-meaningful-semantic-layer</link><guid isPermaLink="false">https://performancede.substack.com/p/building-a-meaningful-semantic-layer</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Mon, 29 Dec 2025 14:59:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZJE7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic" 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="/__u/substackcdn.com/image/fetch/$s_!ZJE7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ZJE7!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!ZJE7!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!ZJE7!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!ZJE7!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ZJE7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:259077,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/182815755?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ZJE7!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!ZJE7!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!ZJE7!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!ZJE7!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6f86ec6-dd87-4850-aa1a-cdb185a613ac_1024x1536.heic 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"><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"><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"><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"><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 you have readily followed me on LinkedIn, you will notice from time to time, I drop some nuggets on my rowing journey. I would not consider myself an &#8220;elite&#8221; rower by any means, but I have logged well over 1M meters now on my Concept 2 rower and have a pretty good clue of what direction is up. Plus, the few times that I have ranked my workouts in the&#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/building-a-meaningful-semantic-layer">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AWS S3 Tables and Duckdb]]></title><description><![CDATA[Something is Cookin']]></description><link>https://performancede.substack.com/p/aws-s3-tables-and-duckdb</link><guid isPermaLink="false">https://performancede.substack.com/p/aws-s3-tables-and-duckdb</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Wed, 19 Nov 2025 13:34:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5E2b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic" 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="/__u/substackcdn.com/image/fetch/$s_!5E2b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!5E2b!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!5E2b!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!5E2b!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!5E2b!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!5E2b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:497067,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/179350166?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!5E2b!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!5E2b!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!5E2b!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!5E2b!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8287034-15ba-4a50-8e45-7e577d3557b0_1024x1536.heic 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"><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"><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"><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"><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></p><p>It&#8217;s been over a month since I last wrote an article. I&#8217;ve been on a bit of a hiatus, but I have some good things coming down the pipeline. Today though, we will be looking at the current state of AWS S3 Tables and Duckdb.</p><p>If you rewind the clock a few months back, Duckdb had a monumental release (1.4) which came with the ability to write to Iceberg tabl&#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/aws-s3-tables-and-duckdb">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Spark Config Madness]]></title><description><![CDATA[Will it Ever Stop?]]></description><link>https://performancede.substack.com/p/spark-config-madness</link><guid isPermaLink="false">https://performancede.substack.com/p/spark-config-madness</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Mon, 13 Oct 2025 14:59:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ks2u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic" 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="/__u/substackcdn.com/image/fetch/$s_!ks2u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ks2u!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!ks2u!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!ks2u!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!ks2u!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ks2u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:245276,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/176044688?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ks2u!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic 424w, /__u/substackcdn.com/image/fetch/$s_!ks2u!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic 848w, /__u/substackcdn.com/image/fetch/$s_!ks2u!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!ks2u!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff618a00a-e8f8-4fa1-bdb4-2b675d34eee0_1024x1536.heic 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"><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"><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"><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"><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></p><p>I&#8217;ve been on a spark config kick lately. A week or so ago, I <a href="/__u/performancede.substack.com/p/aws-glue-iceberg-rest-catalog">published a post</a> showing how to config Spark for the AWS Glue Iceberg Rest endpoint. Overall, the config is not too complex, but does require a ton of inputs. Comparing that to the duck, you see a stark contrast.</p><p>However, after working through that article, I was somewhat disappointed that the &#8230;</p>
      <p>
          <a href="/__u/performancede.substack.com/p/spark-config-madness">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Duckdb and AWS Glue Catalog]]></title><description><![CDATA[Working with Iceberg and non-iceberg tables in harmony]]></description><link>https://performancede.substack.com/p/duckdb-and-aws-glue-catalog</link><guid isPermaLink="false">https://performancede.substack.com/p/duckdb-and-aws-glue-catalog</guid><dc:creator><![CDATA[Matt Martin]]></dc:creator><pubDate>Thu, 02 Oct 2025 13:54:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NTKR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic" 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="/__u/substackcdn.com/image/fetch/$s_!NTKR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!NTKR!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic 424w, /__u/substackcdn.com/image/fetch/$s_!NTKR!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic 848w, /__u/substackcdn.com/image/fetch/$s_!NTKR!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!NTKR!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_webp, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!NTKR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic" width="1189" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:795,&quot;width&quot;:1189,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:129856,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://performancede.substack.com/i/175105148?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!NTKR!, /__u/performancede.substack.com/w_424, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic 424w, /__u/substackcdn.com/image/fetch/$s_!NTKR!, /__u/performancede.substack.com/w_848, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic 848w, /__u/substackcdn.com/image/fetch/$s_!NTKR!, /__u/performancede.substack.com/w_1272, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic 1272w, /__u/substackcdn.com/image/fetch/$s_!NTKR!, /__u/performancede.substack.com/w_1456, /__u/performancede.substack.com/c_limit, /__u/performancede.substack.com/f_auto, /__u/performancede.substack.com/q_auto:good, /__u/performancede.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49858e82-940c-432d-975c-ed29a773b50a_1189x795.heic 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"><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"><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"><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"><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 has been making some major inroads over the past few months to advance their integrations with Iceberg and AWS. One can simply run the following now to map any iceberg tables from an AWS account into duckdb (no fancy s3 tables required):</p>
      <p>
          <a href="/__u/performancede.substack.com/p/duckdb-and-aws-glue-catalog">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>