单调函数 - Amazon Kinesis Data Analytics

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

单调函数

MONOTONIC(<expression>)

Streaming GROUP BY 要求分组表达式中至少有一个是单调和非常数。事先已知的唯一单调列是 ROWTIME。有关更多信息,请参阅单调表达式和运算符

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 的行为。

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

但是,如果您错了,并且计算表达式所得的值从升序变为降序或从降序变为升序,则可能会出现意想不到的结果。Amazon Kinesis Data Analytics 直播 SQL 将信守你的诺言,确保表达式是单调的。但是,如果事实上它不是单调的,则无法事先确定由此产生的 Amazon Kinesis Data Analytics 行为,因此结果可能不符合预期或期望。