{"templateName":"blog-page","cssClassNames":"blog-page page basicpage summit-page","allowedRenditionsWidth":["320","480","640","768","960","1200","1440","1920"],"language":"en","description":"Discover how Thrive Learning used custom incrementalization to cut Snowflake Dynamic Table auto-clustering costs by 99% while keeping lineage intact.","title":"Custom Incrementalization for Dynamic Tables | Snowflake","analyticsPageType":"homepage","analyticsCategory":"general","analyticsSubCategory":"","excludeFromAnalytics":false,":mappedPath":"/en/blog/thrive-dynamic-table-costs-custom-incremental/",":type":"snowflake-site/components/structure/page",":items":{"root":{"columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"experiencefragment-banner":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-sub-header":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-pre-footer":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-header":"aem-GridColumn aem-GridColumn--default--12","markup_editor-table":"aem-GridColumn aem-GridColumn--default--12","responsivegrid":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-footer":"aem-GridColumn aem-GridColumn--default--12","markup_editor":"aem-GridColumn aem-GridColumn--default--12","container_47873732":"aem-GridColumn aem-GridColumn--default--12"},":items":{"experiencefragment-banner":{"id":"experiencefragment-f1c1e92418","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/pushdown-banner-blank/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/pushdown-banner-blank.xfmodel.json"},"experiencefragment-header":{"id":"experiencefragment-9fafa1a566","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master.xfmodel.json","languageNavPath":"/content/snowflake-site/global/en/blog/thrive-dynamic-table-costs-custom-incremental.languagenav.json","appliedCssClassNames":"snowflake-sticky-nav-host"},"experiencefragment-sub-header":{"id":"experiencefragment-ceca282f43","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/sub-navigation/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/sub-navigation/master.xfmodel.json"},"responsivegrid":{"columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"container_breadcrumb":"aem-GridColumn aem-GridColumn--default--12","container_main_content":"aem-GridColumn aem-GridColumn--default--12"},":items":{"container_breadcrumb":{"layout":"RESPONSIVE_GRID","columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"breadcrumb":"aem-GridColumn aem-GridColumn--default--12"},"id":"blog-page-breadcrumb-indentation",":type":"snowflake-site/components/container",":items":{"breadcrumb":{"id":"breadcrumb-6400476d94","breadcrumbItems":[{"title":"Blog","path":"/en/blog/","active":false},{"title":"How Thrive Learning Improved Dynamic Tables Price-Performance by 2X with Custom Incrementalization","path":"/en/blog/thrive-dynamic-table-costs-custom-incremental/","active":false}],":type":"snowflake-site/components/blog/breadcrumb"}},":itemsOrder":["breadcrumb"],"appliedCssClassNames":"snowflake-container"},"container_main_content":{"layout":"RESPONSIVE_GRID","columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"flexible_column_container":"aem-GridColumn aem-GridColumn--default--12","related_content":"aem-GridColumn aem-GridColumn--default--12"},"id":"main-content",":type":"snowflake-site/components/container",":items":{"flexible_column_container":{"id":"flexible-column-container-43600a1eb2","propertiesId":"snowflake-blog-template-main-container","type":"2-column-60-40","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"none","bottomPadding":"none","spaceBetween":"none","reverseOnMobile":true,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-3bc35a3f70",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"container_hero":{"layout":"RESPONSIVE_GRID","columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"blog_hero":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-f14bcb6939",":type":"snowflake-site/components/container",":items":{"blog_hero":{"id":"blog-hero-a061dde9b2","linkedInShareUrl":"https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.snowflake.com%2Fcontent%2Fsnowflake-site%2Fglobal%2Fen%2Fblog%2Fthrive-dynamic-table-costs-custom-incremental&title=How+Thrive+Learning+Improved+Dynamic+Tables+Price-Performance+by+2X+with+Custom+Incrementalization","twitterShareUrl":"https://x.com/intent/post?url=https%3A%2F%2Fwww.snowflake.com%2Fcontent%2Fsnowflake-site%2Fglobal%2Fen%2Fblog%2Fthrive-dynamic-table-costs-custom-incremental&text=How+Thrive+Learning+Improved+Dynamic+Tables+Price-Performance+by+2X+with+Custom+Incrementalization","facebookShareUrl":"https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.snowflake.com%2Fcontent%2Fsnowflake-site%2Fglobal%2Fen%2Fblog%2Fthrive-dynamic-table-costs-custom-incremental","showClaude":true,"showChatGpt":true,"authors":[{"authorImage":{"id":"image-a0247dc95c","height":"336","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--5e38aa38-7ad0-4150-8fef-8b8920d74c27/alex-tasioulis.png?quality=85&preferwebp=true","lazyEnabled":true,"width":"340",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-cfd74a5dbe","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/alex-tasioulis/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Alex Tasioulis"}},{"authorImage":{"id":"image-6e78a8ef12","height":"386","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--001f2b34-70a5-49f3-9623-b9d75247a1c1/rob-howe-.png?quality=85&preferwebp=true","lazyEnabled":true,"width":"424",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-627c2ba6ab","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/rob-howe/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Rob Howe"}}],"image":{"id":"image-d225e0f7f8","height":"720","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--7b845546-6c77-4403-9cf2-2c2ef9a9763c/07-finserv.jpg?quality=85&preferwebp=true","lazyEnabled":true,"width":"1680",":type":"snowflake-site/components/image"},"timeToRead":"5","publicationDate":"JUL 28, 2026","title":{"lines":["How Thrive Learning Improved Dynamic Tables Price-Performance by 2X with Custom Incrementalization"],"type":"heading2",":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/blog/blog-hero"}},":itemsOrder":["blog_hero"]},"responsivegrid_content":{"columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"blog_text_187190632":"aem-GridColumn aem-GridColumn--default--12","blog_text_1349023181":"aem-GridColumn aem-GridColumn--default--12","blog_text":"aem-GridColumn aem-GridColumn--default--12","blog_text_1031269132":"aem-GridColumn aem-GridColumn--default--12","quote_item":"aem-GridColumn aem-GridColumn--default--12","blog_text_530813114":"aem-GridColumn aem-GridColumn--default--12","quote_item_1724348700":"aem-GridColumn aem-GridColumn--default--12","blog_text_1403105781":"aem-GridColumn aem-GridColumn--default--12"},"appliedCssClassNames":"snowflake-layout-container-inner-padding-small",":items":{"blog_text":{"id":"blog-text-86a185bacb","text":"\u003Cp\u003E\u003Ci\u003EThis post was written by the data engineering team at Thrive Learning. The views and experiences expressed are their own.\u003C/i\u003E\u003C/p\u003E\r\n\u003Cp\u003EBefore Snowflake, Thrive's legacy analytics ran on a mix of scheduled batch jobs and MongoDB change streams triggering refreshes on a schedule. When the team moved to Snowflake, they built on Dynamic Tables from the start, driven by a core requirement to sync and transform platform data continuously as changes arrived, rather than in delayed batches.\u003C/p\u003E\r\n\u003Cp\u003EThat freshness isn't a back-office nicety; it's part of the product. Thrive's Analyse suite (the ability for customers to explore all their learning data) is a core part of what the Thrive platform offers. We've also noticed that better performance and data freshness translate directly into customer satisfaction and competitive strength in sales bids. Customers don't buy analytics as a separate line item, but its quality directly influences whether Thrive wins and retains business. More recently, that same data and Dynamic Table foundation underpins Thrive's first paid add-on product, Analyse with AI, which layers AI on top of the data pipelines at hand.\u003C/p\u003E\r\n\u003Cp\u003EIn this post, we'll share how we improved price-performance for a Dynamic Table using new custom incrementalization capabilities. Rob Howe, a senior data engineer at Thrive, led this work. He identified that custom incrementalization was a great fit for the challenges we were facing and came up with this solution, tested it and got it deployed to production within a couple of weeks.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_187190632":{"id":"blog-text-9bd968b9c1","text":"\u003Ch4\u003EThrive Learning snapshot\u003C/h4\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"quote_item":{"id":"quote-item-f35858c5dd","alignment":"left","layout":"card","showQuoteIcon":false,"quote":"Thrive is a UK-based enterprise learning platform (LMS/LXP) serving 500+ B2B tenants across manufacturing, aviation, retail and more. Thrive's data and AI engineering team runs its analytics and AI product stack on Snowflake, using Dynamic Tables extensively to turn raw operational data into the models that power customer-facing reporting and Thrive's AI assistant.\r\n","showHangingPunctuation":false,":type":"snowflake-site/components/quote-item"},"blog_text_1349023181":{"id":"blog-text-93d1476727","text":"\u003Ch2\u003EDeduplication complexity increases costs\u003C/h2\u003E\r\n\u003Cp\u003EOne of Thrive's core pipelines, internally called RecordStore, began life as exactly the kind of thing Dynamic Tables are made for: a simple, auto-refreshing, incremental Dynamic Table with no meaningful extra cost.\u003C/p\u003E\r\n\u003Cp\u003EThe trouble started when the team needed to enrich it with additional keys. Certain IDs weren't dependably placed upstream, and so resolving them meant joining across multiple sources (up to five, later optimized down to three). Those joins produced duplicates, which meant adding deduplication, and that combined complexity was enough that Snowflake could no longer refresh the table incrementally. It fell back to full refreshes.\u003C/p\u003E\r\n\u003Cp\u003ETo bring transformation cost back down, the team split the data into two lanes: a &quot;fast lane&quot; of recent data refreshed every six hours, and a &quot;slow lane&quot; of older data refreshed weekly. That did cut transformation cost, but the final \u003Ccode\u003EUNION\u003C/code\u003E of the two lanes pushed auto-clustering cost sharply the other way. The team was now trading one cost for another. At its worst, this pipeline was running at hundreds of credits per day between auto-clustering and transformation costs.\u003C/p\u003E\r\n\u003Cp\u003EEvery mitigation was treating a symptom. The real root cause was the unreliable Content ID upstream, and until that was fixed, the team was stuck.\u003C/p\u003E\r\n\u003Ch2\u003EAdding custom incrementalization to Dynamic Tables\u003C/h2\u003E\r\n\u003Cp\u003EThe pattern the team was looking at was Snowflake streams and tasks: process only the rows that actually changed, and apply them with merge logic. A streams-and-tasks pipeline would have handled the complexity spike well, but as Thrive's engineers noted, it would also have made it harder to control overall refresh lag once they wanted to get more ambitious with freshness.\u003C/p\u003E\r\n\u003Cp\u003ECustom incrementalization for Dynamic Tables (\u003Ccode\u003EREFRESH_MODE = CUSTOM_INCREMENTAL\u003C/code\u003E) removed that trade-off entirely. The team wrote explicit \u003Ccode\u003EREFRESH USING\u003C/code\u003E logic with \u003Ccode\u003EMERGE INTO SELF\u003C/code\u003E over \u003Ccode\u003ECHANGES()\u003C/code\u003E, defining precisely what &quot;incremental&quot; means for this pipeline: process only the delta, merge it in, leave everything else untouched. They got the streams-and-tasks execution model they wanted, but with Snowflake still managing scheduling, retries, transactional guarantees and lag.\u003C/p\u003E\r\n\u003Cp\u003ETwo things followed:\u003C/p\u003E\r\n\u003Col\u003E\r\n\u003Cli\u003E\u003Cb\u003ETransformation stopped reprocessing everything:\u003C/b\u003E Each refresh now touches only the changed rows instead of full-refreshing around the join/dedup complexity.\u003C/li\u003E\r\n\u003Cli\u003E\u003Cb\u003EAuto-clustering stopped churning:\u003C/b\u003E With no full rebuilds and no fast/slow UNION to maintain, clustering settled to near-nothing.\u003C/li\u003E\r\n\u003C/ol\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"quote_item_1724348700":{"id":"quote-item-02f5684818","alignment":"left","layout":"card","quoteSourceName":"Alex Tasioulis","quoteSourceTitle":"Head of Data & AI Engineering at Thrive","showQuoteIcon":false,"quote":"“Custom incrementalization gave us the execution model we wanted, with Snowflake still owning scheduling, retries and lag. And because the logic remained in the dbt DAG, the pipeline kept its place in the lineage graph with no separate orchestration layer to maintain.”\r\n\r\n","showHangingPunctuation":false,":type":"snowflake-site/components/quote-item"},"blog_text_530813114":{"id":"blog-text-c3a7ce03f7","text":"\u003Ch3\u003EReduced both transformation and auto-clustering costs\u003C/h3\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_1403105781":{"id":"blog-text-784a5561f0","text":"\u003Ctable\u003E\r\n\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003ECost driver\u003C/th\u003E\r\n\u003Cth\u003EBefore\u003C/th\u003E\r\n\u003Cth\u003EAfter\u003C/th\u003E\r\n\u003Cth\u003EReduction\u003C/th\u003E\r\n\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd\u003EAuto-clustering\u003C/td\u003E\r\n\u003Ctd\u003E~150 credits/day\u003C/td\u003E\r\n\u003Ctd\u003E~2 credits/day\u003C/td\u003E\r\n\u003Ctd\u003E~99%\u003C/td\u003E\r\n\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003ETransformation compute\u003C/td\u003E\r\n\u003Ctd\u003E~150 credits/day\u003C/td\u003E\r\n\u003Ctd\u003E~5 credits/day\u003C/td\u003E\r\n\u003Ctd\u003E~97%\u003C/td\u003E\r\n\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\r\n\u003Cp\u003E\u003Ci\u003ENote: Results based on Thrive’s internal production measurements.\u003C/i\u003E\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"},"blog_text_1031269132":{"id":"blog-text-dfff026fd1","text":"\u003Cp\u003E&nbsp;\u003C/p\u003E\r\n\u003Cp\u003EWe saw refresh latency for the pipeline also dropped from hours to seconds, because each run only inspects the sources that actually changed. The pipeline now scales with the \u003Ci style=\"font-family: adobe-clean, &quot;Source Sans Pro&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Ubuntu, &quot;Trebuchet MS&quot;, &quot;Lucida Grande&quot;, sans-serif;\"\u003Erate of change\u003C/i\u003E in the data rather than its total size.\u003C/p\u003E\r\n\u003Cp\u003ECustom incrementalization let Thrive stop trading transformation cost against clustering cost and instead solve the refresh behavior directly, while keeping the lag control that a hand-rolled streams-and-tasks pipeline would have sacrificed. It's a pattern the team expects to reuse anywhere a transformation can't be expressed cleanly as an incremental SELECT.\u003C/p\u003E\r\n\u003Ch2\u003ELineage intact in dbt\u003C/h2\u003E\r\n\u003Cp\u003EThere was a second reason custom incrementalization beat the stream-and-task alternative for Thrive: governance. Thrive manages its transformations in dbt. Knowing exactly which models feed which is central to how the team reasons about, tests and documents the platform.\u003C/p\u003E\r\n\u003Cp\u003EStreams and tasks live outside dbt. Moving this logic into a hand-built streams-and-tasks pipeline would have pulled those objects out of the dbt DAG entirely, breaking lineage and forcing the team to manage and monitor them as a separate, off-to-the-side system.\u003C/p\u003E\r\n\u003Cp\u003ECustom incremental Dynamic Tables are still Dynamic Tables. Even though native dbt support for custom incrementalization isn't there yet, the team wrapped them in a custom dbt materialization so they remain top-notch nodes in the dbt project. The pipeline keeps its place in the lineage graph and is managed with the same workflow, tests and docs as everything else, with no separate orchestration layer to maintain.\u003C/p\u003E\r\n\u003Ch2\u003ECheaper, fresher data for the agentic AI use cases ahead\u003C/h2\u003E\r\n\u003Cp\u003EThe team is now applying the same pattern to other pipelines that hit similar join/dedup complexity, and expects comparable wins — lower cost and fresher data across Thrive's entire analytics estate. Beyond the direct savings, Thrive already has agentic AI consuming this data, and making it cheaper and near-live means that same data can support even more agentic AI use cases, putting the Thrive platform in a strong position to expand its AI capabilities further.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/blog/blog-text"}},":itemsOrder":["blog_text","blog_text_187190632","quote_item","blog_text_1349023181","quote_item_1724348700","blog_text_530813114","blog_text_1403105781","blog_text_1031269132"],":type":"wcm/foundation/components/responsivegrid"},"responsivegrid_premium_content_banner":{"columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{},"appliedCssClassNames":"snowflake-responsive-component-top-padding-medium",":items":{},":itemsOrder":[],":type":"wcm/foundation/components/responsivegrid"},"container_author_chip":{"layout":"RESPONSIVE_GRID","columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"author_chip":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-b97ce80387",":type":"snowflake-site/components/container",":items":{"author_chip":{"id":"author-chip-b7d6c7e0c6","title":{"id":"title","type":"heading2","lines":["Learn more about the authors"],":type":"snowflake-site/components/title-v2"},"authors":[{"authorImage":{"id":"image-a0247dc95c","height":"336","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--5e38aa38-7ad0-4150-8fef-8b8920d74c27/alex-tasioulis.png?quality=85&preferwebp=true","lazyEnabled":true,"width":"340",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-cfd74a5dbe","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/alex-tasioulis/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Alex Tasioulis"},"authorTitle":"Head of Data & AI Engineering at Thrive"},{"authorImage":{"id":"image-6e78a8ef12","height":"386","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--001f2b34-70a5-49f3-9623-b9d75247a1c1/rob-howe-.png?quality=85&preferwebp=true","lazyEnabled":true,"width":"424",":type":"snowflake-site/components/image"},"authorCta":{"id":"button-627c2ba6ab","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/rob-howe/"},"linkTargetContentType":"DOCUMENT_LEARN",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Rob Howe"},"authorTitle":"Senior Data Engineer at Thrive"}],":type":"snowflake-site/components/blog/author-chip"}},":itemsOrder":["author_chip"],"appliedCssClassNames":"snowflake-responsive-component-top-padding-medium"}},":itemsOrder":["container_hero","responsivegrid_content","responsivegrid_premium_content_banner","container_author_chip"]},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-cb03040aa0",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"blog_table_of_content":{"id":"blog-table-of-content-68ad35a98c",":type":"snowflake-site/components/blog/blog-table-of-content","tableOfContents":[]}},":itemsOrder":["blog_table_of_content"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":true,"isActiveTOC":false},"related_content":{"id":"related-content-33f83a2627","relatedContent":[],":type":"snowflake-site/components/blog/related-content","isBlogPage":true}},":itemsOrder":["flexible_column_container","related_content"],"appliedCssClassNames":"snowflake-container"}},":itemsOrder":["container_breadcrumb","container_main_content"],":type":"wcm/foundation/components/responsivegrid"},"container_47873732":{"additionalClasses":"section--blog-newsletter","layout":"RESPONSIVE_GRID","columnCount":12,"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-e3d67caa8b",":type":"snowflake-site/components/container",":items":{"flexible_column_cont":{"id":"flexible-column-container-7b513f2447","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"small","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"section--blog-newsletter","backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-365e1811c6",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"marketo_v2":{"id":"marketo-v2-2b9e4a9b9c","marketoForm":{"hidden":null,"formId":"3320","edit":false,"successUrl":null,"script":null,"values":null},"title":{"id":"title","type":"heading3","lines":["Subscribe to our blog newsletter","Get the best, coolest and latest delivered to your inbox each week"],":type":"snowflake-site/components/title-v2"},"munchkinId":"252-RFO-227","serverInstance":"252-RFO-227.mktoweb.com","marketoConfigured":true,"formConfigured":true,":type":"snowflake-site/components/form/marketo-v2"},"text":{"id":"text-00e58aa919","additionalClasses":"newsletter-disclaimer","text":"\u003Cp\u003EBy submitting this form, I understand Snowflake will process my personal information in accordance with their Privacy Notice.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text"}},":itemsOrder":["marketo_v2","text"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":true,"isActiveTOC":false}},":itemsOrder":["flexible_column_cont"],"appliedCssClassNames":"snowflake-container"},"experiencefragment-pre-footer":{"id":"experiencefragment-a68cbdce62","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/get-started-pre-footer/get-started-pre-footer/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/get-started-pre-footer/get-started-pre-footer.xfmodel.json"},"markup_editor":{"id":"markup-editor-1c5740d99e","title":"Page CSS","cssContent":"@media screen and (min-width:768px){.snowflake-blog-author-chip-wrapper{justify-content:flex-start}.snowflake-blog-related-content-on-blog-page{max-width:1408px;margin-left:auto;margin-right:auto}.snowflake-text{font-family:Lato,sans-serif;font-weight:400;font-size:16px;line-height:24px}}.section--blog-newsletter{max-width:none;width:100%;padding-left:0;padding-right:0;margin-left:0;margin-right:0;margin-bottom:0}.section--blog-newsletter .mktoField{background-color:transparent !important}.section--blog-newsletter\u003E.container{padding-left:0;padding-right:0}@media screen and (min-width:768px){.section--blog-newsletter\u003E.container{padding-left:0;padding-right:0}}.newsletter-disclaimer p{font-size:14px !important}.section--blog-newsletter .snowflake-marketo-form-container{margin-bottom:24px;background-color:#f6f9fa;gap:48px;box-shadow:none}.section--blog-newsletter .snowflake-title p.snowflake-title-line:first-child{font-family:Texta;font-size:24px;line-height:26px;font-weight:700;margin-bottom:4px}.section--blog-newsletter .snowflake-title p.snowflake-title-line{text-transform:none;font-family:\"Lato\",sans-serif;font-size:16px;line-height:24px;font-weight:normal}@media screen and (min-width:1024px){.section--blog-newsletter .snowflake-marketo-form-container{display:flex;justify-content:center}.section--blog-newsletter .snowflake-title .snowflake-title-line{text-align:left}.section--blog-newsletter .snowflake-marketo-form .mktoFormRow:has(\u003E input[type=\"hidden\"]){flex-grow:0}.section--blog-newsletter .snowflake-marketo-form{display:flex;width:50% !important}.section--blog-newsletter .snowflake-marketo-form .mktoButtonRow{flex-grow:0;width:auto !important;margin-left:0;margin-right:0}.section--blog-newsletter .snowflake-marketo-form .mktoFormRow{flex-grow:1}.section--blog-newsletter\u003E.container{padding-left:0;padding-right:0}.section--blog-newsletter .snowflake-marketo-form-title{width:50%;margin-bottom:0 !important}.section--blog-newsletter .center .snowflake-title{align-items:flex-start}}.snowflake-sub-navigation a.snowflake-sub-navigation-primary-link{width:auto !important}.snowflake-blog-hero{align-items:stretch !important}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false},"markup_editor-table":{"id":"markup-editor-d2e4f4641e","title":"Table Styling CSS","cssContent":"#snowflake-blog-template-main-container table{width:100%;background-color:var(--ui-background-01);border-collapse:collapse;border:2px solid var(--ui-background-09);font-family:'Lato',sans-serif;color:var(--ui-background-09)}#snowflake-blog-template-main-container table thead{background-color:var(--ui-01)}#snowflake-blog-template-main-container table th,#snowflake-blog-template-main-container table td{border:2px solid var(--ui-background-09);padding:var(--spacing-01)}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false},"experiencefragment-footer":{"id":"experiencefragment-cc76303308","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master.xfmodel.json"}},":itemsOrder":["experiencefragment-banner","experiencefragment-header","experiencefragment-sub-header","responsivegrid","container_47873732","experiencefragment-pre-footer","markup_editor","markup_editor-table","experiencefragment-footer"],":type":"wcm/foundation/components/responsivegrid"}},":itemsOrder":["root"],":hierarchyType":"page",":path":"/content/snowflake-site/global/en/blog/thrive-dynamic-table-costs-custom-incremental","isPasswordProtected":false,"analyticsContentTags":[],"analyticsEnabled":true,"coveoConfig":{"apiKey":"xx335921a6-2a0a-40f2-a167-e390b4766c3d","organizationId":"snowflakecomputingproduction8neljofn","searchHub":"snowflake.com","pipeline":"snowflake.com"},"analyticsDebugMode":false,"analyticsData":{"excludeFromAnalytics":false,"subCategory":"","pageType":"homepage","templateName":"blog-page","siteName":"snowflake","pageUrl":"/content/snowflake-site/global/en/blog/thrive-dynamic-table-costs-custom-incremental","language":"en","category":"general","pageName":"How Thrive Learning Improved Dynamic Tables Price-Performance by 2X with Custom Incrementalization","contentTags":[]},"locale":"en"}
  