针对流数据使用架构发现功能 - SQL适用于应用程序的 Amazon Kinesis Data Analytics 开发者指南

对于新项目,我们建议您使用适用于 Apache Flink Studio 的新托管服务,而不是应用程序版 Kinesis Data Analytics。SQLManaged Service for Apache Flink Studio 不仅操作简单,还具有高级分析功能,使您能够在几分钟内构建复杂的流处理应用程序。

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

针对流数据使用架构发现功能

注意

2023 年 9 月 12 日之后,如果您尚未使用适用于 SQL 的 Kinesis Data Analytics,则将无法使用 Kinesis Data Firehose 作为来源创建新应用程序。有关更多信息,请参阅限制

提供输入架构以描述流输入中的记录映射到应用程序内部流可能非常麻烦,并且容易出错。可以使用 DiscoverInputSchema API(称为发现 API)来推断架构。API 通过使用有关流式传输源的记录的随机示例,可以推断架构(即列名、数据类型和传入数据中数据元素的位置)。

注意

如需使用发现 API 以通过 Amazon S3 中存储的文件生成架构,请参阅 针对静态数据使用架构发现功能

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

在为应用程序内部流完成架构后,您可以使用一些函数来处理字符串和日期时间值。在生成的应用程序内部流中使用行时,您可以在应用程序代码中利用这些函数。有关更多信息,请参阅示例:转换 DateTime 值

架构发现期间的列命名

在架构发现期间,Amazon Kinesis Data Analytics 尽可能多地保留流输入源中的原始列名称,但以下情况除外:

  • 源流列名称是预留 SQL 关键字,例如 TIMESTAMPUSERVALUESYEAR

  • 源流列名称包含不受支持的字符。只有字母、数字和下划线字符 ( _ ) 受支持。

  • 源流列名称以数字开头。

  • 源流列名称的长度超过 100 个字符。

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

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

发现建议的列名称的示例

源流列名称 发现建议的列名称

USER

COL_USER

USER@DOMAIN

COL_USERDOMAIN

@@

COL_0

架构发现问题

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

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

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