本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
COUNT_DISCT_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-stream指针
使用此参数,您可以提供指向应用程序内部流的指针。您可以使用以下命令来设置指针CURSOR函数。例如,以下语句将指针设置为InputStream.
CURSOR(SELECT STREAM * FROM InputStream)
columnName
应用程序内流中您希望函数使用该列来计算不同值的列名。请注意有关Columname
-
必须出现在单引号 (') 中。例如,
'column1'。
窗口大小
翻滚窗口的大小,以秒为单位。大小应至少为 1 秒且不应超过 1 小时 = 3600 秒。
示例
示例数据集
以下示例基于样本股票数据集,该数据集是其中的一部分开始使用在里面Amazon Kinesis Analitics. 要运行每个示例,您需要一个具有示例股票行情输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics 应用程序和配置示例股票行情输入流,请参阅开始使用在里面Amazon Kinesis Analitics.
具有以下架构的示例股票数据集。
(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 ) );
上一示例输出的流与以下内容类似: