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

HOTSPOTS

检测数据流中的热点 或活动明显高于正常情况的区域。热点定义为数据点相对密集的小空间区域。

使用 HOTSPOTS 函数,您可以使用简单 SQL 函数来识别数据中相对密集的区域,而无需显式构建和训练复杂的机器学习模型。然后,您可以识别需要注意的数据子部分,以便立即采取措施。

例如,数据中的热点可能表示数据中心中有过热的服务器集合、车辆高度集中表明交通瓶颈、特定区域中的乘坐共享行程表明交通繁忙事件或具有类似功能的类别中的产品销量增加。

注意

HOTSPOTS 函数检测频繁数据点的能力取决于应用程序。 要预测业务问题以便能够使用此函数解决问题,需要该领域的专业知识。例如,您可能需要确定输入流中哪些列组合传递给函数,以及如何在必要时对数据进行规范化。

算法接受 DOUBLEINTEGERFLOATTINYINTSMALLINTREALBIGINT 数据类型。DECIMAL 不是受支持的类型。请改用 DOUBLE。

注意

HOTSPOT 函数不返回构成热点的记录。您可以使用 ROWTIME 列以确定哪些记录属于给定的热点。

语法

HOTSPOTS (inputStream,     windowSize, scanRadius, minimumNumberOfPointsInAHotspot)

参数

以下部分介绍 HOTSPOT 函数参数。

inputStream

指向输入流的指针。您可以使用 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 函数忽略游标中包含的其他列。

windowSize

指定滑动窗口在流上为每个时间段考虑的记录数。

您可以将此值设置为介于 100 和 1000 之间(含 100 和 1,000)。

通过增加窗口大小,您可以更好地估计热点位置和密度(相关性),但这也会增加运行时间。

scanRadius

指定热点与其最近相邻点之间的典型距离。

此参数类似于 DBSCAN 算法中的 ε 值。

将此参数设置为一个值,该值小于不在热点中的点之间的典型距离,但足够大,以便热点中的点在此距离内具有相邻点。

您可以将此值设置为任何大于零的双精度值。scanRadius 的值越小,属于同一热点的任何两个记录越相似。但是,较低的 scanRadius 值也会增加运行时间。scanRadius 的值越低,会导致热点越小,但数量越多。

minimumNumberOfPointsInAHotspot

指定形成热点的记录所需的记录数。

注意

设置此参数时应考虑windowSize。最好将 minimumNumberOfPointsInAHotspot 视为 windowSize 的某个部分。具体是哪个部分可以通过实验发现。

您可以将此值设置为 2 与您为窗口大小配置的值(含)之间。根据您选择的窗口大小值,选择一个最能模拟您要解决的问题的值。

输出

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) );

结果

本示例输出类似于以下内容的流。


            显示行时间、热点和 hotspot_results 的 SQL 代码的结果。