From b1a3e29ca101f3dbdd338c82b9f25d1fb1c69b4c Mon Sep 17 00:00:00 2001 From: shuai-xu Date: Thu, 12 Sep 2024 15:27:11 +0800 Subject: [PATCH 1/8] [GLUTEN-7116] [CH] support outer explode --- .../clickhouse/CHSparkPlanExecApi.scala | 8 ++++++++ .../execution/CHGenerateExecTransformer.scala | 2 ++ .../expression/CHExpressionTransformer.scala | 9 +++++++++ .../execution/GenerateExecTransformer.scala | 1 + .../Parser/RelParsers/ProjectRelParser.cpp | 2 +- .../gluten/substrait/rel/GenerateRelNode.java | 15 ++++++++++++--- .../apache/gluten/substrait/rel/RelBuilder.java | 6 ++++-- .../execution/GlutenHiveSQLQueryCHSuite.scala | 17 +++++++++++++++++ 8 files changed, 54 insertions(+), 6 deletions(-) diff --git a/backends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHSparkPlanExecApi.scala b/backends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHSparkPlanExecApi.scala index f765a75d2f7d..826a0deb5b29 100644 --- a/backends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHSparkPlanExecApi.scala +++ b/backends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHSparkPlanExecApi.scala @@ -925,4 +925,12 @@ class CHSparkPlanExecApi extends SparkPlanExecApi with Logging { limit, mode, child) + + override def genStringSplitTransformer( + substraitExprName: String, + srcExpr: ExpressionTransformer, + regexExpr: ExpressionTransformer, + limitExpr: ExpressionTransformer, + original: StringSplit): ExpressionTransformer = + CHStringSplitTransformer(substraitExprName, Seq(srcExpr, regexExpr, limitExpr), original) } diff --git a/backends-clickhouse/src/main/scala/org/apache/gluten/execution/CHGenerateExecTransformer.scala b/backends-clickhouse/src/main/scala/org/apache/gluten/execution/CHGenerateExecTransformer.scala index 44cb0deca523..fc7da0a6ddee 100644 --- a/backends-clickhouse/src/main/scala/org/apache/gluten/execution/CHGenerateExecTransformer.scala +++ b/backends-clickhouse/src/main/scala/org/apache/gluten/execution/CHGenerateExecTransformer.scala @@ -76,6 +76,7 @@ case class CHGenerateExecTransformer( inputRel, generatorNode, requiredChildOutputNodes.asJava, + outer, context, context.nextOperatorId(this.nodeName)) } else { @@ -84,6 +85,7 @@ case class CHGenerateExecTransformer( generatorNode, requiredChildOutputNodes.asJava, getExtensionNodeForValidation, + outer, context, context.nextOperatorId(this.nodeName)) } diff --git a/backends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala b/backends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala index 7b389ead0091..281ec9a679f1 100644 --- a/backends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala +++ b/backends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala @@ -243,3 +243,12 @@ case class GetArrayItemTransformer( ConverterUtils.getTypeNode(getArrayItem.dataType, getArrayItem.nullable)) } } +case class CHStringSplitTransformer( + substraitExprName: String, + children: Seq[ExpressionTransformer], + original: Expression, + override val dataType: DataType = ArrayType(StringType, containsNull = true)) + extends ExpressionTransformer { + // In Spark: split return Array(String), while Array is nullable + // In CH: splitByXXX return Array(Nullable(String)) +} diff --git a/backends-velox/src/main/scala/org/apache/gluten/execution/GenerateExecTransformer.scala b/backends-velox/src/main/scala/org/apache/gluten/execution/GenerateExecTransformer.scala index be76ba54ed72..a81d812d9cde 100644 --- a/backends-velox/src/main/scala/org/apache/gluten/execution/GenerateExecTransformer.scala +++ b/backends-velox/src/main/scala/org/apache/gluten/execution/GenerateExecTransformer.scala @@ -91,6 +91,7 @@ case class GenerateExecTransformer( generatorNode, requiredChildOutputNodes.asJava, getExtensionNode(validation), + outer, context, operatorId) } diff --git a/cpp-ch/local-engine/Parser/RelParsers/ProjectRelParser.cpp b/cpp-ch/local-engine/Parser/RelParsers/ProjectRelParser.cpp index 6fb1f3d961cc..59c29dc24f16 100644 --- a/cpp-ch/local-engine/Parser/RelParsers/ProjectRelParser.cpp +++ b/cpp-ch/local-engine/Parser/RelParsers/ProjectRelParser.cpp @@ -199,7 +199,7 @@ ProjectRelParser::parseGenerate(DB::QueryPlanPtr query_plan, const substrait::Re /// ARRAY JOIN NameSet array_joined_columns{findArrayJoinNode(splitted_actions_dags.array_join)->result_name}; - auto array_join_action = std::make_shared(array_joined_columns, false, getContext()); + auto array_join_action = std::make_shared(array_joined_columns, generate_rel.outer(), getContext()); auto array_join_step = std::make_unique(query_plan->getCurrentDataStream(), array_join_action); array_join_step->setStepDescription("ARRAY JOIN In Generate"); steps.emplace_back(array_join_step.get()); diff --git a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java index dbe1f62ab10d..9af0511a6fb5 100644 --- a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java +++ b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java @@ -31,20 +31,27 @@ public class GenerateRelNode implements RelNode, Serializable { private final ExpressionNode generator; private final List childOutput; private final AdvancedExtensionNode extensionNode; + private final boolean outer; - GenerateRelNode(RelNode input, ExpressionNode generator, List childOutput) { - this(input, generator, childOutput, null); + GenerateRelNode( + RelNode input, + ExpressionNode generator, + List childOutput, + boolean outer) { + this(input, generator, childOutput, null, outer); } GenerateRelNode( RelNode input, ExpressionNode generator, List childOutput, - AdvancedExtensionNode extensionNode) { + AdvancedExtensionNode extensionNode, + boolean outer) { this.input = input; this.generator = generator; this.childOutput = childOutput; this.extensionNode = extensionNode; + this.outer = outer; } @Override @@ -67,6 +74,8 @@ public Rel toProtobuf() { generateRelBuilder.addChildOutput(node.toProtobuf()); } + generateRelBuilder.setOuter(outer); + if (extensionNode != null) { generateRelBuilder.setAdvancedExtension(extensionNode.toProtobuf()); } diff --git a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/RelBuilder.java b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/RelBuilder.java index b784e3e7f273..def1dca0a028 100644 --- a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/RelBuilder.java +++ b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/RelBuilder.java @@ -299,10 +299,11 @@ public static RelNode makeGenerateRel( RelNode input, ExpressionNode generator, List childOutput, + boolean outer, SubstraitContext context, Long operatorId) { context.registerRelToOperator(operatorId); - return new GenerateRelNode(input, generator, childOutput); + return new GenerateRelNode(input, generator, childOutput, outer); } public static RelNode makeGenerateRel( @@ -310,9 +311,10 @@ public static RelNode makeGenerateRel( ExpressionNode generator, List childOutput, AdvancedExtensionNode extensionNode, + boolean outer, SubstraitContext context, Long operatorId) { context.registerRelToOperator(operatorId); - return new GenerateRelNode(input, generator, childOutput, extensionNode); + return new GenerateRelNode(input, generator, childOutput, extensionNode, outer); } } diff --git a/gluten-ut/spark33/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala b/gluten-ut/spark33/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala index dd14a18553b9..8b71d75258bd 100644 --- a/gluten-ut/spark33/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala +++ b/gluten-ut/spark33/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala @@ -105,4 +105,21 @@ class GlutenHiveSQLQueryCHSuite extends GlutenHiveSQLQuerySuiteBase { purge = false) } + testGluten("GLUTEN-7116: Support outer explode") { + sql("create table if not exists test_7116 (id int, name string)") + sql("insert into test_7116 values (1, 'a,b'), (2, null), (null, 'c,d'), (3, '')") + val query = + """ + |select id, col_name + |from test_7116 lateral view outer explode(split(name, ',')) as col_name + |""".stripMargin + val df = sql(query) + checkAnswer( + df, + Seq(Row(1, 'a'), Row(1, 'b'), Row(2, null), Row(null, 'c'), Row(null, 'd'), Row(3, ""))) + spark.sessionState.catalog.dropTable( + TableIdentifier("test_7116"), + ignoreIfNotExists = true, + purge = false) + } } From f8b69908b341c7f9cf471e9accffa0b21d7d3028 Mon Sep 17 00:00:00 2001 From: shuai-xu Date: Thu, 12 Sep 2024 17:15:11 +0800 Subject: [PATCH 2/8] fix code style --- .../org/apache/gluten/substrait/rel/GenerateRelNode.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java index 9af0511a6fb5..17e59ef7ebdb 100644 --- a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java +++ b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java @@ -33,11 +33,7 @@ public class GenerateRelNode implements RelNode, Serializable { private final AdvancedExtensionNode extensionNode; private final boolean outer; - GenerateRelNode( - RelNode input, - ExpressionNode generator, - List childOutput, - boolean outer) { + GenerateRelNode(RelNode input, ExpressionNode generator, List childOutput, boolean outer) { this(input, generator, childOutput, null, outer); } From f95e2b8f21d796178baa1245e3dc0a665222ecf2 Mon Sep 17 00:00:00 2001 From: shuai-xu Date: Thu, 12 Sep 2024 17:37:34 +0800 Subject: [PATCH 3/8] fix code style --- .../org/apache/gluten/substrait/rel/GenerateRelNode.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java index 17e59ef7ebdb..9af0511a6fb5 100644 --- a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java +++ b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java @@ -33,7 +33,11 @@ public class GenerateRelNode implements RelNode, Serializable { private final AdvancedExtensionNode extensionNode; private final boolean outer; - GenerateRelNode(RelNode input, ExpressionNode generator, List childOutput, boolean outer) { + GenerateRelNode( + RelNode input, + ExpressionNode generator, + List childOutput, + boolean outer) { this(input, generator, childOutput, null, outer); } From 4fb5b8ec4ec380676b68ef48a0c08928b65037fd Mon Sep 17 00:00:00 2001 From: shuai-xu Date: Thu, 12 Sep 2024 17:42:52 +0800 Subject: [PATCH 4/8] fix code style --- .../org/apache/gluten/substrait/rel/GenerateRelNode.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java index 9af0511a6fb5..efd470891905 100644 --- a/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java +++ b/gluten-substrait/src/main/java/org/apache/gluten/substrait/rel/GenerateRelNode.java @@ -34,10 +34,7 @@ public class GenerateRelNode implements RelNode, Serializable { private final boolean outer; GenerateRelNode( - RelNode input, - ExpressionNode generator, - List childOutput, - boolean outer) { + RelNode input, ExpressionNode generator, List childOutput, boolean outer) { this(input, generator, childOutput, null, outer); } From c61e70998f28bc26ccaf7af7f72663c01772b5f9 Mon Sep 17 00:00:00 2001 From: shuai-xu Date: Thu, 12 Sep 2024 18:06:28 +0800 Subject: [PATCH 5/8] fix code style --- .../apache/gluten/expression/CHExpressionTransformer.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala b/backends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala index 281ec9a679f1..0851e6aa8a37 100644 --- a/backends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala +++ b/backends-clickhouse/src/main/scala/org/apache/gluten/expression/CHExpressionTransformer.scala @@ -249,6 +249,6 @@ case class CHStringSplitTransformer( original: Expression, override val dataType: DataType = ArrayType(StringType, containsNull = true)) extends ExpressionTransformer { - // In Spark: split return Array(String), while Array is nullable - // In CH: splitByXXX return Array(Nullable(String)) + // In Spark: split return Array(String), while Array is nullable + // In CH: splitByXXX return Array(Nullable(String)) } From 1c9ca2fd5022fd0a7053f0a83833c679122c81ca Mon Sep 17 00:00:00 2001 From: shuai-xu Date: Thu, 12 Sep 2024 19:20:40 +0800 Subject: [PATCH 6/8] fix lost function --- .../org/apache/gluten/backendsapi/SparkPlanExecApi.scala | 8 ++++++++ .../apache/gluten/expression/ExpressionConverter.scala | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/gluten-substrait/src/main/scala/org/apache/gluten/backendsapi/SparkPlanExecApi.scala b/gluten-substrait/src/main/scala/org/apache/gluten/backendsapi/SparkPlanExecApi.scala index dd4150806cfc..71fef82722c6 100644 --- a/gluten-substrait/src/main/scala/org/apache/gluten/backendsapi/SparkPlanExecApi.scala +++ b/gluten-substrait/src/main/scala/org/apache/gluten/backendsapi/SparkPlanExecApi.scala @@ -693,4 +693,12 @@ trait SparkPlanExecApi { attributeSeq: Seq[Attribute]): ExpressionTransformer = { HiveUDFTransformer.replaceWithExpressionTransformer(expr, attributeSeq) } + + def genStringSplitTransformer( + substraitExprName: String, + srcExpr: ExpressionTransformer, + regexExpr: ExpressionTransformer, + limitExpr: ExpressionTransformer, + original: StringSplit): ExpressionTransformer = + GenericExpressionTransformer(substraitExprName, Seq(srcExpr, regexExpr, limitExpr), original) } diff --git a/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala b/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala index 606cbd96e026..52350ebf0705 100644 --- a/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala +++ b/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala @@ -689,6 +689,14 @@ object ExpressionConverter extends SQLConfHelper with Logging { timeAdd.children, timeAdd ) + case ss: StringSplit => + BackendsApiManager.getSparkPlanExecApiInstance.genStringSplitTransformer( + substraitExprName, + replaceWithExpressionTransformer0(ss.str, attributeSeq, expressionsMap), + replaceWithExpressionTransformer0(ss.regex, attributeSeq, expressionsMap), + replaceWithExpressionTransformer0(ss.limit, attributeSeq, expressionsMap), + ss + ) case expr => GenericExpressionTransformer( substraitExprName, From 95e397239171458ab7adfd1efee16cf93c7500af Mon Sep 17 00:00:00 2001 From: shuai-xu Date: Fri, 13 Sep 2024 09:26:18 +0800 Subject: [PATCH 7/8] add tests for spark35 --- .../gluten/expression/ExpressionConverter.scala | 14 +++++++------- .../execution/GlutenHiveSQLQueryCHSuite.scala | 17 +++++++++++++++++ .../execution/GlutenHiveSQLQueryCHSuite.scala | 17 +++++++++++++++++ .../execution/GlutenHiveSQLQueryCHSuite.scala | 17 +++++++++++++++++ 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala b/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala index 52350ebf0705..98a556c11736 100644 --- a/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala +++ b/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala @@ -689,13 +689,13 @@ object ExpressionConverter extends SQLConfHelper with Logging { timeAdd.children, timeAdd ) - case ss: StringSplit => - BackendsApiManager.getSparkPlanExecApiInstance.genStringSplitTransformer( - substraitExprName, - replaceWithExpressionTransformer0(ss.str, attributeSeq, expressionsMap), - replaceWithExpressionTransformer0(ss.regex, attributeSeq, expressionsMap), - replaceWithExpressionTransformer0(ss.limit, attributeSeq, expressionsMap), - ss + case ss: StringSplit => + BackendsApiManager.getSparkPlanExecApiInstance.genStringSplitTransformer( + substraitExprName, + replaceWithExpressionTransformer0(ss.str, attributeSeq, expressionsMap), + replaceWithExpressionTransformer0(ss.regex, attributeSeq, expressionsMap), + replaceWithExpressionTransformer0(ss.limit, attributeSeq, expressionsMap), + ss ) case expr => GenericExpressionTransformer( diff --git a/gluten-ut/spark32/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala b/gluten-ut/spark32/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala index dd14a18553b9..8b71d75258bd 100644 --- a/gluten-ut/spark32/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala +++ b/gluten-ut/spark32/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala @@ -105,4 +105,21 @@ class GlutenHiveSQLQueryCHSuite extends GlutenHiveSQLQuerySuiteBase { purge = false) } + testGluten("GLUTEN-7116: Support outer explode") { + sql("create table if not exists test_7116 (id int, name string)") + sql("insert into test_7116 values (1, 'a,b'), (2, null), (null, 'c,d'), (3, '')") + val query = + """ + |select id, col_name + |from test_7116 lateral view outer explode(split(name, ',')) as col_name + |""".stripMargin + val df = sql(query) + checkAnswer( + df, + Seq(Row(1, 'a'), Row(1, 'b'), Row(2, null), Row(null, 'c'), Row(null, 'd'), Row(3, ""))) + spark.sessionState.catalog.dropTable( + TableIdentifier("test_7116"), + ignoreIfNotExists = true, + purge = false) + } } diff --git a/gluten-ut/spark34/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala b/gluten-ut/spark34/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala index dd14a18553b9..8b71d75258bd 100644 --- a/gluten-ut/spark34/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala +++ b/gluten-ut/spark34/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala @@ -105,4 +105,21 @@ class GlutenHiveSQLQueryCHSuite extends GlutenHiveSQLQuerySuiteBase { purge = false) } + testGluten("GLUTEN-7116: Support outer explode") { + sql("create table if not exists test_7116 (id int, name string)") + sql("insert into test_7116 values (1, 'a,b'), (2, null), (null, 'c,d'), (3, '')") + val query = + """ + |select id, col_name + |from test_7116 lateral view outer explode(split(name, ',')) as col_name + |""".stripMargin + val df = sql(query) + checkAnswer( + df, + Seq(Row(1, 'a'), Row(1, 'b'), Row(2, null), Row(null, 'c'), Row(null, 'd'), Row(3, ""))) + spark.sessionState.catalog.dropTable( + TableIdentifier("test_7116"), + ignoreIfNotExists = true, + purge = false) + } } diff --git a/gluten-ut/spark35/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala b/gluten-ut/spark35/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala index dd14a18553b9..8b71d75258bd 100644 --- a/gluten-ut/spark35/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala +++ b/gluten-ut/spark35/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala @@ -105,4 +105,21 @@ class GlutenHiveSQLQueryCHSuite extends GlutenHiveSQLQuerySuiteBase { purge = false) } + testGluten("GLUTEN-7116: Support outer explode") { + sql("create table if not exists test_7116 (id int, name string)") + sql("insert into test_7116 values (1, 'a,b'), (2, null), (null, 'c,d'), (3, '')") + val query = + """ + |select id, col_name + |from test_7116 lateral view outer explode(split(name, ',')) as col_name + |""".stripMargin + val df = sql(query) + checkAnswer( + df, + Seq(Row(1, 'a'), Row(1, 'b'), Row(2, null), Row(null, 'c'), Row(null, 'd'), Row(3, ""))) + spark.sessionState.catalog.dropTable( + TableIdentifier("test_7116"), + ignoreIfNotExists = true, + purge = false) + } } From faea079cc7728d4e1b541dbf27ca2201d33ff722 Mon Sep 17 00:00:00 2001 From: shuai-xu Date: Fri, 13 Sep 2024 14:50:47 +0800 Subject: [PATCH 8/8] fix test failure --- .../spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala | 2 +- .../spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala | 2 +- .../spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala | 2 +- .../spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gluten-ut/spark32/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala b/gluten-ut/spark32/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala index 8b71d75258bd..e7d573ca5e7d 100644 --- a/gluten-ut/spark32/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala +++ b/gluten-ut/spark32/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala @@ -116,7 +116,7 @@ class GlutenHiveSQLQueryCHSuite extends GlutenHiveSQLQuerySuiteBase { val df = sql(query) checkAnswer( df, - Seq(Row(1, 'a'), Row(1, 'b'), Row(2, null), Row(null, 'c'), Row(null, 'd'), Row(3, ""))) + Seq(Row(1, "a"), Row(1, "b"), Row(2, null), Row(null, "c"), Row(null, "d"), Row(3, ""))) spark.sessionState.catalog.dropTable( TableIdentifier("test_7116"), ignoreIfNotExists = true, diff --git a/gluten-ut/spark33/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala b/gluten-ut/spark33/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala index 8b71d75258bd..e7d573ca5e7d 100644 --- a/gluten-ut/spark33/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala +++ b/gluten-ut/spark33/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala @@ -116,7 +116,7 @@ class GlutenHiveSQLQueryCHSuite extends GlutenHiveSQLQuerySuiteBase { val df = sql(query) checkAnswer( df, - Seq(Row(1, 'a'), Row(1, 'b'), Row(2, null), Row(null, 'c'), Row(null, 'd'), Row(3, ""))) + Seq(Row(1, "a"), Row(1, "b"), Row(2, null), Row(null, "c"), Row(null, "d"), Row(3, ""))) spark.sessionState.catalog.dropTable( TableIdentifier("test_7116"), ignoreIfNotExists = true, diff --git a/gluten-ut/spark34/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala b/gluten-ut/spark34/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala index 8b71d75258bd..e7d573ca5e7d 100644 --- a/gluten-ut/spark34/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala +++ b/gluten-ut/spark34/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala @@ -116,7 +116,7 @@ class GlutenHiveSQLQueryCHSuite extends GlutenHiveSQLQuerySuiteBase { val df = sql(query) checkAnswer( df, - Seq(Row(1, 'a'), Row(1, 'b'), Row(2, null), Row(null, 'c'), Row(null, 'd'), Row(3, ""))) + Seq(Row(1, "a"), Row(1, "b"), Row(2, null), Row(null, "c"), Row(null, "d"), Row(3, ""))) spark.sessionState.catalog.dropTable( TableIdentifier("test_7116"), ignoreIfNotExists = true, diff --git a/gluten-ut/spark35/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala b/gluten-ut/spark35/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala index 8b71d75258bd..e7d573ca5e7d 100644 --- a/gluten-ut/spark35/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala +++ b/gluten-ut/spark35/src/test/scala/org/apache/spark/sql/hive/execution/GlutenHiveSQLQueryCHSuite.scala @@ -116,7 +116,7 @@ class GlutenHiveSQLQueryCHSuite extends GlutenHiveSQLQuerySuiteBase { val df = sql(query) checkAnswer( df, - Seq(Row(1, 'a'), Row(1, 'b'), Row(2, null), Row(null, 'c'), Row(null, 'd'), Row(3, ""))) + Seq(Row(1, "a"), Row(1, "b"), Row(2, null), Row(null, "c"), Row(null, "d"), Row(3, ""))) spark.sessionState.catalog.dropTable( TableIdentifier("test_7116"), ignoreIfNotExists = true,