Github user rberenguel commented on a diff in the pull request:
https://github.com/apache/spark/pull/17100#discussion_r146234832
--- Diff:
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala
---
@@ -270,12 +270,27 @@ trait CheckAnalysis extends PredicateHelper {
operator match {
case o if o.children.nonEmpty && o.missingInput.nonEmpty =>
+ val resolver = plan.conf.resolver
+ val attrsWithSameName = o.missingInput.filter(missing =>
+ o.inputSet.exists(input => resolver(missing.name,
input.name)))
+ val repeatedNameHint = if (attrsWithSameName.nonEmpty) {
+ val commonNames = attrsWithSameName.map(_.name).mkString(",")
+ s"""|Please check attribute(s) `$commonNames`, they seem to
appear in two
+ |different input operators, with the same
name.""".stripMargin
+ } else {
+ ""
+ }
+
val missingAttributes = o.missingInput.mkString(",")
- val input = o.inputSet.mkString(",")
+ val availableAttributes = o.inputSet.mkString(",")
failAnalysis(
- s"resolved attribute(s) $missingAttributes missing from
$input " +
- s"in operator ${operator.simpleString}")
+ s"""Some resolved attribute(s) are not present among the
available attributes
+ |for a query.
+ |$missingAttributes is not in $availableAttributes.
+ |$repeatedNameHint
+ |The failed query was for operator
+ |${operator.simpleString}""".stripMargin)
--- End diff --
Hmmm seems reasonable, indeed. and avoids that horrible trailing newline.
Thanks a lot :)
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]