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

ASF GitHub Bot updated SPARK-60766:
-----------------------------------
    Labels: pull-request-available  (was: )

> Prune nested fields through dynamic array indices and Map keys
> --------------------------------------------------------------
>
>                 Key: SPARK-60766
>                 URL: https://issues.apache.org/jira/browse/SPARK-60766
>             Project: Spark
>          Issue Type: Improvement
>          Components: SQL
>    Affects Versions: 4.2.0
>            Reporter: Chao Sun
>            Priority: Major
>              Labels: pull-request-available
>
> Nested schema pruning currently stops at GetMapValue/GetArrayItem/ElementAt 
> when the key or index cannot be evaluated as a constant. This preserves 
> correctness, but makes queries such as m[key_column].id and 
> items[index_column].id request the complete value/element Struct, including 
> unused payload fields.
> A reproducible Parquet example in spark-shell:
> {code:scala}
> spark.conf.set("spark.sql.optimizer.nestedSchemaPruning.enabled", "true")
> val path = "/tmp/spark-dynamic-selector-pruning"
> spark.sql("""SELECT 'chosen' AS lookup_key,
>   map('chosen', named_struct('id', 42, 'payload', 'unused')) AS m""")
>   .write.mode("overwrite").parquet(path)
> val input = spark.read.parquet(path)
> input.selectExpr("m['chosen'].id").explain()
> input.selectExpr("m[lookup_key].id").explain()
> {code}
> Both queries return 42. The constant lookup can request only id from the Map 
> values, while the dynamic lookup requests both id and payload, plus 
> lookup_key. The desired dynamic read schema is 
> struct<lookup_key:string,m:map<string,struct<id:int>>>.
> SPARK-42163 introduced the conservative restriction because the selector 
> itself may reference a nested field, and pruning must not discard that input. 
> The proposed change extends the existing additional-dependency traversal to 
> collect every key/index input while SelectedField follows the collection 
> input. ProjectionOverSchema also needs to rebind dynamic element_at 
> expressions after narrowing.
> Scope: dynamic bracket Map/array access and element_at over scan-rooted 
> collections. Preserve selector dependencies even when they refer to the same 
> collection, occur beneath null checks, or interact with supported array 
> functions. Preserve field metadata, field ordinals, null results and 
> ANSI/index error behavior. No new settings, dependencies, or public API.
> Validation should cover Catalyst schema/ordinal behavior and actual Parquet 
> read schemas/results across V1/V2 and vectorized/row readers. The existing 
> SPARK-42163 regression should require a narrower schema. Include renamed 
> field-ID paths and selector dependencies under IsNull/IsNotNull. This is a 
> missed optimization, not a reported end-to-end speedup.
> Related: SPARK-42163 (original safety restriction), SPARK-40033 (element_at 
> pruning), SPARK-58772 (metadata preservation, already present on master).



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

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

Reply via email to