对于新项目,我们建议您使用新的 Kinesis Data Analytics 工作室,而不是 SQL 应用程序的 Kinesis Data Analytics。Kinesis Data Analytics Studio 将易用性与高级分析功能相结合,使您能够在几分钟内构建复杂的流处理应用程序。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
针对流数据使用架构发现功能
提供输入架构以描述流输入中的记录映射到应用程序内部流可能非常麻烦,并且容易出错。可以使用 DiscoverInputSchema API(称为发现 API)来推断架构。API 通过使用有关流式传输源的记录的随机示例,可以推断架构(即列名、数据类型和传入数据中数据元素的位置)。
注意
要使用 Discovice API 从存储在 Amazon S3 中的某个文件生成架构,请参阅针对静态数据使用架构发现功能。
控制台使用发现 API 来生成指定流式传输源的架构。利用控制台,您还可以更新架构,包括添加或删除列、更改列名称或数据类型等。不过,请仔细进行更改以确保不会创建无效的架构。
在为应用程序内部流完成架构后,您可以使用一些函数来处理字符串和日期时间值。在生成的应用程序内部流中使用行时,您可以在应用程序代码中利用这些函数。有关更多信息,请参阅示例:转换 DateTime 值:
架构发现期间的列命名
在架构发现期间,Amazon Kinesis Data Analytics 尝试尽可能多地保留流式传输输入源的原始列名,以下情况除外:
-
源流列名称是预留 SQL 关键字,例如
TIMESTAMP、USER、VALUES或YEAR。 -
源流列名称包含不受支持的字符。只有字母、数字和下划线字符 ( _ ) 受支持。
-
源流列名称以数字开头。
-
源流列名称的长度超过 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 值。