Skip to main content
Lakeflow pipelines migration guide

Delta Live Tables vs Lakeflow Pipelines what changed and how to build today

Delta Live Tables is now Lakeflow pipelines. Existing DLT code still works, while current APIs make dataset types, CDC patterns and pipeline intent more explicit.

Read the Lakeflow guide
DLT still works pyspark.pipelines AUTO CDC
DLT modernization diff
No forced rewrite
Delta Live Tables
+
Lakeflow pipelines
import dlt
+
from pyspark import pipelines as dp
@dlt.table for batch and streaming
+
@dp.table · @dp.materialized_view
APPLY CHANGES
+
AUTO CDC

The declarative model remains

Dependencies, managed refresh, expectations and event-log operations continue. Modernize the API surface when it adds clarity or future compatibility.

Short answer

Lakeflow pipelines is the current name and the next API surface for DLT

The product was renamed, but the declarative pipeline model did not disappear. Existing DLT code can keep running. New code should use current Lakeflow terminology and the pyspark.pipelines API.

No mandatory code migration

The rename itself does not require you to rebuild working DLT pipelines.

Modern APIs are clearer

Streaming tables and materialized views now have distinct Python decorators.

Lakeflow adds beyond open Spark SDP

Databricks adds AUTO CDC, expectations, event logs, continuous mode and other production features.

What stays

Dependency graph
Managed refresh
Expectations
Event log

What changes

Lakeflow naming
pyspark.pipelines
Explicit dataset types
AUTO CDC terminology

Treat the rename, API modernization and legacy publishing mode as separate topics. They do not all require the same migration.

API map

Map the old DLT surface to the current Lakeflow API

The important migration detail is dataset intent. Older @dlt.table code represented both batch and streaming outputs. Current Python makes that distinction explicit.

import dlt
from pyspark import pipelines as dp
@dlt.table + streaming DataFrame
@dp.table
@dlt.table + batch DataFrame
@dp.materialized_view
@dlt.view
@dp.temporary_view
dlt.apply_changes(...)
dp.create_auto_cdc_flow(...)
APPLY CHANGES INTO
AUTO CDC INTO
Choose the dataset by update semantics

Start with how the output must stay correct.

What does the target need?

Process each new row once

Append-heavy ingestion or streaming transformations.

Streaming table

Keep a query result current

Joins, aggregates and derived analytical state.

Materialized view

Reuse logic inside the pipeline

Intermediate logic that does not need a published dataset.

Temporary view

CDC is a flow decision: use AUTO CDC to apply ordered inserts, updates and deletes into a streaming table.

Dataset choice

Do not choose between streaming tables and materialized views by layer name

A Bronze table is often streaming, while Silver and Gold can contain either type. The correct choice depends on source behaviour, transformation semantics and how historical changes must be reflected.

Streaming tables are inherently incremental

Normal refreshes process records that arrived since the previous update. Older rows are not automatically reprocessed.

Materialized views preserve query correctness

Databricks can refresh incrementally when possible and fall back to a full recompute when required.

Single SQL object can be standalone

Use a full Lakeflow pipeline when you need multi-stage dependencies, Python, sinks or pipeline-only CDC patterns.

Current syntax

Use current dataset names in SQL and Python

SQL uses explicit streaming-table and materialized-view DDL. Python now uses separate decorators so the dataset type is visible in code.

SQL · streaming table + materialized view
CREATE OR REFRESH STREAMING TABLE bronze_mes_events
AS SELECT *
FROM STREAM read_files(
  '/Volumes/factory/raw/mes_events',
  format => 'json'
);

CREATE OR REFRESH MATERIALIZED VIEW gold_daily_output
AS
SELECT
  production_date,
  line_id,
  SUM(good_quantity) AS good_quantity
FROM silver.production_runs
GROUP BY production_date, line_id;
Python · current pipelines API
from pyspark import pipelines as dp

@dp.table(name="bronze_mes_events")
def bronze_mes_events():
    return (
        spark.readStream
        .format("cloudFiles")
        .option("cloudFiles.format", "json")
        .load("/Volumes/factory/raw/mes_events")
    )

@dp.materialized_view(name="gold_daily_output")
def gold_daily_output():
    return (
        spark.read.table("silver.production_runs")
        .groupBy("production_date", "line_id")
        .sum("good_quantity")
    )

The old CREATE OR REFRESH LIVE TABLE form is deprecated. For new SQL, use CREATE OR REFRESH MATERIALIZED VIEW or CREATE OR REFRESH STREAMING TABLE.

Source behaviour

Choose the ingestion pattern from how the source changes

Lakeflow pipelines can handle files, event streams, CDC feeds and snapshots, but those sources should not be forced through the same pattern.

Supported database or SaaS source

managed ingestion

Pattern

Lakeflow Connect

Target

managed streaming tables

ADLS files or append-only events

new records arrive

Pattern

Auto Loader / streaming read

Target

streaming table

Ordered inserts, updates and deletes

CDC feed

Pattern

AUTO CDC

Target

streaming table · SCD1 / SCD2

Periodic full snapshots only

no native CDC

Pattern

AUTO CDC FROM SNAPSHOT

Target

streaming table · Python only

Lakeflow Connect and Lakeflow pipelines solve different parts of the stack. Managed connectors add source-specific authentication, CDC handling, retries and schema evolution. Lakeflow pipelines provide the declarative transformation and processing framework underneath and downstream.

Execution mode

Streaming table does not mean continuous compute

Dataset type and execution mode are independent. Start with triggered execution for most manufacturing workloads and increase freshness only when a faster decision actually changes the outcome.

Triggered is the default

Refresh available data, then stop compute. This fits most hourly, daily and on-demand pipelines.

Continuous is for proven latency needs

