Amazon Kinesis Data Firehose
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon S3 对象的自定义前缀

如果您的目的地是 Amazon S3、Amazon Elasticsearch Service 或 Splunk,则可配置用于从 Kinesis Data Firehose 传输数据的 Amazon S3 对象键。要执行此操作,请指定 Kinesis Data Firehose 在传输时计算的表达式。最终对象键的格式为 <evaluated prefix><suffix>,其中后缀格式为 <delivery stream name>-<delivery stream version>-<year>-<month>-<day>-<hour>-<minute>-<second>-<uuid><file extension>。您无法更改后缀字段。

您可以在自定义前缀中使用以下形式的表达式:!{namespace:value},其中 namespace 可以为 firehosetimestamp,如以下部分中所述。

如果前缀以斜杠结束,则前缀在 Amazon S3 存储桶中将显示为文件夹。有关更多信息,请参阅 Amazon Kinesis Data Firehose 开发人员指南 中的 Amazon S3 对象名称格式

timestamp 命名空间

此命名空间的有效值是作为有效 Java DateTimeFormatter 字符串的字符串。例如,对于 2018 年,表达式 !{timestamp:yyyy} 的计算结果为 2018

在计算时间戳时,Kinesis Data Firehose 使用所写入的 Amazon S3 对象中包含的最早记录的大约到达时间戳。

时间戳始终以 UTC 表示。

如果您在同一前缀表达式中多次使用 timestamp 命名空间,则每个实例的计算结果为同一时刻。

firehose 命名空间

您可以将两个值用于此命名空间:error-output-typerandom-string。下表介绍了其使用方法。

firehose 命名空间值

转换 描述 示例输入 输出示例 备注
error-output-type 计算结果为下列字符串之一,具体取决于传输流的配置以及故障原因:{processing-failed、elasticsearch-failed、splunk-failed、format-conversion-failed}。

如果您在同一表达式中多次使用它,则每个实例的计算结果为同一错误字符串。

myPrefix/result=!{firehose:error-output-type}/!{timestamp:yyyy/MM/dd} myPrefix/result=processing-failed/2018/08/03 error-output-type 值只能在 ErrorOutputPrefix 字段中使用。
random-string

计算结果为 11 个字符的随机字符串。如果您在同一表达式中多次使用它,则每个实例的计算结果为一个新的随机字符串。

myPrefix/!{firehose:random-string}/ myPrefix/046b6c7f-0b/ 您可以将它用于这两种前缀类型。

您可以将它放在格式字符串的开头以获取随机前缀,这有时是使用 Amazon S3 获得极高吞吐量所必需的。

语义规则

以下规则适用于 PrefixErrorOutputPrefix 表达式。

  • 对于 timestamp 命名空间,将计算未包含在单引号内的任何字符。换句话说,将按字面意思处理值字段中使用单引号进行转义的任何字符串。

  • 如果您指定的前缀不包含时间戳命名空间表达式,则 Kinesis Data Firehose 将向 Prefix 字段中的值追加表达式 !{timestamp:yyyy/MM/dd/HH/}

  • 序列 !{ 只能出现在 !{namespace:value} 表达式中。

  • 仅当 Prefix 未包含任何表达式时,ErrorOutputPrefix 才能为空。在此情况下,Prefix 的计算结果为 <specified-prefix>YYYY/MM/DD/HH/ErrorOutputPrefix 的计算结果为 <specified-prefix><error-output-type>YYYY/MM/DD/HH/

  • 如果您为 ErrorOutputPrefix 指定一个表达式,则您必须包含至少一个 !{firehose:error-output-type} 实例。

  • Prefix 无法包含 !{firehose:error-output-type}

  • PrefixErrorOutputPrefix 在计算后都不能超过 512 个字符。

  • 如果目的地是 Amazon Redshift,则 Prefix 不得包含表达式,并且 ErrorOutputPrefix 必须为空。

  • 当目的地是 Amazon Elasticsearch Service 或 Splunk 且未指定 ErrorOutputPrefix 时,Kinesis Data Firehose 将对失败的记录使用 Prefix 字段。

  • 当目的地是 Amazon S3 并且您指定 Amazon S3 备份配置时,Amazon S3 目的地配置中的 PrefixErrorOutputPrefix 将分别用于成功的记录和失败的记录。在 Amazon S3 备份配置中,Prefix 用于备份原始数据,而 ErrorOutputPrefix 将被忽略。

示例前缀

PrefixErrorOutputPrefix 示例

输入 计算的前缀(2018 年 8 月 27 日上午 10:30 (UTC))

Prefix:未指定

ErrorOutputPrefixmyFirehoseFailures/!{firehose:error-output-type}/

Prefix2018/08/10/

ErrorOutputPrefixmyFirehoseFailures/processing-failed/

Prefix!{timestamp:yyyy/MM/dd}

ErrorOutputPrefix:未指定

输入无效:当 Prefix 包含表达式时,ErrorOutputPrefix 不能为空

PrefixmyFirehose/DeliveredYear=!{timestamp:yyyy}/anyMonth/rand=!{firehose:random-string}

ErrorOutputPrefixmyFirehoseFailures/!{firehose:error-output-type}/!{timestamp:yyyy}/anyMonth/!{timestamp:dd}

PrefixmyFirehose/DeliveredYear=2018/anyMonth/rand=5abf82daaa5

ErrorOutputPrefixmyFirehoseFailures/processing-failed/2018/anyMonth/10

PrefixmyPrefix/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/hour=!{timestamp:HH}/

ErrorOutputPrefix: myErrorPrefix/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/hour=!{timestamp:HH}/!{firehose:error-output-type}

PrefixmyPrefix/year=2018/month=07/day=06/hour=23/

ErrorOutputPrefixmyErrorPrefix/year=2018/month=07/day=06/hour=23/processing-failed

PrefixmyFirehosePrefix

ErrorOutputPrefix:未指定

PrefixmyFirehosePrefix/2018/08/27/

ErrorOutputPrefixmyFirehosePrefix/processing-failed/2018/08/27/