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]