This is an automated email from the ASF dual-hosted git repository.

lgbo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git


The following commit(s) were added to refs/heads/main by this push:
     new 30f9df990 support percent_rank (#6386)
30f9df990 is described below

commit 30f9df990070ae0024de27945bac8ef147035ab5
Author: lgbo <[email protected]>
AuthorDate: Wed Jul 10 15:19:25 2024 +0800

    support percent_rank (#6386)
---
 .../org/apache/gluten/backendsapi/clickhouse/CHBackend.scala  |  3 ++-
 .../gluten/backendsapi/clickhouse/CHSparkPlanExecApi.scala    |  2 +-
 .../execution/GlutenClickHouseTPCHSaltNullParquetSuite.scala  | 11 +++++++++++
 cpp-ch/local-engine/Parser/WindowRelParser.cpp                |  1 +
 .../CommonAggregateFunctionParser.cpp                         |  1 +
 5 files changed, 16 insertions(+), 2 deletions(-)

diff --git 
a/backends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHBackend.scala
 
b/backends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHBackend.scala
index d369b8c16..3b8499ac8 100644
--- 
a/backends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHBackend.scala
+++ 
b/backends-clickhouse/src/main/scala/org/apache/gluten/backendsapi/clickhouse/CHBackend.scala
@@ -237,7 +237,8 @@ object CHBackendSettings extends BackendSettingsApi with 
Logging {
           }
 
           wExpression.windowFunction match {
-            case _: RowNumber | _: AggregateExpression | _: Rank | _: 
DenseRank | _: NTile =>
+            case _: RowNumber | _: AggregateExpression | _: Rank | _: 
DenseRank | _: PercentRank |
+                _: NTile =>
               allSupported = allSupported
             case l: Lag =>
               checkLagOrLead(l.third)
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 f5feade88..7665216ce 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
@@ -704,7 +704,7 @@ class CHSparkPlanExecApi extends SparkPlanExecApi {
         val columnName = s"${aliasExpr.name}_${aliasExpr.exprId.id}"
         val wExpression = aliasExpr.child.asInstanceOf[WindowExpression]
         wExpression.windowFunction match {
-          case wf @ (RowNumber() | Rank(_) | DenseRank(_)) =>
+          case wf @ (RowNumber() | Rank(_) | DenseRank(_) | PercentRank(_)) =>
             val aggWindowFunc = wf.asInstanceOf[AggregateWindowFunction]
             val frame = aggWindowFunc.frame.asInstanceOf[SpecifiedWindowFrame]
             val windowFunctionNode = ExpressionBuilder.makeWindowFunction(
diff --git 
a/backends-clickhouse/src/test/scala/org/apache/gluten/execution/GlutenClickHouseTPCHSaltNullParquetSuite.scala
 
b/backends-clickhouse/src/test/scala/org/apache/gluten/execution/GlutenClickHouseTPCHSaltNullParquetSuite.scala
index b0d3e1bdb..b7bf818a3 100644
--- 
a/backends-clickhouse/src/test/scala/org/apache/gluten/execution/GlutenClickHouseTPCHSaltNullParquetSuite.scala
+++ 
b/backends-clickhouse/src/test/scala/org/apache/gluten/execution/GlutenClickHouseTPCHSaltNullParquetSuite.scala
@@ -978,6 +978,17 @@ class GlutenClickHouseTPCHSaltNullParquetSuite extends 
GlutenClickHouseTPCHAbstr
     compareResultsAgainstVanillaSpark(sql, true, { _ => })
   }
 
+  test("window percent_rank") {
+    val sql =
+      """
+        |select n_regionkey, n_nationkey,
+        | percent_rank(n_nationkey) OVER (PARTITION BY n_regionkey ORDER BY 
n_nationkey) as n_rank
+        |from nation
+        |order by n_regionkey, n_nationkey
+        |""".stripMargin
+    compareResultsAgainstVanillaSpark(sql, true, { _ => })
+  }
+
   test("window ntile") {
     val sql =
       """
diff --git a/cpp-ch/local-engine/Parser/WindowRelParser.cpp 
b/cpp-ch/local-engine/Parser/WindowRelParser.cpp
index 4125879b5..2317c8098 100644
--- a/cpp-ch/local-engine/Parser/WindowRelParser.cpp
+++ b/cpp-ch/local-engine/Parser/WindowRelParser.cpp
@@ -172,6 +172,7 @@ WindowRelParser::parseWindowFrameType(const std::string & 
function_name, const s
     static const std::unordered_map<std::string, substrait::WindowType> 
special_function_frame_type = {
         {"rank", substrait::RANGE},
         {"dense_rank", substrait::RANGE},
+        {"percent_rank", substrait::RANGE}
     };
 
     substrait::WindowType frame_type;
diff --git 
a/cpp-ch/local-engine/Parser/aggregate_function_parser/CommonAggregateFunctionParser.cpp
 
b/cpp-ch/local-engine/Parser/aggregate_function_parser/CommonAggregateFunctionParser.cpp
index e7d6e1b9b..d88885a31 100644
--- 
a/cpp-ch/local-engine/Parser/aggregate_function_parser/CommonAggregateFunctionParser.cpp
+++ 
b/cpp-ch/local-engine/Parser/aggregate_function_parser/CommonAggregateFunctionParser.cpp
@@ -40,6 +40,7 @@ REGISTER_COMMON_AGGREGATE_FUNCTION_PARSER(FirstIgnoreNull, 
first_ignore_null, fi
 REGISTER_COMMON_AGGREGATE_FUNCTION_PARSER(Last, last, last_value_respect_nulls)
 REGISTER_COMMON_AGGREGATE_FUNCTION_PARSER(LastIgnoreNull, last_ignore_null, 
last_value)
 REGISTER_COMMON_AGGREGATE_FUNCTION_PARSER(DenseRank, dense_rank, dense_rank)
+REGISTER_COMMON_AGGREGATE_FUNCTION_PARSER(PercentRank, percent_rank, 
percent_rank)
 REGISTER_COMMON_AGGREGATE_FUNCTION_PARSER(Rank, rank, rank)
 REGISTER_COMMON_AGGREGATE_FUNCTION_PARSER(RowNumber, row_number, row_number)
 REGISTER_COMMON_AGGREGATE_FUNCTION_PARSER(CountDistinct, count_distinct, 
uniqExact)


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

Reply via email to