示例:转换字符串值 - 适用于 Amazon Kinesis Data Analytics·for·SQL 应用程序开发人员指南
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

示例:转换字符串值

对于流式传输源中的记录,Amazon Kinesis Data Analytics 支持 JSON 和 CSV 等格式。有关详细信息,请参阅 RecordFormat。然后,这些记录根据输入配置映射到应用程序内部流中的行。有关详细信息,请参阅 配置应用程序输入。输入配置指定流式传输源中的记录字段如何映射到应用程序内部流中的列。

当流式传输源中的记录遵循支持的格式时,此映射有效,这会导致应用程序内部流具有规范化数据。但是,如果流式传输源中的数据不符合支持的标准怎么办? 例如,如果流式传输源包含点击流数据、IoT 传感器和应用程序日志等数据时该怎么办呢?

请考虑以下示例:

  • 流式源包含应用程序日志 - 应用程序日志遵循标准 Apache 日志格式,并使用 JSON 格式写入到流。

    { "Log":"192.168.254.30 - John [24/May/2004:22:01:02 -0700] "GET /icons/apache_pb.gif HTTP/1.1" 304 0" }

    有关标准 Apache 日志格式的更多信息,请参阅 Apache 网站上的日志文件

     

  • 流式源包含半结构化数据 - 以下示例显示了两种记录。Col_E_Unstructured 字段值是一系列逗号分隔的值。这里总共有五列:前四列包含字符串类型的值,最后一列包含逗号分隔的值。

    { "Col_A" : "string", "Col_B" : "string", "Col_C" : "string", "Col_D" : "string", "Col_E_Unstructured" : "value,value,value,value"} { "Col_A" : "string", "Col_B" : "string", "Col_C" : "string", "Col_D" : "string", "Col_E_Unstructured" : "value,value,value,value"}
  • 流式传输源中的记录包含 URL,需要部分 URL 域名才能进行分析。

    { "referrer" : "http://www.amazon.com"} { "referrer" : "http://www.stackoverflow.com" }

此种情况下,以下包含两个步骤的过程通常适用于创建包含规范化数据的应用程序内部流:

  1. 配置应用程序输入以便将非结构化字段映射到创建的应用程序内部输入流中的 VARCHAR(N) 类型的列。

  2. 在应用程序代码中,使用字符串功能将这一个列拆分为多个列,并将行保存到其他应用程序内部流。应用程序代码创建的该应用程序内部流将包含规范化数据。然后,您可以对该应用程序内部流进行分析。

Amazon Kinesis Data Analytics 提供以下字符串操作、标准 SQL 函数和 SQL 标准扩展以处理字符串列:

  • 字符串运算符 - 在比较字符串时,LIKESIMILAR 等运算符是非常有用的。有关更多信息,请参阅Amazon Managed Service for Apache Flink SQL 参考中的字符串运算符

  • SQL 函数 - 在处理各种字符串时,以下函数是非常有用的。有关更多信息,请参阅Amazon Managed Service for Apache Flink SQL 参考中的字符串和搜索函数

    • CHAR_LENGTH – 提供字符串的长度。

    • INITCAP – 返回输入字符串的转换后版本,在这类字符串中,每个以空格分隔的单词的第一个字符都是大写的,所有其他字符都是小写的。

    • LOWER/UPPER – 将字符串转换为小写或大写。

    • OVERLAY – 使用第二个字符串参数 (替代字符串) 替换第一个字符串参数的一部分 (原始字符串)。

    • POSITION - 在某个字符串中搜索其他字符串。

    • REGEX_REPLACE – 将子字符串替换为备用子字符串。

    • SUBSTRING - 从特定位置开始提取部分源字符串。

    • TRIM – 从源字符串的开头或结尾删除指定字符的实例。

  • SQL 扩展 – 这对使用日志和 URI 等非结构化字符串非常有用。有关更多信息,请参阅Amazon Managed Service for Apache Flink SQL 参考中的日志解析函数

    • FAST_REGEX_LOG_PARSER – 工作原理类似于正则表达式分析程序,但方法更简便,生成结果的速度更快。例如,较快的正则表达式解析程序会在找到第一个匹配项时停止(称为延迟语义)。

    • FIXED_COLUMN_LOG_PARSE – 分析固定宽度的字段,自动将其转换为指定的 SQL 类型。

    • REGEX_LOG_PARSE – 根据默认的 Java 正则表达式模式分析字符串。

    • SYS_LOG_PARSE – 分析 UNIX/Linux 系统日志中的常见条目。

    • VARIABLE_COLUMN_LOG_PARSE – 将输入字符串拆分为多个由分隔符或分隔符字符串分隔的字段。

    • W3C_LOG_PARSE – 可用于快速格式化 Apache 日志。

有关使用这些函数的示例,请参阅以下主题: