Github user wangyum commented on a diff in the pull request:
https://github.com/apache/spark/pull/21782#discussion_r202931883
--- Diff:
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
---
@@ -306,44 +306,60 @@ class AstBuilder(conf: SQLConf) extends
SqlBaseBaseVisitor[AnyRef] with Logging
}
/**
- * Add ORDER BY/SORT BY/CLUSTER BY/DISTRIBUTE BY/LIMIT/WINDOWS clauses
to the logical plan. These
- * clauses determine the shape (ordering/partitioning/rows) of the query
result.
+ * Add ORDER BY/SORT BY/CLUSTER BY/DISTRIBUTE BY/RANGE PARTITION
BY/LIMIT/WINDOWS
+ * clauses to the logical plan.
+ * These clauses determine the shape (ordering/partitioning/rows) of the
query result.
*/
private def withQueryResultClauses(
ctx: QueryOrganizationContext,
query: LogicalPlan): LogicalPlan = withOrigin(ctx) {
import ctx._
- // Handle ORDER BY, SORT BY, DISTRIBUTE BY, and CLUSTER BY clause.
+ // Handle ORDER BY, SORT BY, DISTRIBUTE BY, RANGE PARTITION BY and
CLUSTER BY clause.
+ val isOrder = !order.isEmpty
+ val isSort = !sort.isEmpty
+ val isDistributeBy = !distributeBy.isEmpty
+ val isClusterBy = !clusterBy.isEmpty
+ val isRangePartitionBy = !rangePartitionBy.isEmpty
val withOrder = if (
- !order.isEmpty && sort.isEmpty && distributeBy.isEmpty &&
clusterBy.isEmpty) {
+ isOrder && !isSort && !isDistributeBy && !isClusterBy &&
!isRangePartitionBy) {
// ORDER BY ...
Sort(order.asScala.map(visitSortItem), global = true, query)
- } else if (order.isEmpty && !sort.isEmpty && distributeBy.isEmpty &&
clusterBy.isEmpty) {
+ } else if (!isOrder && isSort && !isDistributeBy && !isClusterBy &&
!isRangePartitionBy) {
// SORT BY ...
Sort(sort.asScala.map(visitSortItem), global = false, query)
- } else if (order.isEmpty && sort.isEmpty && !distributeBy.isEmpty &&
clusterBy.isEmpty) {
+ } else if (!isOrder && !isSort && isDistributeBy && !isClusterBy &&
!isRangePartitionBy) {
// DISTRIBUTE BY ...
withRepartitionByExpression(ctx, expressionList(distributeBy), query)
- } else if (order.isEmpty && !sort.isEmpty && !distributeBy.isEmpty &&
clusterBy.isEmpty) {
+ } else if (!isOrder && isSort && isDistributeBy && !isClusterBy &&
!isRangePartitionBy) {
// SORT BY ... DISTRIBUTE BY ...
Sort(
sort.asScala.map(visitSortItem),
global = false,
withRepartitionByExpression(ctx, expressionList(distributeBy),
query))
- } else if (order.isEmpty && sort.isEmpty && distributeBy.isEmpty &&
!clusterBy.isEmpty) {
+ } else if (!isOrder && !isSort && !isDistributeBy && isClusterBy &&
!isRangePartitionBy) {
// CLUSTER BY ...
val expressions = expressionList(clusterBy)
Sort(
expressions.map(SortOrder(_, Ascending)),
global = false,
withRepartitionByExpression(ctx, expressions, query))
- } else if (order.isEmpty && sort.isEmpty && distributeBy.isEmpty &&
clusterBy.isEmpty) {
+ } else if (!isOrder && !isSort && !isDistributeBy && !isClusterBy &&
isRangePartitionBy) {
+ // RANGE PARTITION BY ...
+ withRepartitionByExpression(ctx,
rangePartitionBy.asScala.map(visitSortItem), query)
--- End diff --
Will invoke
https://github.com/apache/spark/blob/e3201e165e41f076ec72175af246d12c0da529cf/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/basicLogicalOperators.scala#L888
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]