

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 单调函数
<a name="sql-reference-monotonic"></a>

```
MONOTONIC(<expression>)
```

流式 GROUP BY 要求至少有一个分组表达式是单调且非常量的。事先已知的唯一单调列是 ROWTIME。有关更多信息，请参阅 [单调表达式和运算符](sql-reference-monotonic-expressions-operators.md)。

MONOTONIC 函数允许您声明给定表达式是单调的，从而使流式 GROUP BY 能够使用该表达式作为键。

MONOTONIC 函数会计算其参数并返回结果（与其参数的类型相同）。

通过将表达式包含在 MONOTONIC 中，即表示您断言该表达式的值要么不增加，要么不减少，而且永远不会改变方向。例如，如果您有一个由订单行项目组成的流 LINEITEMS，并且您编写了 MONOTONIC(orderId)，那么您就是在断言行项目在该流中是连续的。如果有订单 1000 的行项目，然后是订单 1001 的行项目，再然后是订单 1005 的行项目，那就没问题。如果接着有订单 1001 的行项目（也就是说，行项目序列变为 1000、1001、1005、1001），那将是非法的。同样，987、974、823 的行项目序列是合法的，但以下行项目序列是非法的：
+ 987、974、823、973
+ 987、974、823、1056

声明为单调的表达式可以减少，甚至具有任意顺序。

请注意，MONOTONIC 的定义正是 GROUP BY 要继续运作所需的。

如果声明为单调的表达式不是单调的（也就是说，如果断言对实际数据无效），则表示未指定 Amazon Kinesis Data Analytics 行为。

换句话说，如果您确定表达式是单调的，则可以使用此 MONOTONIC 函数让 Amazon Kinesis Data Analytics 能够将该表达式视为单调的。

但是，如果您是错的，并且通过计算此表达式得出的值从升序更改为降序或从降序更改为升序，则可能会引发意外结果。Amazon Kinesis Data Analytics 流式 SQL 将相信您的话，并根据您确定表达式是单调表达式来运行。但是，如果实际上不是单调的，那么生成的 Amazon Kinesis Data Analytics 行为就无法事先确定，因此结果可能不符合预期或期望。