<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RudderStack Docs – Incremental Features</title><link>https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/</link><description>Recent content in Incremental Features on RudderStack Docs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/index.xml" rel="self" type="application/rss+xml"/><item><title>Archive: Checkpoints and Baselines</title><link>https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/</guid><description>
&lt;p>This guide explains checkpoints and baselines and how they enable incremental feature computation.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="overview" data-heading="Overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h2 id="overview">Overview&lt;/h2>&lt;p>Checkpoints represent point-in-time snapshots of all Profiles inputs and their computed outputs. Each checkpoint is identified by a sequence number and references a specific time boundary. When running incrementally, Profiles builds models using:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Stored computation&lt;/strong> from a baseline checkpoint (a previous successful run)&lt;/li>
&lt;li>&lt;strong>New warehouse data&lt;/strong> that arrived after the baseline checkpoint&amp;rsquo;s timestamp&lt;/li>
&lt;/ul>
&lt;p>The baseline checkpoint provides the reference point for identifying what data has changed and what computations can be reused.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="what-are-checkpoints" data-heading="What are checkpoints?" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h2 id="what-are-checkpoints">What are checkpoints?&lt;/h2>&lt;p>A &lt;strong>checkpoint&lt;/strong> is a conceptual snapshot of all Profiles inputs data that landed before a specific timestamp, along with all computed outputs generated from that data. Profiles uses checkpoints to:&lt;/p>
&lt;ul>
&lt;li>Reference a specific point-in-time state of your warehouse data&lt;/li>
&lt;li>Identify new data that has arrived since the last checkpoint&lt;/li>
&lt;li>Enable incremental computation by reusing previous results&lt;/li>
&lt;/ul>
&lt;p>Each checkpoint is identified by a unique sequence number (seqno). Every model output table is associated with a checkpoint and follows the naming pattern &lt;code>Material_&amp;lt;modelname&amp;gt;_&amp;lt;modelhash&amp;gt;_&amp;lt;checkpoint_seqno&amp;gt;&lt;/code>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="current-checkpoint" data-heading="Current checkpoint" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h3 id="current-checkpoint">Current checkpoint&lt;/h3>&lt;p>The &lt;strong>current checkpoint&lt;/strong> is the checkpoint being produced during the current run.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="baseline-checkpoint" data-heading="Baseline checkpoint" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h3 id="baseline-checkpoint">Baseline checkpoint&lt;/h3>&lt;p>The &lt;strong>baseline checkpoint&lt;/strong> is a previous checkpoint used as a reference point for incremental computation. In incremental runs, each model selects a named baseline to use. Once a baseline corresponding to a particular (checkpoint seqno, baseline name) pair is chosen, it remains fixed for that and all subsequent runs.&lt;/p>
&lt;p>When Profiles runs incrementally, it:&lt;/p>
&lt;ol>
&lt;li>Selects a baseline checkpoint for each incrementally-run model&lt;/li>
&lt;li>Loads computed values from the baseline checkpoint&amp;rsquo;s model output tables&lt;/li>
&lt;li>Identifies new data that has arrived since the baseline&lt;/li>
&lt;li>Merges baseline values with new calculations&lt;/li>
&lt;li>Produces the current checkpoint&lt;/li>
&lt;/ol>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-checkpoints-work" data-heading="How checkpoints work" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h2 id="how-checkpoints-work">How checkpoints work&lt;/h2>&lt;p>This section explains how checkpoints and baselines work in Profiles.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="checkpoint-creation" data-heading="Checkpoint creation" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h3 id="checkpoint-creation">Checkpoint creation&lt;/h3>&lt;p>Profiles automatically creates checkpoints after each successful run:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Checkpoint assignment&lt;/strong>: A new sequence number (seqno) is assigned to represent this checkpoint&lt;/li>
&lt;li>&lt;strong>During run&lt;/strong>: Profiles computes feature values from your warehouse data up to the checkpoint&amp;rsquo;s end timestamp&lt;/li>
&lt;li>&lt;strong>After computation&lt;/strong>: Model output tables are materialized with names containing the checkpoint seqno (e.g., &lt;code>Material_user_features_a1b2c3_42&lt;/code>)&lt;/li>
&lt;li>&lt;strong>Checkpoint registration&lt;/strong>: The checkpoint seqno, along with its time boundaries and baseline references, is recorded in the registry&lt;/li>
&lt;li>&lt;strong>Next run&lt;/strong>: The checkpoint becomes available as a baseline for subsequent incremental runs&lt;/li>
&lt;/ol>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="baseline-selection" data-heading="Baseline selection" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h3 id="baseline-selection">Baseline selection&lt;/h3>&lt;p>When running incrementally, each model independently:&lt;/p>
&lt;ol>
&lt;li>Identifies available baselines (previous checkpoints with matching time boundaries)&lt;/li>
&lt;li>Selects an appropriate checkpoint as the baseline for the named baseline context&lt;/li>
&lt;li>Once selected, the baseline (checkpoint seqno, baseline name) pair remains fixed and is never changed&lt;/li>
&lt;li>Delta models and incremental models then compute changes since the baseline&lt;/li>
&lt;li>New calculations are merged with baseline values to produce the current checkpoint output&lt;/li>
&lt;/ol>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="incremental-vs-full-refresh" data-heading="Incremental vs full refresh" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h2 id="incremental-vs-full-refresh">Incremental vs full refresh&lt;/h2>&lt;p>This section explains the difference between incremental and full refresh modes in Profiles.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="incremental-mode" data-heading="Incremental mode" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h3 id="incremental-mode">Incremental mode&lt;/h3>&lt;p>When a baseline checkpoint is available, each incremental model:&lt;/p>
&lt;ul>
&lt;li>References the baseline checkpoint&amp;rsquo;s model output table (e.g., &lt;code>Material_user_features_a1b2c3_38&lt;/code> for baseline seqno 38)&lt;/li>
&lt;li>Processes only new warehouse data that has arrived since the baseline checkpoint&amp;rsquo;s end timestamp&lt;/li>
&lt;li>Merges baseline values with new calculations using your merge logic&lt;/li>
&lt;li>Produces updated feature values in a new output table for the current checkpoint (e.g., &lt;code>Material_user_features_a1b2c3_42&lt;/code> for current seqno 42)&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="full-refresh-mode" data-heading="Full refresh mode" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h3 id="full-refresh-mode">Full refresh mode&lt;/h3>&lt;p>When no baseline checkpoint is available, Profiles:&lt;/p>
&lt;ul>
&lt;li>Processes all data from scratch&lt;/li>
&lt;li>Computes all feature values from the beginning&lt;/li>
&lt;li>Creates a new checkpoint for future incremental runs&lt;/li>
&lt;/ul>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">The first run of an incremental feature always performs a full refresh to establish the baseline checkpoint. Subsequent runs use incremental computation.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="see-more" data-heading="See more" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" data-title="Checkpoints and Baselines" -->
&lt;h2 id="see-more">See more&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/dev-docs/incremental-features/use-checkpoints/" >How to Use Checkpoints&lt;/a>: Implementation guide for referencing checkpoints&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/" >Incremental Features Overview&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/dev-docs/incremental-features/make-features-incremental/" >Make Features Incremental&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Archive: Incremental SQL Models</title><link>https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/</guid><description>
&lt;p>This guide explains incremental SQL models and how they enable incremental processing for complex stateful patterns.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="overview" data-heading="Overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/" data-title="Incremental SQL Models" -->
&lt;h2 id="overview">Overview&lt;/h2>&lt;p>Incremental SQL models are &lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/sql-models/" >SQL models&lt;/a> that dereference their own previous materialization to enable incremental processing. Incremental SQL models are the raw foundation of incremental features. They are general-purpose and enable any incremental SQL pattern, including advanced use cases like windowed incremental features that require complex stateful processing beyond what simple incremental entity vars can express.&lt;/p>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">Instead of recalculating from all historical data on every run, incremental SQL models reuse previously computed results and only process new data that has arrived since the last checkpoint.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="what-are-incremental-sql-models" data-heading="What are incremental SQL models?" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/" data-title="Incremental SQL Models" -->
&lt;h2 id="what-are-incremental-sql-models">What are incremental SQL models?&lt;/h2>&lt;p>An incremental SQL model is a SQL-template model that:&lt;/p>
&lt;ul>
&lt;li>Uses &lt;code>this.DeRef()&lt;/code> with &lt;code>pre_existing=true&lt;/code> to reference a previous materialization of itself&lt;/li>
&lt;li>Merges previous state with new data instead of recalculating from scratch&lt;/li>
&lt;li>Handles both incremental processing (when baseline exists) and full refresh (when no baseline exists)&lt;/li>
&lt;/ul>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">Unlike regular SQL models that process all data on each run, incremental SQL models process only new data that arrived since the last checkpoint and merge it with previous state.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-incremental-sql-models-work" data-heading="How incremental SQL models work" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/" data-title="Incremental SQL Models" -->
&lt;h2 id="how-incremental-sql-models-work">How incremental SQL models work&lt;/h2>&lt;p>When you define an incremental SQL model, Profiles stores previous materializations as checkpoints, identifies new data that has arrived since the baseline checkpoint, merges the previous state with new data using your SQL logic, and produces updated results that become the new checkpoint.&lt;/p>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>Mandatory requirement&lt;/strong>:&lt;/p>
&lt;p>All inputs used by incremental SQL models must have &lt;code>contract: is_append_only: true&lt;/code> configured in the input&amp;rsquo;s &lt;code>contract&lt;/code>. Without this configuration, delta models cannot be generated and incremental processing will not work.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/dev-docs/incremental-features/incremental-sql-models/" >Incremental SQL Models Developer Documentation&lt;/a> for configuration details.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="when-to-use-incremental-sql-models" data-heading="When to use incremental SQL models" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/" data-title="Incremental SQL Models" -->
&lt;h2 id="when-to-use-incremental-sql-models">When to use incremental SQL models&lt;/h2>&lt;p>Use incremental SQL models when:&lt;/p>
&lt;ul>
&lt;li>You want to reduce warehouse costs when processing large historical datasets (millions or billions of rows)&lt;/li>
&lt;li>New data arrives regularly (daily, hourly, or more frequently)&lt;/li>
&lt;li>The volume of new data is significantly smaller than your total dataset&lt;/li>
&lt;li>Your use case requires stateful processing that cannot be expressed with simple aggregations&lt;/li>
&lt;/ul>
&lt;!DOCTYPE html>
&lt;html lang="en">
&lt;blockquote class="tip">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/tip.svg loading="lazy" alt="tip" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>Tip:&lt;/strong>
For simple aggregations like &lt;code>SUM&lt;/code>, &lt;code>MIN&lt;/code>, &lt;code>MAX&lt;/code>, &lt;code>COUNT&lt;/code>, prefer using &lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/dev-docs/incremental-features/simple-aggregations/" >Simple Aggregations&lt;/a> with &lt;code>merge&lt;/code> property. For averages and arrays, use &lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/dev-docs/incremental-features/compound-aggregations/" >Compound Aggregations&lt;/a>.&lt;/p>
&lt;p>Incremental SQL models are best for complex scenarios requiring stateful processing.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="relationship-to-other-profiles-features" data-heading="Relationship to other Profiles features" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/" data-title="Incremental SQL Models" -->
&lt;h2 id="relationship-to-other-profiles-features">Relationship to other Profiles features&lt;/h2>&lt;p>Incremental SQL models work alongside other Profiles capabilities:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>SQL Models&lt;/strong>: Incremental SQL models are specialized &lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/sql-models/" >SQL models&lt;/a> that dereference their own past, using the same &lt;code>sql_models.yaml&lt;/code> structure and &lt;code>model_spec&lt;/code> configuration as regular SQL models. Both regular and incremental SQL models can be materialized as tables, views, or ephemeral sources.&lt;/li>
&lt;li>&lt;strong>Incremental Features&lt;/strong>: Incremental SQL models enable incremental processing for complex patterns that cannot be expressed using simple incremental entity vars.&lt;/li>
&lt;li>&lt;strong>Checkpoints&lt;/strong>: Incremental SQL models rely on &lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" >checkpoints&lt;/a> to reference previous materializations and enable incremental processing.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="supported-patterns" data-heading="Supported patterns" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/" data-title="Incremental SQL Models" -->
&lt;h2 id="supported-patterns">Supported patterns&lt;/h2>&lt;p>Incremental SQL models support two main pattern categories:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Pattern&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/dev-docs/incremental-features/incremental-sql-models/#incremental-input-window-models" >Incremental input window models&lt;/a>&lt;/td>
&lt;td style="text-align:left">Tracking recent activity or maintaining rolling windows of data (e.g., MAU/DAU)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/dev-docs/incremental-features/incremental-sql-models/#composite-key-models" >Composite key models&lt;/a>&lt;/td>
&lt;td style="text-align:left">Per-dimension aggregations where you need one value per (entity_id, dimension_id) composite key pair&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="see-also" data-heading="See also" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/incremental-sql-models/" data-title="Incremental SQL Models" -->
&lt;h2 id="see-also">See also&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/dev-docs/incremental-features/incremental-sql-models/" >Incremental SQL Models Developer Documentation&lt;/a>: Implementation guide with examples&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/sql-models/" >SQL Models&lt;/a>: Overview of SQL models in Profiles&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/" >Incremental Features&lt;/a>: Introduction to incremental features&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/profiles/0.25/concepts/incremental-features/checkpoints-and-baselines/" >Checkpoints and Baselines&lt;/a>: Understanding checkpoints and how they enable incremental computation&lt;/li>
&lt;/ul></description></item></channel></rss>