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

COUNT_DISTINCT_ITEMS_TUMBLING 函数

通过滚动窗口返回指定的应用程序内流列中的独特项目的计数。生成的计数为近似数;此函数使用 HyperLogLog 算法。

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

  • 当窗口中的项目数小于或等于 10000 时,此函数将返回准确计数。

  • 获得独特项目的准确计数可能效率低下且成本高昂。因此,此函数将估算计数。例如,如果有 100,000 个独特项目,算法可能返回 99,700。如果不考虑成本和效率,您可以自行编写 SELECT 语句以获取准确计数。

    以下示例演示如何在一个五秒的滚动窗口中获取每个股票代码的独特行的准确计数。SELECT 语句使用所有列 (ROWTIME 除外) 来确定唯一性。

    CREATE OR REPLACE STREAM output_stream (ticker_symbol VARCHAR(4), unique_count BIGINT); CREATE OR REPLACE PUMP stream_pump AS INSERT INTO output_stream SELECT STREAM TICKER_SYMBOL, COUNT(distinct_stream.price) AS unique_count FROM ( SELECT STREAM DISTINCT rowtime as window_time, TICKER_SYMBOL, CHANGE, PRICE, STEP((SOURCE_SQL_STREAM_001.rowtime) BY INTERVAL '5' SECOND) FROM SOURCE_SQL_STREAM_001) as distinct_stream GROUP BY TICKER_SYMBOL, STEP((distinct_stream.window_time) BY INTERVAL '5' SECOND);

此函数在一个滚动窗口内运行。您应指定该滚动窗口的大小作为参数。

语法

COUNT_DISTINCT_ITEMS_TUMBLING ( in-application-streamPointer, 'columnName',      windowSize )

参数

以下部分介绍参数。

in-application-streamPointer

利用此参数,您可以提供指向应用程序内流的指针。您可以使用 CURSOR 函数设置指针。例如,以下语句将设置指向 InputStream 的指针。

CURSOR(SELECT STREAM * FROM InputStream)

columnName

您希望函数用来对独特值进行计数的应用程序内流中的列名称。请注意有关列名称的以下要点:

  • 必须用单引号 (') 括起。例如:'column1'

windowSize

滚动窗口的大小 (以秒为单位)。该大小应至少为 1 秒,且不应超过 1 小时 (3600 秒)。

示例

示例数据集

以下示例基于示例股票数据集,后者是《Amazon Kinesis Analytics 开发人员指南》 中的入门的一部分。要运行每个示例,您需要具有示例股票代码输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics 应用程序和配置示例股票代码输入流,请参阅《Amazon Kinesis Analytics 开发人员指南》 中的入门

具有以下架构的示例股票数据集。

(ticker_symbol VARCHAR(4), sector VARCHAR(16), change REAL, price REAL)

示例 1:粗略估计列中的唯一值的数量

以下示例演示如何使用 COUNT_DISTINCT_ITEMS_TUMBLING 函数粗略估计应用程序内流的当前滚动窗口中的唯一 TICKER_SYMBOL 值的数目。有关滚动窗口的更多信息,请参阅滚动窗口

CREATE OR REPLACE STREAM DESTINATION_SQL_STREAM ( NUMBER_OF_DISTINCT_ITEMS BIGINT); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM * FROM TABLE(COUNT_DISTINCT_ITEMS_TUMBLING( CURSOR(SELECT STREAM * FROM "SOURCE_SQL_STREAM_001"), -- pointer to the data stream 'TICKER_SYMBOL', -- name of column in single quotes 60 -- tumbling window size in seconds ) );

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