

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

# COUNT\$1DISTINCT\$1ITEMS\$1TUMBLING 函数


返回滚动窗口上指定的应用程序内流列中不同项目数量的计数。结果计数为近似值；该函数使用 HyperLogLog 算法。

在使用 `COUNT_DISTINCT_ITEMS_TUMBLING` 时，请注意以下事项：
+ 当窗口中的项目数小于或等于 10000 时，此函数将返回准确计数。
+ 准确计数不同项目可能效率低下且成本高昂。因此，此函数估算计数。例如，如果有 100000 个不同的项目，则该算法可能会返回 99700 个。如果不考虑成本和效率，您可以自行编写 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);
  ```



此函数在一个[滚动窗口](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/tumbling-window-concepts.html)内运行。将滚动窗口的大小指定为参数。

## 语法


```
COUNT_DISTINCT_ITEMS_TUMBLING (

      in-application-streamPointer,
      'columnName',     
      windowSize
   )
```

## 参数


以下各节介绍了这些参数。

### in-application-stream指针


使用此参数，您可以提供指向应用程序内流的指针。您可以使用 `CURSOR` 函数设置指针。例如，以下语句将设置指向 `InputStream` 的指针。

```
CURSOR(SELECT STREAM * FROM InputStream)
```

### columnName


应用程序内流中您希望函数用来计数不同值的列名称。请注意有关列名称的以下内容：
+ 必须用单引号 (') 括起来。例如 `'column1'`。

### windowSize


滚动窗口的大小，以秒为单位。大小应至少为 1 秒，且不应超过 1 小时 = 3600 秒。

## 示例


### 示例数据集


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

具有以下架构的示例股票数据集。

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

### 示例 1：粗略估计列中的唯一值的数量


以下示例演示了如何使用 `COUNT_DISTINCT_ITEMS_TUMBLING` 函数估算应用程序内流的当前滚动窗口中的不同 `TICKER_SYMBOL` 值的数目。有关滚动窗口的更多信息，请参阅[滚动窗口](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/tumbling-window-concepts.html)。

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

上一示例输出的流与以下内容类似：

![\[Table showing ROWTIME and NUMBER_OF_DISTINCT_ITEMS columns with four identical entries.\]](http://docs.amazonaws.cn/kinesisanalytics/latest/sqlref/images/sql-reference-count-distinct-example-1.png)
