本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
HOTSPOTS
检测数据流中的热点 或活动明显高于正常情况的区域。热点定义为数据点相对密集的小空间区域。
使用 HOTSPOTS
函数,您可以使用简单 SQL 函数来识别数据中相对密集的区域,而无需显式构建和训练复杂的机器学习模型。然后,您可以识别需要注意的数据子部分,以便立即采取措施。
例如,数据中的热点可能表示数据中心中有过热的服务器集合、车辆高度集中表明交通瓶颈、特定区域中的乘坐共享行程表明交通繁忙事件或具有类似功能的类别中的产品销量增加。
注意
该HOTSPOTS
函数检测频繁数据点的能力取决于应用程序。 要解决您的业务问题,以便使用此功能解决该问题,需要领域的专业知识。例如,您可能需要确定输入流中哪些列组合传递给函数,以及如何在必要时对数据进行规范化。
该算法接受DOUBLE
INTEGER
、FLOAT
、TINYINT
、SMALLINT
、REAL
、和BIGINT
数据类型。不支持十进制类型。请改用 DUBLE。
注意
HOTSPOT
函数不返回构成热点的记录。您可以使用 ROWTIME
列以确定哪些记录属于给定的热点。
语法
HOTSPOTS (inputStream,
windowSize,
scanRadius,
minimumNumberOfPointsInAHotspot)
参数
以下部分介绍 HOTSPOT
函数参数。
输入流
指向您的输入流的指针。您可以使用CURSOR
函数设置指针。例如,以下语句将设置指向 InputStream
的指针:
--Select all columns from input stream CURSOR(SELECT STREAM * FROM InputStream) --Select specific columns from input stream CURSOR(SELECT STREAM PRICE, CHANGE FROM InputStream) -– Normalize the column X value. CURSOR(SELECT STREAM IntegerColumnX / 100, IntegerColumnY FROM InputStream) –- Combine columns before passing to the function. CURSOR(SELECT STREAM IntegerColumnX - IntegerColumnY FROM InputStream)
注意
仅对输入流中的数值列进行热点分析。HOTSPOTS
函数忽略游标中包含的其他列。
窗口大小
指定滑动窗口在流上为每个时间段考虑的记录数。
您可以将此值设置为介于 100 和 1000 之间(含 100 和 1,000)。
通过增加窗口大小,您可以更好地估计热点位置和密度(相关性),但这也会增加运行时间。
scanRadius
指定热点与其最近相邻点之间的典型距离。
此参数类似于 DBSCAN DBSCAN
将此参数设置为一个值,该值小于不在热点中的点之间的典型距离,但足够大,以便热点中的点在此距离内具有相邻点。
您可以将此值设置为任何大于零的双精度值。scanRadius
的值越小,属于同一热点的任何两个记录越相似。但是,较低的 scanRadius
值也会增加运行时间。scanRadius
的值越低,会导致热点越小,但数量越多。
minimumNumberOfPointsIn热点
指定形成热点的记录所需的记录数。
注意
设置此参数时应考虑窗口大小。最好将 minimumNumberOfPointsInAHotspot
视为 windowSize
的某个部分。具体是哪个部分可以通过实验发现。
您可以将此值设置为 2 与您为窗口大小配置的值(含)之间。根据您选择的窗口大小值,选择一个最能模拟您要解决的问题的值。
Output
HOTSPOTS 函数的输出是一个表对象,该表对象具有与输入相同的架构,并带有以下附加列:
HOTSPOT_RESULTS
描述在记录周围找到的所有热点的 JSON 字符串。该函数返回所有潜在的热点;您可以在应用程序中筛选出低于特定 density
阈值的热点。该字段具有以下节点,每个输入列都有相应的值:
density
:热点中的记录数除以热点大小。您可以使用此值来确定热点的相对相关性。maxValues
:每个数据列的热点中记录的最大值。minValues
:每个数据列的热点中记录的最小值。
数据类型:VARCHAR。
注意
在 Kinesis Data Analytics 服务进行服务维护时,机器学习函数用来确定分析分数的趋势很少会被重置。发生服务维护后,您可能意外地看到分析分数为 0。我们建议您设置筛选条件或其他机制,以便在这些值出现时适当地处理它们。
示例
以下示例在演示流上执行 HOTSPOTS
函数,演示流中包含的随机数据不含有意义的热点。有关在包含有意义的数据热点的自定义数据流上执行 HOTSPOTS
函数的示例,请参阅示例:检测热点。
示例数据集
以下示例基于样本库存数据集,该数据集是 Amazon Kinesis Data Analytics 开发人员指南中入门练习的一部分。要运行该示例,您需要一个包含样本股票行情输入流的 Kinesis Data Analytics 应用程序。要了解如何创建 Kinesis Data Analytics 应用程序和配置示例股票行情输入流,请参阅 Amazon Kinesis Data Analytics 开发者指南中的入门指南。
示例股票数据集具有以下架构:
(ticker_symbol VARCHAR(4), sector VARCHAR(16), change REAL, price REAL)
示例 1:返回示例数据流上的热点
在此示例中,将为 HOTSPOTS 函数的输出创建目标流。然后创建一个数据泵,此数据泵对于示例数据流中的指定值运行 HOTSPOTS 函数。
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM"( CHANGE REAL, PRICE REAL, HOTSPOTS_RESULT VARCHAR(10000)); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT "CHANGE", "PRICE", "HOTSPOTS_RESULT" FROM TABLE ( HOTSPOTS( CURSOR(SELECT STREAM "CHANGE", "PRICE" FROM "SOURCE_SQL_STREAM_001"), 100, 0.013, 20) );
结果
本示例输出类似于以下内容的流。