

经过仔细考虑，我们决定停用适用于 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)。

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

# 针对流数据使用架构发现功能
<a name="sch-dis"></a>

**注意**  
2023 年 9 月 12 日之后，如果您尚未使用 Kinesis Data Analytics for SQL，则将无法使用 Kinesis Data Firehose 作为来源创建新应用程序。有关更多信息，请参阅[限制](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html)。

提供一个输入架构来描述流式输入上的记录如何映射到应用程序内流，可能很麻烦且容易出错。可以使用 [DiscoverInputSchema](API_DiscoverInputSchema.md) API（称为*发现 API*）来推断架构。使用流媒体源上记录的随机样本，API 可以推断出架构（即列名、数据类型和数据元素在传入数据中的位置）。

**注意**  
如需使用发现 API 以通过 Amazon S3 中存储的文件生成架构，请参阅 [针对静态数据使用架构发现功能](sch-dis-ref.md)。

控制台使用 Discovery API 为指定的直播源生成架构。使用控制台，您还可以更新架构，包括添加或删除列、更改列名或数据类型等。不过，请仔细进行更改以确保不会创建无效的架构。

在为应用程序内部流完成架构后，您可以使用一些函数来处理字符串和日期时间值。在生成的应用程序内部流中使用行时，您可以在应用程序代码中利用这些函数。有关更多信息，请参阅 [示例：转换 DateTime 值](app-string-datetime-manipulation.md)。

## 架构发现期间的列命名
<a name="sch-dis-column-names"></a>

在架构发现期间，Amazon Kinesis Data Analytics 尽可能多地保留流输入源中的原始列名称，但以下情况除外：
+ 源流列名称是预留 SQL 关键字，例如 `TIMESTAMP`、`USER`、`VALUES` 或 `YEAR`。
+ 源流列名称包含不受支持的字符。只有字母、数字和下划线字符 ( \$1 ) 受支持。
+ 源流列名称以数字开头。
+ 源流列名称的长度超过 100 个字符。

如果重命名了某个列，则重命名的架构列名称将以 `COL_` 开头。在某些情况下，不能保留任何原始列名称——例如当整个名称都是不受支持的字符时。在这种情况下，该列将被命名为 `COL_#`，其中 \$1 是一个数字，表示该列在列顺序中的位置。

发现完成后，您可以使用控制台更新架构以添加或删除列，也可以更改列名称、数据类型或数据大小。

### 发现建议的列名称的示例
<a name="sch-dis-column-names-examples"></a>


****  

| 源流列名称 | 发现建议的列名称 | 
| --- | --- | 
|  USER  |  COL\$1USER  | 
|  USER@DOMAIN  |  COL\$1USERDOMAIN  | 
|  @@  |  COL\$10  | 

## 架构发现问题
<a name="sch-dis-when-fails"></a>

如果 Kinesis Data Analytics 无法推断给定流式传输源的架构，会发生什么情况？ 

Kinesis Data Analytics 可以推断常见格式的架构，如使用 UTF-8 编码的 CSV 和 JSON。Kinesis Data Analytics 支持任何 UTF-8 编码的记录 (包括原始文本，如应用程序日志和记录) 并带有自定义列和行分隔符。如果 Kinesis Data Analytics 无法推断架构，您可以在控制台上使用架构编辑器手动定义架构 (或使用 API)。

 如果您的数据没有遵循模式 (可使用架构编辑器指定)，您可以将架构定义为单个 VARCHAR(N) 类型的列，其中 N 是您希望记录包含的最大字符数。在此处，当数据位于应用程序内部流中后，您可以使用字符串和日期-时间操作来构造数据。有关示例，请参阅 [示例：转换 DateTime 值](app-string-datetime-manipulation.md)。