

经过仔细考虑，我们决定停用适用于 SQL 应用程序的亚马逊 Kinesis 数据分析：

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

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

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

控制台使用发现 API 来生成指定流式传输源的架构。利用控制台，您还可以更新架构，包括添加或移除列、更改列名称或数据类型等。不过，请仔细进行更改以确保不会创建无效的架构。

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

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

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

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

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

### Discovery-Suggested 列名示例
<a name="sch-dis-column-names-examples"></a>



| 源流列名称 | Discovery-Suggested 列名 | 
| --- | --- | 
| USER | COL\_USER | 
| USER@DOMAIN | COL\_USERDOMAIN | 
| @@ | COL\_0 | 

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

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

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

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