[ 
https://issues.apache.org/jira/browse/SPARK-58330?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Anurag Mantripragada updated SPARK-58330:
-----------------------------------------
    Affects Version/s: 4.2.0
                           (was: 5.0.0)

> Dynamic table options are dropped when the same table is referenced twice in 
> a DML statement
> --------------------------------------------------------------------------------------------
>
>                 Key: SPARK-58330
>                 URL: https://issues.apache.org/jira/browse/SPARK-58330
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 4.2.0
>            Reporter: Anurag Mantripragada
>            Priority: Major
>
> Spark supports a per-statement `WITH (key = value)` dynamic table options 
> clause on `SELECT` (SPARK-36680), `INSERT` (SPARK-49098), `UPDATE` 
> (SPARK-57681), and `MERGE` (SPARK-58007). When a single statement references 
> the same table more than once with different options, only the first-resolved 
> reference's options are honored; the other reference's options are silently 
> dropped.
> Examples (each drops one side's options):
> ```sql
> -- INSERT self-select: the target's write options are dropped
> INSERT INTO t WITH (`write.split-size` = 10) SELECT * FROM t
> -- MERGE self-merge: the source's read options are dropped
> MERGE INTO t WITH (`write.split-size` = 10)
> USING t WITH (`split-size` = 5) s
> ON t.id = s.id
> WHEN MATCHED THEN UPDATE SET ...
> -- UPDATE self-reference in a subquery/CTE: the subquery's options are dropped
> UPDATE t WITH (`write.split-size` = 10) SET ...
> WHERE id IN (SELECT id FROM t WITH (`split-size` = 5))
> ```
> No error is raised; an option the user explicitly wrote is silently ignored.
> Root cause: the per-query analyzer relation cache (`RelationResolution`) is 
> keyed by catalog + namespace + name + time-travel spec only -- options are 
> not part of the key. On a cache hit the cached relation is returned as-is, 
> without applying the current reference's options, so the second reference to 
> the same table inherits the first reference's options. Which reference "wins" 
> is a traversal-order accident. The shared (cross-query) relation cache 
> already re-applies the caller's options on a hit, so this is an inconsistency 
> between the two cache paths.
> This affects INSERT, UPDATE, and MERGE and should be fixed once in the shared 
> resolution path so each reference honors exactly its own options. This 
> subsumes the separately-noted INSERT self-select option-drop.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to