使用 OVER 子句的窗口查询在滑动窗口中处理行。有关更多信息,请参阅
滑动窗口
滚动窗口式查询
COUNT(
number-expression
) ... GROUP BY
monotonic-expression
|
time-based-expression
滑动窗口式查询
COUNT(* | ALL
number-expression
) OVER
window-specification
对所有行进行计数。
计算所有行。
ALL
是默认值。
number-expression
指定针对聚合中的每一行计算的值表达式。
OVER
window-specification
将数据流中的记录除以时间范围间隔或行数。窗口规范定义流中记录的划分方式 (按时间范围间隔或行数)。
按
单调表达分
组 |
time-based-expression
基于分组表达式的值为记录分组,从而针对在所有列中具有相同值的每组行返回一个摘要行。
示例数据集
以下示例基于样本库存数据集,该数据集是
Amazon Kinesis Analytics 开发人员指南
入门
的一部分。要运行每个示例,您需要一个包含样本股票行情输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建分析应用程序和配置示例股票行情输入流,请参阅
Amazon Kinesis Analytics 开发者指南中的
入门
指南
。
具有以下架构的示例股票数据集。
(ticker_symbol VARCHAR(4),
sector VARCHAR(16),
change REAL,
price REAL)
示例 1:使用 GROUP BY 子句返回值的数目
在此示例中,聚合查询有一个
GROUP BY
子句
ROWTIME
,该子句将流分组为有限的行。随后,从
COUNT
子句返回的行计算
GROUP BY
函数。
使用 STEP(推荐)
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
ticker_symbol VARCHAR(4),
count_price DOUBLE);
CREATE OR REPLACE PUMP "STREAM_PUMP" AS
INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM
ticker_symbol,
COUNT(Price) AS count_price
FROM "SOURCE_SQL_STREAM_001"
GROUP BY ticker_symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);
使用 FLOOR
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
ticker_symbol VARCHAR(4),
count_price DOUBLE);
-- CREATE OR REPLACE PUMP to insert into output
CREATE OR REPLACE PUMP "STREAM_PUMP" AS
INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM
ticker_symbol,
COUNT(Price) AS count_price
FROM "SOURCE_SQL_STREAM_001"
GROUP BY ticker_symbol, FLOOR("SOURCE_SQL_STREAM_001".ROWTIME TO MINUTE);
上一示例输出的流与以下内容类似。
在此示例中,该
OVER
子句将分区流中的记录除以前 '1' 小时的时间范围间隔。随后,从
COUNT
子句返回的行计算
OVER
函数。
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
ticker_symbol VARCHAR(4),
count_price DOUBLE);
CREATE OR REPLACE PUMP "STREAM_PUMP" AS
INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM ticker_symbol,
COUNT(price) OVER (
PARTITION BY ticker_symbol
RANGE INTERVAL '1' HOUR PRECEDING) AS count_price
FROM "SOURCE_SQL_STREAM_001"
上一示例输出的流与以下内容类似。
Amazon Kinesis Analytics 不支持
COUNT
函数的
FILTER
子句,也不支持
COUNT DISTINCT
在聚合函数或分析函数中使用。有关聚合和分析函数的更多信息,请参见
聚合函数
和
分析函数
。此功能偏离了 SQL:2008 标准。
当用作分析函数时,如果正在评估的窗口不包含任何行,则
COUNT
返回零。有关更多信息,请参阅
分析函数
:对于窗口内与输入行匹配的分区不包含任何行的
PARTITION BY
子句,COUNT 还会返回零。有关
PARTITION BY
的更多信息,请参阅
WINDOW 子句 (滑动窗口)
。
COUNT
忽略一组值或数值表达式中的空值。例如,以下各项返回值 3:
-
COUNT(1, 2, 3) = 3
-
COUNT(1,null, 2, null, 3, null) = 3