Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Principle:TobikoData Sqlmesh Environment Promotion

From Leeroopedia


Knowledge Sources
Domains Data_Engineering, Environment_Management
Last Updated 2026-02-07 00:00 GMT

Overview

Atomically updating an environment's model versions and marking it ready for active use.

Description

Environment promotion is the process of safely transitioning an environment from a draft or in-progress state to an active, queryable state. This involves two critical phases: updating the environment's snapshot references to point to the desired model versions (promotion), and marking the environment as finalized to indicate it is ready for queries (finalization).

The promotion phase updates which model versions (snapshots) are active in the environment and optionally validates data completeness by checking for gaps in processed intervals. The finalization phase creates an immutable checkpoint indicating the environment is fully configured and operational, enabling virtual views to be safely queried.

This solves several key problems:

  • Atomic Updates: Ensuring all model versions are updated together to maintain referential integrity
  • Data Completeness: Validating that required data has been backfilled before allowing queries
  • State Consistency: Preventing queries against partially-configured environments
  • Rollback Safety: Maintaining previous environment state for potential rollback
  • Concurrent Access: Allowing environment setup to occur without affecting active queries

Without promotion and finalization, there is no safe way to transition environments between states, leading to race conditions where queries might see inconsistent data or attempt to access models that haven't been backfilled.

Usage

Use environment promotion when:

  • Deploying a plan that modifies an existing environment
  • Activating a newly created environment after backfill completes
  • Updating production to point to new model versions after validation
  • Transitioning a PR environment from setup to active query state
  • Implementing blue-green deployment patterns for data transformations
  • Recovering from failed deployments by rolling back to previous snapshot set
  • Synchronizing environment state across distributed teams
  • Implementing approval gates where environments must be validated before finalization
  • Managing progressive rollout where subsets of models are promoted incrementally

Theoretical Basis

The promotion and finalization mechanism follows this logical flow:

Promotion Preparation:

FUNCTION prepare_promotion(environment, new_snapshots):
    # Determine what changed
    current_snapshots = environment.snapshots

    added_snapshots = new_snapshots MINUS current_snapshots
    removed_snapshots = current_snapshots MINUS new_snapshots
    unchanged_snapshots = current_snapshots INTERSECT new_snapshots

    # Store previous state for potential rollback
    environment.previous_finalized_snapshots = current_snapshots
    environment.previous_plan_id = environment.plan_id

    RETURN {
        added: added_snapshots,
        removed: removed_snapshots,
        unchanged: unchanged_snapshots
    }

Data Completeness Validation:

FUNCTION validate_no_gaps(snapshots, snapshot_names_to_check):
    gaps_detected = []

    FOR each snapshot IN snapshots:
        IF snapshot.name NOT IN snapshot_names_to_check:
            CONTINUE

        IF snapshot.model_kind requires intervals:
            expected_intervals = COMPUTE expected intervals based on:
                - snapshot.start_at
                - snapshot.end_at
                - snapshot.cron_schedule

            actual_intervals = QUERY processed intervals FROM state:
                SELECT intervals FROM _intervals
                WHERE snapshot_id = snapshot.id

            missing_intervals = expected_intervals MINUS actual_intervals

            IF missing_intervals NOT empty:
                ADD (snapshot.name, missing_intervals) to gaps_detected

    IF gaps_detected NOT empty:
        RAISE DataGapError(gaps_detected)

    RETURN True

Promotion Execution:

FUNCTION promote(environment, no_gaps_snapshot_names):
    BEGIN TRANSACTION

    # Validate data completeness
    IF no_gaps_snapshot_names:
        validate_no_gaps(
            environment.snapshots,
            no_gaps_snapshot_names
        )

    # Update environment snapshots atomically
    UPDATE state_database._environments
        SET snapshots = SERIALIZE(environment.snapshots),
            promoted_snapshot_ids = SERIALIZE(environment.promoted_snapshot_ids),
            previous_finalized_snapshots = SERIALIZE(environment.previous_finalized_snapshots),
            plan_id = environment.plan_id,
            previous_plan_id = environment.previous_plan_id,
            start_at = environment.start_at,
            end_at = environment.end_at,
            finalized_ts = NULL  # Reset finalization
        WHERE name = environment.name

    COMMIT TRANSACTION

    # Determine what changed for view management
    promotion_result = {
        added: snapshots in new but not in previous,
        removed: snapshots in previous but not in new
    }

    RETURN promotion_result

View Layer Update:

FUNCTION update_view_layer(environment, promotion_result):
    # Drop views for removed snapshots
    FOR each snapshot IN promotion_result.removed:
        view_name = snapshot.qualified_view_name FOR environment
        DROP VIEW IF EXISTS view_name

    # Create or replace views for added/updated snapshots
    FOR each snapshot IN environment.promoted_snapshots:
        view_name = snapshot.qualified_view_name FOR environment
        physical_table = snapshot.physical_table_name

        CREATE OR REPLACE VIEW view_name AS
            SELECT * FROM physical_table

Finalization:

FUNCTION finalize(environment):
    BEGIN TRANSACTION

    # Verify environment exists and promotion was successful
    current_state = QUERY state_database._environments
        WHERE name = environment.name

    IF current_state.snapshots != environment.snapshots:
        RAISE StateInconsistencyError("Environment modified since promotion")

    # Mark environment as finalized
    UPDATE state_database._environments
        SET finalized_ts = CURRENT_TIMESTAMP
        WHERE name = environment.name

    COMMIT TRANSACTION

    # Clear previous finalized snapshots as they're no longer needed for rollback
    environment.finalized_ts = CURRENT_TIMESTAMP
    environment.previous_finalized_snapshots = None

    RETURN environment

Complete Promotion Flow:

FUNCTION promote_and_finalize(environment, no_gaps_snapshot_names):
    # Phase 1: Promote snapshots
    promotion_result = promote(environment, no_gaps_snapshot_names)

    # Phase 2: Update virtual layer
    update_view_layer(environment, promotion_result)

    # Phase 3: Finalize environment
    finalize(environment)

    RETURN environment

The two-phase commit (promote then finalize) ensures that even if view creation fails, the environment remains in a consistent state and can be retried or rolled back. Finalization only occurs after all operations succeed, providing strong consistency guarantees.

Related Pages

Implemented By

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment