szehon-ho commented on code in PR #58222:
URL: https://github.com/apache/spark/pull/58222#discussion_r3846450790


##########
docs/sql-migration-guide.md:
##########
@@ -48,6 +48,8 @@ license: |
 - Since Spark 4.3, the Spark-recognized time-travel options (`versionAsOf` and 
`timestampAsOf`, or the keys configured by `spark.sql.timeTravelVersionKey` and 
`spark.sql.timeTravelTimestampKey`) are rejected with 
`UNSUPPORTED_FEATURE.TIME_TRAVEL` on catalog-backed Data Source V2 writes, 
including table creation and replacement through `DataFrameWriterV2`, because 
writes must target the current table state rather than a historical version. 
Previously, Spark passed them to the connector as ordinary write options.
 - Since Spark 4.3, `HAVING` is evaluated before window functions when the 
`SELECT` list also contains generator functions such as `explode`. Previously, 
window functions could include groups removed by `HAVING` and produce incorrect 
results.
 - Since Spark 4.3, the Spark Connect session errors 
`INVALID_HANDLE.SESSION_CHANGED`/`SESSION_CLOSED`/`SESSION_NOT_FOUND` carry 
SQLSTATE `08003` instead of `HY000`; the condition names are unchanged. Code 
matching these errors on SQLSTATE should match `08003` or class `08`.
+- Since Spark 4.3, [Declarative 
Pipelines](declarative-pipelines-programming-guide.html) honors 
`spark.sql.caseSensitive` when inferring and evolving pipeline table schemas. 
Under case-insensitive resolution (the default), column names that differ only 
in case now identify the same column: flows writing to one table contribute a 
single column rather than one per spelling, and a column that differs only in 
case from one already persisted in the target is written to that column instead 
of being added alongside it. Previously such names were always treated as 
distinct, producing a table schema that Spark's own resolver could not 
disambiguate and that could fail later with errors such as 
`COLUMN_ALREADY_EXISTS` or `AMBIGUOUS_REFERENCE`. When two flows' columns fold 
together but their types are incompatible, the update now fails at validation 
with `UNABLE_TO_INFER_PIPELINE_TABLE_SCHEMA`. Where the spellings differ, the 
surviving one comes from the flow with the lowest identifier, or, whe
 n the target table already has the column, its persisted spelling. Set 
`spark.sql.caseSensitive` to `true` to keep names differing only in case 
distinct, as before.

Review Comment:
   Thanks — updated. The persisted-spelling clause now applies only to 
incremental streaming tables; the note also covers explicit table schemas 
(declared spelling wins) and materialized views (schema is re-inferred each 
update).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to