ResolveCreateNamedStruct Logical Resolution Rule — Resolving NamePlaceholders In CreateNamedStruct Expressions
ResolveCreateNamedStruct is a logical resolution rule that replaces NamePlaceholders with Literals for the names in CreateNamedStruct expressions in an entire logical query plan.
ResolveCreateNamedStruct is part of the Resolution fixed-point batch in the standard batches of the Analyzer.
ResolveCreateNamedStruct is simply a Catalyst rule for transforming logical plans, i.e. Rule[LogicalPlan].
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
scala> :type spark org.apache.spark.sql.SparkSession val q = spark.range(1).select(struct($"id")) val logicalPlan = q.queryExecution.logical scala> println(logicalPlan.numberedTreeString) 00 'Project [unresolvedalias(named_struct(NamePlaceholder, 'id), None)] 01 +- AnalysisBarrier 02 +- Range (0, 1, step=1, splits=Some(8)) // Let's resolve references first import spark.sessionState.analyzer.ResolveReferences val planWithRefsResolved = ResolveReferences(logicalPlan) import org.apache.spark.sql.catalyst.analysis.ResolveCreateNamedStruct val afterResolveCreateNamedStruct = ResolveCreateNamedStruct(planWithRefsResolved) scala> println(afterResolveCreateNamedStruct.numberedTreeString) 00 'Project [unresolvedalias(named_struct(id, id#4L), None)] 01 +- AnalysisBarrier 02 +- Range (0, 1, step=1, splits=Some(8)) |
Executing Rule — apply Method
|
1 2 3 4 5 |
apply(plan: LogicalPlan): LogicalPlan |
|
Note
|
apply is part of the Rule Contract to execute (apply) a rule on a TreeNode (e.g. LogicalPlan).
|
apply traverses all Catalyst expressions (in the input LogicalPlan) that are CreateNamedStruct expressions which are not resolved yet and replaces NamePlaceholders with Literal expressions.
In other words, apply finds unresolved CreateNamedStruct expressions with NamePlaceholder expressions in the children and replaces them with the name of corresponding NamedExpression, but only if the NamedExpression is resolved.
In the end, apply creates a CreateNamedStruct with new children.
spark技术分享