

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# HOTSPOTS
<a name="sqlrf-hotspots"></a>

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

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

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

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

该算法接受 `DOUBLE`、`INTEGER`、`FLOAT`、`TINYINT`、`SMALLINT`、`REAL` 和 `BIGINT` 数据类型。DECIMAL 不是受支持的类型。请改用 DOUBLE。

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



## 语法
<a name="hotspots-syntax"></a>

```
HOTSPOTS (inputStream,    
  windowSize,
  scanRadius,
  minimumNumberOfPointsInAHotspot)
```

## 参数
<a name="hotspots-parameters"></a>

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

### inputStream
<a name="hotspots-input-stream"></a>

指向输入流的指针。您可以使用 `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
<a name="hotspots-windowsize"></a>

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

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

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

### scanRadius
<a name="hotspots-scan-radius"></a>

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

此参数类似于 [DBSCAN](https://en.wikipedia.org/wiki/DBSCAN) 算法中的 **ε** 值。

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

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

### minimumNumberOfPointsInAHotspot
<a name="hotspots-minimumpoints"></a>

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

**注意**  
设置此参数时应考虑[windowSize](#hotspots-windowsize)。最好将 `minimumNumberOfPointsInAHotspot` 视为 `windowSize` 的某个部分。具体是哪个部分可以通过实验发现。

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

## Output
<a name="hotspots-output"></a>

HOTSPOTS 函数的输出是一个表对象，该表对象具有与输入相同的架构，并带有以下附加列：

### HOTSPOT\$1RESULTS
<a name="hotspots-hotspots"></a>

描述在记录周围找到的所有热点的 JSON 字符串。该函数返回所有潜在的热点；您可以在应用程序中筛选出低于特定 `density` 阈值的热点。该字段具有以下节点，每个输入列都有相应的值：
+ `density`：热点中的记录数除以热点大小。您可以使用此值来确定热点的相对相关性。
+ `maxValues`：每个数据列的热点中记录的最大值。
+ `minValues`：每个数据列的热点中记录的最小值。

数据类型：VARCHAR。

**注意**  
当 Kinesis Data Analytics 服务进行服务维护时，机器学习功能用于确定分析分数的趋势很少会被重置。发生服务维护后，您可能意外地看到分析分数为 0。我们建议您设置筛选条件或其他机制，以便在这些值出现时适当地处理它们。

## 示例
<a name="hotspots-examples"></a>

以下示例在演示流上执行 `HOTSPOTS` 函数，演示流中包含的随机数据不含有意义的热点。有关在包含有意义的数据热点的自定义数据流上执行 `HOTSPOTS` 函数的示例，请参阅[示例：检测热点](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/app-hotspots-detection.html)。

### 示例数据集
<a name="hotspots-examples-dataset"></a>

以下示例基于样本股票数据集，后者是 *Amazon Kinesis Data Analytics 开发人员指南*中的[入门练习](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)的一部分。要运行此示例，您需要一个具有样本股票代码输入流的 Kinesis Data Analytics 应用程序。要了解如何创建 Kinesis Data Analytics 应用程序和配置样本股票代码输入流，请参阅 *Amazon Kinesis Data Analytics 开发人员指南*中的[入门](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)。

样本股票数据集的架构如下：

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

### 示例 1：返回示例数据流上的热点
<a name="hotspots_example_1"></a>

在此示例中，将为 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)
            );
```

#### 结果
<a name="hotspots_example_1_results"></a>

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

![\[显示行时间、热点和 hotspot_results 的 SQL 代码的结果。\]](http://docs.aws.amazon.com/zh_cn/kinesisanalytics/latest/sqlref/images/hotspots-example-1.png)
