本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
单调函数
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 行为是未指定的。
换句话说,如果您确定某个表达式是单调的,则可以使用此 MONOTONIC 函数让 Amazon Kinesis Data Analytics 将该表达式视为单调表达式。
但是,如果您错了,并且计算表达式所得的值从升序变为降序或从降序变为升序,则可能会出现意想不到的结果。Amazon Kinesis Data Analytics Streaming SQL 将让你信守诺言,并保证表达式是单调的。但是,如果事实上它不是单调的,则无法事先确定由此产生的 Amazon Kinesis Data Analytics 行为,因此结果可能不符合预期或预期。