beliefer commented on a change in pull request #28685:
URL: https://github.com/apache/spark/pull/28685#discussion_r469674334



##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/windowExpressions.scala
##########
@@ -474,6 +479,52 @@ case class Lag(input: Expression, offset: Expression, 
default: Expression)
   override val direction = Descending
 }
 
+/**
+ * The NthValue function returns the value of `input` at the row that is the 
`offset`th row of
+ * the window frame (counting from 1). Offsets start at 0, which is the 
current row. When the
+ * value of `input` is null at the `offset`th row or there is no such an 
`offset`th row, null
+ * is returned.
+ *
+ * @param input expression to evaluate `offset`th row of the window frame.
+ * @param offset rows to jump ahead in the partition.
+ */
+@ExpressionDescription(
+  usage = """
+    _FUNC_(input[, offset]) - Returns the value of `input` at the row that is 
the`offset`th row
+      of the window frame (counting from 1). If the value of `input` at the 
`offset`th row is
+      null, null is returned. If there is no such an offset row (e.g., when 
the offset is 10,
+      size of the window frame less than 10), null is returned.
+  """,
+  since = "3.1.0")
+case class NthValue(input: Expression, offset: Expression)
+    extends OffsetWindowFunction {
+
+  override val default = Literal(null)
+
+  override val isWholeBased = true
+
+  override val direction = Ascending
+
+  override def checkInputDataTypes(): TypeCheckResult = {
+    val check = super.checkInputDataTypes()
+    if (check.isFailure) {
+      check
+    } else if (offset.foldable) {
+      offset.eval() match {
+        case i: Int if i <= 0 => TypeCheckFailure(
+          s"The 'offset' argument of nth_value must be greater than zero but 
it is $i.")
+        case i: Int => TypeCheckSuccess
+        case other => TypeCheckFailure(
+          s"The 'offset' parameter must be a int literal but it is $other.")

Review comment:
       OK




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to