针对流数据使用架构发现功能 - Amazon Kinesis Data Analytics for SQL 应用程序开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

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

提供输入架构以描述流输入中的记录映射到应用程序内部流可能非常麻烦,并且容易出错。可以使用 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 可以推断常见格式的架构,如 CSV 和 JSON,它们是使用 UTF-8 编码的。Kinesis Data Analytics 支持任何 UTF-8 编码的记录(包括原始文本,如应用程序日志和记录)并具有自定义列和行分隔符。如果 Kinesis Data Analytics 无法推断架构,您可以在控制台上使用架构编辑器手动定义架构(或使用 API)。

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