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

Yan Yan updated SPARK-60111:
----------------------------
    Description: 
DataSourceV2Relation can be rebuilt without carrying its TreeNode tags in two 
paths.

h3. Expected behavior

Rebuilding the same logical relation should preserve its TreeNode tags, 
consistent with TreeNode transformation semantics and 
LogicalRelation.withMetadataColumns.

h3. Actual behavior

DataSourceV2Relation.withMetadataColumns and the DataSource V2 target-cleaning 
branch in Analyzer.ResolveOutputRelation use the case-class copy method 
directly. The generated copy method does not call copyTagsFrom, so tags on the 
original relation are absent from the rebuilt relation.

h3. Minimal reproduction

Create a DataSourceV2Relation, set a TreeNodeTag on it, and then either add a 
metadata column with withMetadataColumns or run ResolveOutputRelation on a 
write whose query needs projection. In both cases the returned relation is a 
new object and getTagValue returns None.

h3. Root cause and fix

These paths bypass TreeNode.makeCopy and the transform helpers that normally 
preserve tags. Explicitly copy tags from the original relation after rebuilding 
it, and add regression tests for both paths.

PR: https://github.com/apache/spark/pull/59330


  was:
DataSourceV2Relation can be rebuilt without carrying its TreeNode tags in two 
paths.

h3. Expected behavior

Rebuilding the same logical relation should preserve its TreeNode tags, 
consistent with TreeNode transformation semantics and 
LogicalRelation.withMetadataColumns.

h3. Actual behavior

DataSourceV2Relation.withMetadataColumns and the DataSource V2 target-cleaning 
branch in Analyzer.ResolveOutputRelation use the case-class copy method 
directly. The generated copy method does not call copyTagsFrom, so tags on the 
original relation are absent from the rebuilt relation.

h3. Minimal reproduction

Create a DataSourceV2Relation, set a TreeNodeTag on it, and then either add a 
metadata column with withMetadataColumns or run ResolveOutputRelation on a 
write whose query needs projection. In both cases the returned relation is a 
new object and getTagValue returns None.

h3. Root cause and fix

These paths bypass TreeNode.makeCopy and the transform helpers that normally 
preserve tags. Explicitly copy tags from the original relation after rebuilding 
it, and add regression tests for both paths.



> Preserve tags when rebuilding DataSource V2 relations
> -----------------------------------------------------
>
>                 Key: SPARK-60111
>                 URL: https://issues.apache.org/jira/browse/SPARK-60111
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 3.1.0
>            Reporter: Yan Yan
>            Priority: Minor
>              Labels: pull-request-available
>
> DataSourceV2Relation can be rebuilt without carrying its TreeNode tags in two 
> paths.
> h3. Expected behavior
> Rebuilding the same logical relation should preserve its TreeNode tags, 
> consistent with TreeNode transformation semantics and 
> LogicalRelation.withMetadataColumns.
> h3. Actual behavior
> DataSourceV2Relation.withMetadataColumns and the DataSource V2 
> target-cleaning branch in Analyzer.ResolveOutputRelation use the case-class 
> copy method directly. The generated copy method does not call copyTagsFrom, 
> so tags on the original relation are absent from the rebuilt relation.
> h3. Minimal reproduction
> Create a DataSourceV2Relation, set a TreeNodeTag on it, and then either add a 
> metadata column with withMetadataColumns or run ResolveOutputRelation on a 
> write whose query needs projection. In both cases the returned relation is a 
> new object and getTagValue returns None.
> h3. Root cause and fix
> These paths bypass TreeNode.makeCopy and the transform helpers that normally 
> preserve tags. Explicitly copy tags from the original relation after 
> rebuilding it, and add regression tests for both paths.
> PR: https://github.com/apache/spark/pull/59330



--
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