From 436f72fc81aa74026b5ecae9519c6bd725d9645c Mon Sep 17 00:00:00 2001 From: Eric Yang Date: Thu, 9 Apr 2026 12:20:16 -0700 Subject: [PATCH] [SPARK-56426][SQL] Fix LATERAL VIEW column alias with dot in name fails to resolve --- .../apache/spark/sql/catalyst/analysis/Analyzer.scala | 6 +++++- .../scala/org/apache/spark/sql/SQLQuerySuite.scala | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala index 3b4d725840935..ca13168f74c43 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala @@ -3190,7 +3190,11 @@ class Analyzer( throw QueryCompilationErrors.nestedGeneratorError(g.generator) } g.copy(generatorOutput = - GeneratorResolution.makeGeneratorOutput(g.generator, g.generatorOutput.map(_.name))) + GeneratorResolution.makeGeneratorOutput( + g.generator, g.generatorOutput.map { + case ua: UnresolvedAttribute => ua.nameParts.head + case a => a.name + })) } } } diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala index 3ccc5293f6590..9e94c0b6e572d 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala @@ -3440,6 +3440,17 @@ class SQLQuerySuite extends QueryTest with SharedSparkSession with AdaptiveSpark checkAnswer(df2, Row(1) :: Nil) } + test("SPARK-56426: LATERAL VIEW column alias with dot in name should resolve correctly") { + checkAnswer( + sql( + """ + |SELECT id, `skill.inst` + |FROM VALUES (1, array('a', 'b')) AS (id, skills) + |LATERAL VIEW explode(skills) skills_table AS `skill.inst` + """.stripMargin), + Row(1, "a") :: Row(1, "b") :: Nil) + } + test("SPARK-30279 Support 32 or more grouping attributes for GROUPING_ID()") { withTempView("t") { sql("CREATE TEMPORARY VIEW t AS SELECT * FROM " +