For new continuous workloads, Databricks recommends the continuous Lakeflow Job pattern over the built-in continuous pipeline setting.

Real-time is specialized

Millisecond-range real-time mode is currently a Public Preview feature and is aimed at operational streaming use cases.

Freshness ladder

Pick the lowest latency that the business decision needs.

Triggeredminutes to hours

Planning, inventory, finance, daily production performance

Continuousseconds to minutes

Near-real-time operational monitoring where latency changes the response

Real-time modemillisecond range · preview

Specialized event-driven operational workloads

Compute: Databricks recommends serverless for almost all new Lakeflow pipelines. Use classic where network, instance or environment requirements demand it.

Pipeline update · factory_production
Healthy

Bronze events

streaming

Silver valid

2 expectations

Gold output

materialized

Passed

99.7%

Dropped

186

Backlog

0

Event log

update status · quality metrics · lineage · errors · resource events

Illustrative pipeline metrics. Use the actual event log and pipeline UI as the operational source.

Quality & observability

Preserve behaviour, not just syntax

A DLT modernization is only equivalent when data-quality actions, refresh behaviour and monitoring still produce the same operational result.

Expectations remain a Lakeflow feature

Retain invalid rows for metrics, drop them, fail the update or implement a quarantine path when investigation matters.

The event log is the programmatic record

Use it for update outcomes, expectation trends, errors, lineage and historical operational analysis.

Streaming metrics expose backlog

For streaming flows, monitor backlog records, bytes, files and seconds where available.

Migration

Separate API modernization from publishing-mode migration

The DLT rename does not force a migration. Legacy publishing mode is different. Pipelines created before February 5, 2025 can still use the LIVE virtual schema and should be reviewed for migration to the current default publishing mode.

Usually optional

DLT API modernization

Update names and APIs as you touch the codebase. Validate behaviour instead of performing a blind rewrite.

1

Inventory DLT imports, decorators, APPLY CHANGES and old terminology.

2

Classify each dataset as streaming table, materialized view or temporary view.

3

Refactor only where current APIs improve clarity or future compatibility.

4

Reconcile outputs, expectations, latency and restart behaviour before promotion.

Review legacy pipelines

Default publishing mode

This changes name resolution and pipeline metadata. It is separate from replacing import dlt.

Legacy

LIVE virtual schema

legacy publishing mode

Current

Catalog + schema

default publishing mode

Review unqualified reads that previously resolved through workspace defaults.

Use fully qualified identifiers for datasets outside the configured pipeline catalog and schema.

The publishing-mode migration updates pipeline metadata. It does not move or rewrite the underlying datasets.

Common mistakes

Avoid migrations that change semantics by accident

The risky changes are rarely the product name. They are incorrect assumptions about dataset type, source behaviour, execution mode or name resolution.

Avoid

Rewriting a working DLT pipeline only because the name changed

Better default

Modernize APIs when the code is already being changed

Avoid

Replacing every @dlt.table with @dp.table

Better default

Classify batch outputs as materialized views first

Avoid

Assuming a streaming table needs continuous mode

Better default

Choose dataset type and execution mode independently

Avoid

Streaming from a source that updates old rows without a plan

Better default

Use AUTO CDC or another pattern that matches the source semantics

Avoid

Using APPLY CHANGES in new examples

Better default

Use AUTO CDC for current Lakeflow code

Avoid

Ignoring LIVE and unqualified names in legacy publishing mode

Better default

Review name resolution when moving to default publishing mode

How Food For Analytics implements it

Titan uses Lakeflow patterns according to source behaviour and decision freshness

We do not default every manufacturing dataset to the same pipeline object. Titan separates ingestion behaviour, transformation semantics and execution mode so each data product can use the simplest reliable pattern.

Source behaviour

Classify the change pattern

Files, events, CDC feeds and snapshots require different ingestion semantics.

appendCDCsnapshot

Titan on Azure Databricks

Choose the Lakeflow pattern

Use the dataset and flow type that preserves correctness with the lowest operational complexity.

Auto Loader
AUTO CDC
Streaming tables
Materialized views

Operational outcome

Run at the required freshness

Triggered by default, continuously where latency matters, with expectations and event-log monitoring around the data product.

triggeredobservablegoverned

FAQ

Frequently asked questions

Practical answers about moving from Delta Live Tables terminology to current Lakeflow pipelines.

Is Delta Live Tables discontinued?

Delta Live Tables is the former product name. Databricks now calls the product Lakeflow pipelines. Existing DLT code continues to work, so the rename does not require a rewrite.

Do I need to replace import dlt immediately?

No. The dlt Python APIs remain supported, but Databricks recommends using from pyspark import pipelines as dp for new code and when existing code is being modernized.

What replaces @dlt.table?

The replacement depends on the dataset. Use @dp.table for a streaming table and @dp.materialized_view for a materialized view. This makes the intended dataset type explicit in current Python code.

What replaces APPLY CHANGES?

Databricks recommends AUTO CDC. AUTO CDC handles ordered change feeds and supports SCD Type 1 and Type 2. AUTO CDC FROM SNAPSHOT is available in Python when only periodic source snapshots are available.

Does a streaming table require a continuous pipeline?

No. Dataset type and pipeline execution mode are separate decisions. Streaming tables and materialized views can both run in triggered or continuous Lakeflow pipelines.

What happened to the LIVE schema?

The LIVE virtual schema belongs to legacy publishing mode. New pipelines use the default publishing mode, where LIVE is ignored and the configured catalog and schema determine unqualified references. Legacy publishing mode should be reviewed separately from the DLT naming change.

Practical next step

Modernize Lakeflow pipelines without rewriting what already works

We can review an existing DLT codebase, source semantics, publishing mode and operational behaviour, then define the smallest safe modernization path.