1.19
Type
External
Status
Published
Created
Mar 3, 2026
Updated
May 19, 2026
Updated by
Dosu Bot
Source
View

Release highlights: 1.19#

New: Arrow streaming with ConnectorX#

You can now return results from sql_database queries as an Arrow stream when using the ConnectorX backend.

This allows large query results to be processed incrementally, avoiding loading the full result set into memory.

Example:

from dlt.sources.sql_database import sql_database

db = sql_database(
    backend="connectorx",
    backend_kwargs={
        "return_type": "arrow_stream", # new in 1.19
    },
)

By default, ConnectorX returns PyArrow tables. Arrow streaming must be explicitly enabled.

Read more →


Visual pipeline run history in the dashboard#

The dashboard now includes a visual history of pipeline runs, making it easier to inspect run status, duration, and changes over time.

This provides a clearer overview of pipeline health and helps diagnose failures faster.

run_history

Read more ->


Faster Parquet ingestion into MSSQL, MySQL, and SQLite via ADBC#

dlt can now ingest Parquet files into SQL databases (MSSQL, MySQL, and SQLite) using ADBC.

When an ADBC driver is available, Parquet loading is enabled automatically and becomes the preferred method. This delivers a 10×–100× speedup compared to INSERT-based loading and is more reliable than CSV fallbacks.

If needed, you can explicitly revert to INSERT loading:

pipeline.run(
    data_iter,
    loader_file_format="insert_values",
)

Read more →


Visualize schemas with Schema.to_mermaid()#

You can now export any dlt schema as a Mermaid diagram for quick visualization in documentation, pull requests, or onboarding materials.

schema_mermaid = pipeline.default_schema.to_mermaid()

mermaid

Schemas can also be exported from the CLI and rendered natively in tools like GitHub Markdown and Notion.

Read more →


Snowflake clustering key improvements#

Snowflake destinations now support updating clustering keys using column hints.

Clustering changes are applied when a table alteration is triggered (for example, when a new column is added), making it easier to tune clustering for large tables without recreating them.

Example:

@dlt.resource(table_name="events")
def events():
    yield {"event_id": 1, "country": "DE"}

events.apply_hints(columns=[{"name": "event_id", "cluster": True}])
pipeline.run(events())

Read more →


Shout-out to new contributors#

Big thanks to our newest contributors:


Full release notes

View the complete list of changes →

1.19 | Dosu