

经过仔细考虑，我们决定停用适用于 SQL 应用程序的 Amazon Kinesis Data Analytics：

1. 从 **2025年9月1日起，**我们将不再为适用于SQL应用程序的Amazon Kinesis Data Analytics Data Analytics提供任何错误修复，因为鉴于即将停产，我们对其的支持将有限。

2. 从 **2025 年 10 月 15 日**起，您将无法为 SQL 应用程序创建新的 Kinesis Data Analytics。

3. 从 **2026 年 1 月 27 日**起，我们将删除您的应用程序。您将无法启动或操作 Amazon Kinesis Data Analytics for SQL 应用程序。从那时起，将不再提供对 Amazon Kinesis Data Analytics for SQL 的支持。有关更多信息，请参阅 [Amazon Kinesis Data Analytics for SQL 应用程序停用](discontinuation.md)。

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

# 示例：根据正则表达式分析日志字符串 (REGEX\_LOG\_PARSE 函数)
<a name="examples-transforming-strings-regexlogparse"></a>

此示例使用 `REGEX_LOG_PARSE` 函数在 Amazon Kinesis Data Analytics 中转换字符串。`REGEX_LOG_PARSE` 根据默认 Java 正则表达式模式分析字符串。有关更多信息，请参阅 *Amazon Managed Service for Apache Flink SQL 参考*中的[ REGEX\_LOG\_PARSE](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-regex-log-parse.html)。

在本示例中，您将以下记录写入到 Amazon Kinesis 流中。

```
{"LOGENTRY": "203.0.113.24 - - [25/Mar/2018:15:25:37 -0700] \"GET /index.php HTTP/1.1\" 200 125 \"-\" \"Mozilla/5.0 [en] Gecko/20100101 Firefox/52.0\""}
{"LOGENTRY": "203.0.113.24 - - [25/Mar/2018:15:25:37 -0700] \"GET /index.php HTTP/1.1\" 200 125 \"-\" \"Mozilla/5.0 [en] Gecko/20100101 Firefox/52.0\""}
{"LOGENTRY": "203.0.113.24 - - [25/Mar/2018:15:25:37 -0700] \"GET /index.php HTTP/1.1\" 200 125 \"-\" \"Mozilla/5.0 [en] Gecko/20100101 Firefox/52.0\""}
...
```



然后，您在控制台上创建一个 Kinesis Data Analytics 应用程序，并将 Kinesis 数据流作为流式传输源。发现过程读取有关流式传输源的示例记录，并推断出具有一列 (LOGENTRY) 的应用程序内部架构，如下所示。

![控制台屏幕截图，显示具有 LOGENTRY 列的应用程序内部架构。](http://docs.aws.amazon.com/zh_cn/kinesisanalytics/latest/dev/images/ex_regex_log_parse_0.png)


然后，在 `REGEX_LOG_PARSE` 函数中使用应用程序代码分析日志字符串从而检索数据元素。随后将结果数据插入另一个应用程序内部流，如下面的屏幕截图所示：



![控制台屏幕截图显示了生成的数据表，其中包含 ROWTIME、LOGENTRY 和列 MATCH1。 MATCH2](http://docs.aws.amazon.com/zh_cn/kinesisanalytics/latest/dev/images/ex_regex_log_parse_1.png)


**Topics**
+ [步骤 1：创建 Kinesis 数据流](#examples-transforming-strings-regexlogparse-1)
+ [步骤 2：创建 Kinesis Data Analytics 应用程序](#examples-transforming-strings-regexlogparse-2)

## 步骤 1：创建 Kinesis 数据流
<a name="examples-transforming-strings-regexlogparse-1"></a>

创建一个 Amazon Kinesis 数据流并填充日志记录，如下所示：

1. [登录 AWS 管理控制台 并在 /kinesis 上打开 Kinesis 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/kinesis)

1. 在导航窗格中，选择 **数据流**。

1. 选择 **创建 Kinesis 流**，然后创建带有一个分片的流。有关更多信息，请参阅 *Amazon Kinesis Data Streams 开发人员指南*中的[创建流](https://docs.aws.amazon.com/streams/latest/dev/learning-kinesis-module-one-create-stream.html)。

1. 运行以下 Python 代码以便填充示例日志记录。这段简单代码不断地将同一日志记录写入到流中。

   ```
    
   import json
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   def get_data():
       return {
           "LOGENTRY": "203.0.113.24 - - [25/Mar/2018:15:25:37 -0700] "
           '"GET /index.php HTTP/1.1" 200 125 "-" '
           '"Mozilla/5.0 [en] Gecko/20100101 Firefox/52.0"'
       }
   
   
   def generate(stream_name, kinesis_client):
       while True:
           data = get_data()
           print(data)
           kinesis_client.put_record(
               StreamName=stream_name, Data=json.dumps(data), PartitionKey="partitionkey"
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

## 步骤 2：创建 Kinesis Data Analytics 应用程序
<a name="examples-transforming-strings-regexlogparse-2"></a>

接下来，创建一个 Kinesis Data Analytics 应用程序，如下所示：

1. [在 /kinesisanalytics 上打开适用于 Apache Flink 的托管服务控制台。 https://console.aws.amazon.com](https://console.aws.amazon.com/kinesisanalytics)

1. 选择 **Create application**，并指定应用程序名称。

1. 在应用程序详细信息页面上，选择 **连接流数据**。

1. 在 **连接到源** 页面上，执行以下操作：

   1. 选择在上一部分中创建的流。

   1. 选择创建 IAM 角色的选项。

   1. 选择 **发现架构**。等待控制台显示推断的架构和为创建的应用程序内部流推断架构所使用的示例记录。推断的架构仅包含一列。

   1. 选择 **保存并继续**。

   

1. 在应用程序详细信息页面上，选择 **转到 SQL编辑器**。要启动应用程序，请在显示的对话框中选择 **是，启动应用程序**。

1. 在 SQL 编辑器中编写应用程序代码并确认结果如下所示：

   1. 复制下面的应用程序代码并将其粘贴到编辑器中。

      ```
      CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (logentry VARCHAR(24), match1 VARCHAR(24), match2 VARCHAR(24));
      
      CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"
          SELECT STREAM T.LOGENTRY, T.REC.COLUMN1, T.REC.COLUMN2
          FROM 
               (SELECT STREAM LOGENTRY,
                   REGEX_LOG_PARSE(LOGENTRY, '(\w.+) (\d.+) (\w.+) (\w.+)') AS REC
                   FROM SOURCE_SQL_STREAM_001) AS T;
      ```

   1. 选择 **保存并运行 SQL**。在 **实时分析** 选项卡上，可以查看应用程序已创建的所有应用程序内部流并验证数据。