COUNT - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

COUNT

从窗口式查询返回一组值的限定行的数目。根据时间或行定义窗口式查询。有关窗口式查询的信息,请参阅窗口式查询

在使用 COUNT 时,请注意以下事项:

  • 如果您未使用 OVER 子句,则 COUNT 将通过聚合函数进行计算。在此情况下,聚合查询必须根据将流分组到有限行中的 GROUP BY 子句 在单调表达式中包含 ROWTIME。否则,组将是无限流,并且查询绝对无法完成,也不会发出任何行。有关更多信息,请参阅聚合函数

  • 使用 GROUP BY 子句的窗口式查询在滚动窗口中处理行。有关更多信息,请参阅滚动窗口(使用 GROUP BY 的聚合)

  • 如果您使用 OVER 子句,则 COUNT 将通过分析函数进行计算。有关更多信息,请参阅分析函数

  • 使用 OVER 子句的窗口式查询在滑动窗口中处理行。有关更多信息,请参阅滑动窗口

语法

滚动窗口式查询

COUNT(number-expression) ... GROUP BY monotonic-expression | time-based-expression

滑动窗口式查询

COUNT(* | ALL number-expression) OVER window-specification

参数

*

对所有行进行计数。

ALL

计算所有行。ALL 是默认值。

number-expression

指定针对聚合中的每一行计算的值表达式。

OVER window-specification

划分流中按时间范围间隔或行数划分的记录。窗口规范定义流中记录的划分方式 (按时间范围间隔或行数)。

GROUP BY monotonic-expression | time-based-expression

基于分组表达式的值为记录分组,从而针对在所有列中具有相同值的每组行返回一个摘要行。

示例

示例数据集

以下示例基于示例股票数据集,后者是《Amazon Kinesis Analytics 开发人员指南》 中的入门的一部分。要运行每个示例,您需要具有示例股票代码输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 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);

结果

上一示例输出的流与以下内容类似。

示例 2:使用 OVER 子句返回值的数目

在此示例中,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 不支持 FILTER 函数的 COUNT 子句,也不支持在聚合函数或分析函数中使用 COUNT DISTINCT。有关聚合函数和分析函数的更多信息,请参阅聚合函数分析函数。此功能偏离了 SQL:2008 标准。

在用作分析函数时,COUNT 将在所计算的窗口不包含行时返回零。有关更多信息,请参阅分析函数。COUNT 还为 PARTITION BY 子句返回零,在此情况下,窗口中匹配输入行的划分不包含行。有关 PARTITION BY 的更多信息,请参阅 WINDOW 子句 (滑动窗口)

COUNT 忽略来自值集或数字表达式的 null 值。例如,以下各项返回值 3:

  • COUNT(1, 2, 3) = 3

  • COUNT(1,null, 2, null, 3, null) = 3

相关主题