[
https://issues.apache.org/jira/browse/SPARK-59948?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Peter Toth reassigned SPARK-59948:
----------------------------------
Assignee: Yahya Kisana
> Strip aliases from a DSv2 reported ordering on a nested field
> -------------------------------------------------------------
>
> Key: SPARK-59948
> URL: https://issues.apache.org/jira/browse/SPARK-59948
> Project: Spark
> Issue Type: Bug
> Components: SQL
> Affects Versions: 5.0.0
> Reporter: Anurag Mantripragada
> Assignee: Yahya Kisana
> Priority: Major
> Labels: pull-request-available
>
> {{V2ScanPartitioningAndOrdering}} converts a scan's
> {{SupportsReportOrdering}} ordering on every application of the rule, and
> unlike the partitioning pass, the ordering pass has no guard. For a nested
> sort key such as {{s.x}}, {{LogicalPlan.resolve}} returns a new
> {{Alias(GetStructField(...))}} with a fresh {{ExprId}} each time.
> As a result:
> * In testing, the "Early Filter and Projection Push-Down" Once batch fails
> its idempotence check:
> {noformat}
> Once strategy's idempotence is broken for batch Early Filter and Projection
> Push-Down
> {noformat}
> * In production, the aliased {{SortOrder}} never semantically equals a
> required {{SortOrder}} on {{s.x}}, so Spark adds a redundant {{SortExec}}
> even though the scan reports that ordering.
> * {{PlanMerger}} treats two derivations of the same nested ordering as
> different, so scan merging can decline.
> Repro: a DSv2 scan that implements {{SupportsReportOrdering}} and reports
> {{sort(FieldReference(Seq("s", "x")), ASC, NULLS_FIRST)}} on a table with a
> struct column {{s}}, then a query such as {{SELECT s.x FROM t}} or
> {{sortWithinPartitions($"s.x")}}.
> Proposed fix: strip aliases from the converted sort orders in the ordering
> pass (e.g. {{trimAliases}} from {{AliasHelper}}), so that repeated
> applications produce equal plans and the reported ordering can satisfy a
> required ordering.
> This is pre-existing on master. It was found while reviewing SPARK-59721
> (https://github.com/apache/spark/pull/58979). A related but separate issue: a
> nested partition key gets the same {{Alias}} and is rejected by
> {{KeyedPartitioning.supportsExpressions}}, so storage-partitioned join never
> applies to it.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]