有关与适用于 LiveAnalytics 的 Amazon Timestream 类似的功能,可以考虑使用适用于 InfluxDB 的 Amazon Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间,以实现实时分析。点击此处了解更多信息。
窗口函数
窗口函数对查询结果的各行进行计算。该函数在 HAVING 子句之后但在 ORDER BY 子句之前运行。调用窗口函数需要使用特殊语法,通过 OVER 子句指定窗口。窗口包含三个组件:
-
分区规范,用于将输入行划分为不同的分区。这类似于 GROUP BY 子句将行划分为不同组以便进行聚合函数计算的方式。
-
排序规范,用于确定窗口函数处理输入行时的顺序。
-
窗口框架,用于指定函数处理给定行时所涉及的行数范围。如果未指定框架,则默认为 RANGE UNBOUNDED PRECEDING,这与 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 相同。此框架包含从分区开头到当前行最后一个对等节点的所有行。
所有聚合函数均可通过添加 OVER 子句作为窗口函数使用。聚合函数针对当前行窗口框架内的每行数据进行计算。除聚合函数以外,适用于 LiveAnalytics 的 Timestream 还支持以下排序和取值函数。
| 函数 | 输出数据类型 | 描述 |
|---|---|---|
|
cume_dist() |
bigint |
返回某个值在值组中的累积分布。结果是窗口分区窗口排序中该行之前或与该行同级的行数除以窗口分区中的总行数。因此,排序中的任何平局值均计算为相同的分布值。 |
|
dense_rank() |
bigint |
返回某个值在值组中的排序。这与 rank() 类似,不同之处在于平局值不会导致序列出现间隔。 |
|
ntile(n) |
bigint |
将每个窗口分区的行划分为 n 个存储桶,桶号范围从 1 到最大 n。存储桶值最多相差 1。如果分区的行数不能被存储桶的数量整除,则将剩余行值从第一个存储桶开始,按每个存储桶分配一行。 |
|
percent_rank() |
double |
返回某个值在值组中的百分比排序。结果为 (r - 1) / (n - 1),其中 r 是该行的秩,n 是窗口分区中的总行数。 |
|
rank() |
bigint |
返回某个值在值组中的排序。排序等于 1 加上该行之前所有非同级行的行数。因此,排序中的平局值将导致序列出现间隔。对每个窗口分区进行排序。 |
|
row_number() |
bigint |
根据窗口分区内行的排序,为每行返回一个唯一的序号,从 1 开始。 |
|
first_value(x) |
[与输入相同] |
返回窗口的第一个值。此函数的作用域限定在窗口框架内。该函数以表达式或目标作为其参数。 |
|
last_value(x) |
[与输入相同] |
返回窗口的最后一个值。此函数的作用域限定在窗口框架内。该函数以表达式或目标作为其参数。 |
|
nth_value(x, offset) |
[与输入相同] |
返回窗口起始位置指定偏移量处的值。偏移量从 1 开始。偏移量可以是任意标量表达式。如果偏移量为 null 或大于窗口中的值数,则返回 null。偏移量为零或负值时将导致错误。该函数以表达式或目标作为其第一个参数。 |
|
lead(x[, offset[, default_value]]) |
[与输入相同] |
返回窗口中当前行之后偏移行数处的值。偏移量从 0 开始,即当前行。偏移量可以是任意标量表达式。默认偏移量为 1。如果偏移量为 null 或大于窗口范围,则返回 default_value;如果未指定,则返回 null。该函数以表达式或目标作为其第一个参数。 |
|
lag(x[, offset[, default_value]]) |
[与输入相同] |
返回窗口中当前行之前偏移行数处的值。偏移量从 0 开始,即当前行。偏移量可以是任意标量表达式。默认偏移量为 1。如果偏移量为 null 或大于窗口范围,则返回 default_value;如果未指定,则返回 null。该函数以表达式或目标作为其第一个参数。 |