本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
COUNT_DIFCT_ITEMS_TUMBLING
返回翻滚窗口中指定的应用程序内流列中不同项目的数量。生成的计数是近似值;该函数使用该 HyperLogLog 算法。
有关更多信息,请参阅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
应用程序内流中您希望函数用来计算不同值的列名。请注意有关列名称的以下内容:
-
必须出现在单引号 (') 中。例如,
'column1'
。
窗口大小
以秒为单位的窗口的大小。大小应至少为 1 秒,且不应超过 1 小时 = 3600 秒。
示例
示例数据集
以下示例基于样本库存数据集,该数据集是 Amazon Kinesis Analytics 开发人员指南入门的一部分。要运行每个示例,您需要一个包含样本股票行情输入流的 Amazon Kinesis 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 ) );
上一示例输出的流与以下内容类似: