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: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org