Databricks Runtime 18 LTS
This page contains unified release notes for Databricks Runtime 18 LTS, powered by Apache Spark 4.1.0. It lists all features, behavior changes, and fixes shipped throughout the Databricks Runtime 18 LTS release cycle.
Releases are staged. Your Databricks account might not update for a few days after the initial release date.
About unified release notes
Databricks releases features incrementally throughout the release cycle without changing the version number. Rather than separate pages for each minor version, all updates appear on this single page as dated entries. Clusters receive updates when they restart.
Databricks Runtime 18 is the first release to use this unified format. Previously, each feature version (18.0, 18.1, 18.2) had its own release notes page. Those pages remain available for reference. Features that would previously have shipped as 18.3 or later now ship as dated updates to Databricks Runtime 18.
In the future, Databricks Runtime versions will follow a lifecycle from Beta (early evaluation) through GA (feature development, approximately six months) to LTS (long-term support, three years of stability and security fixes). Because 18.0 through 18.2 shipped under the previous model, Databricks Runtime 18 is a transitional release. It is currently in the GA phase and will transition to LTS when Databricks Runtime 19 is generally available. For full lifecycle details, see Databricks Runtime support lifecycles.
Databricks Runtime 18: June 10, 2026
Databricks Runtime 18 is now generally available (GA). For lifecycle details, see Databricks Runtime support lifecycles.
New features and improvements
The following features and improvements are available in this release.
- Spark Declarative Pipelines on Lakeflow streaming query ID: Spark Declarative Pipelines on Lakeflow pipelines can now set the streaming query ID on demand.
- New IP address functions (Public Preview): New SQL functions are available for working with IPv4 and IPv6 addresses and CIDR blocks, including
ip_host,ip_cidr,ip_version,ip_prefix_length,ip_network,ip_network_last,ip_cidr_contains,ip_as_binary,ip_as_string, andtry_*variants for null-safe behavior. See ip_host and related functions. - On-demand state repartitioning (Public Preview): Structured Streaming now supports changing the number of shuffle partitions for stateful queries without losing checkpoint state. See On-demand state repartitioning for stateful streaming queries.
Apache Spark fixes and improvements
This release includes the following bug fixes and improvements made to Spark:
- Fixed incorrect null handling in
LEFT OUTER JOIN LATERALexpressions that containEXPLODE. Previously, certain inputs produced incorrect null values in results. - Photon now defers duplicate
field_iderrors in Parquet schema resolution until the affected field is accessed. Queries that don't reference the duplicate field now succeed rather than failing at schema resolution time.
Databricks Runtime 18: June 8, 2026
Apache Spark fixes and improvements
This release includes the following bug fixes and improvements made to Spark:
NEAREST BYis now a supported SQL join type for top-K nearest-neighbor queries.DESCRIBE TABLE ... PARTITIONis now supported for v2 catalog tables. Previously, this syntax was only available for v1 tables.- SQL PATH support has been extended:
SET PATHis now a supported SQL statement,CURRENT_PATH()returns the current path, and the PATH is now persisted in view and SQL function definitions and included inDESCRIBEoutput. UPDATEqueries on DSv2 tables now include operation metrics in query output.- DSv2 partition predicates now support nested partition columns.
- Fixed a bug where aggregate queries using
PartialMergeorFinalaggregate execution could fail due to missing required input attributes. - Large external sorts now use bounded k-way merging to reduce out-of-memory errors when spilling data to disk.
Databricks Runtime 18: June 4, 2026
Behavioral changes
Review the following changes, which take effect when clusters restart on this runtime.
NATURAL JOINcase-insensitive column matching:NATURAL JOINnow respects thespark.sql.caseSensitiveconfiguration (default:false) when matching common columns between the left and right sides of the join. Previously, column matching was always case-sensitive, causing columns that differ only in case (for example,IDvsid) to not be recognized as common columns. This resulted in a silent cross join instead of the expected equi-join. The equivalentUSINGjoin already handled this correctly. To restore the previous behavior, setspark.sql.legacy.naturalJoinCaseSensitiveColumnMatchingtotrue.
Databricks Runtime 18: May 29, 2026
- Structured Streaming deduplication with
NaNkeys: Structured Streaming deduplication now treatsNaN(Not-a-Number) values that have different bit patterns as duplicates when adoubleorfloatcolumn is used as a deduplication key. Previously,NaNvalues with different internal representations were treated as distinct and were not deduplicated. - Fixed an issue where table-level permissions could be removed from Unity Catalog foreign catalog tables (for example, Snowflake connection tables) during metadata refresh, which caused queries to fail with
INSUFFICIENT_PERMISSIONSerrors. Permissions are now preserved when foreign table metadata is refreshed.
Databricks Runtime 18: May 18, 2026
Behavioral changes
Review the following changes, which take effect when clusters restart on this runtime.
CREATE OR REPLACE TABLE:CREATE OR REPLACE TABLEnow preserves existing column and table comments by default. Previously, comments were dropped when recreating a table. Managed tables and views now match the existing behavior of materialized views and streaming tables.- DataFrame by-name writes:
writeTo().append(),writeTo().overwrite(),writeTo().overwritePartitions(), andwrite.mode("append").saveAsTable()now automatically cast type-compatible columns (for example,inttolong) to match the target Delta table schema. Previously, these operations failed with aDELTA_FAILED_TO_MERGE_FIELDSerror when column types were compatible but not identical. Behavior now matches SQLINSERT INTO ... BY NAME.save()andsaveAsTable()in overwrite mode are not affected. ALTER TABLE SET TBLPROPERTIESforpipelines.pipelineId:ALTER TABLE <table> SET TBLPROPERTIES('pipelines.pipelineId' = '<pipeline-id>')now attempts to make the specified table eligible for writes by the pipeline. Previously, setting this property on a regular table had no effect. If the table isn't eligible for pipeline writes, the command throwsSETTING_PIPELINES_PIPELINE_ID_NOT_SUPPORTED.cloud_files_state: Thecloud_files_statetable-valued function (TVF) now includes adiscovery_modecolumn showing how Auto Loader discovered each file. Files discovered before upgrading have anullvalue in this column.DESCRIBE EXTENDED AS JSON: Now includes predictive optimization evaluation results in its output. Previously, this information wasn't returned in the JSON output.- Metric view window measures: Now return correct results when queries use
GROUP BY,IN/BETWEENfilters, or mixed predicates on the window's order column. Previously, these filter patterns could produce incorrect results.
New features and improvements
The following features and improvements are available in this release.
- Cluster libraries: When you install PyPI libraries, wheels, or requirements.txt files on a cluster, the Libraries tab and Libraries REST API now display all resolved and installed packages, including transitive dependencies. For installations that resolve more than 500 packages, the list is truncated. The full installation report is available in the cluster's driver logs.
array_sortwith custom comparators: Photon now acceleratesarray_sortexpressions that use custom comparators to sort arrays of structs by one or more fields. Previously, these expressions fell back to non-Photon execution. To enable this optimization, setspark.databricks.photon.rewriteArraySortComparator.enabledtotrue.
Apache Spark fixes and improvements
This release includes the following bug fixes and improvements made to Spark:
- SQL queries now support a
QUALIFYclause, which lets you filter on window function results directly in the query. Previously this required wrapping the query in a subquery. spark.read.json,spark.read.csv, andspark.read.xmlnow accept a DataFrame as input, so you can parse in-memory data without saving it to a file first.DataFrame.changes()is now available for reading change data capture (CDC) output through the DataFrame API.- When a DataFrame column is referenced from the wrong DataFrame, the error now names the specific column. You can also set
spark.sql.columnResolution.strictto make Spark enforce stricter column matching and catch these mistakes earlier. MERGE INTOschema evolution now works correctly when the statement includesWHEN MATCHED THEN DELETEor references nested columns by alias. Previously, these combinations could fail or silently produce wrong results.