了解 Amazon S3 物件的自訂前置詞 - Amazon 數據 Firehose

將亞馬遜資料 Firehose 串流交付到 Amazon S3 中的 Apache 冰山表格已處於預覽狀態,且可能會有所變更。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

了解 Amazon S3 物件的自訂前置詞

交付到 Amazon S3 的物件會遵循的名稱格式<evaluated prefix><suffix>。您可以指定包含在執行階段評估的運算式的自訂前置詞。您指定的自訂前置詞將會覆寫的預設首碼YYYY/MM/dd/HH

自訂字首可使用下列形式的運算式:!{namespace:value},其中 namespace 可為以下項目之一,如下列部分所述。

  • firehose

  • timestamp

  • partitionKeyFromQuery

  • partitionKeyFromLambda

如果字首結尾為斜線,看起來會像是 Amazon S3 儲存貯體內的資料夾。如需詳細資訊,請參閱 Amazon 資料 FirehoseDeveloper指南中的 Amazon S3 物件名稱格式

timestamp 命名空間

此命名空間的有效值為有效 Java DateTimeFormatter 字串的字串。例如,在 2018 年,表達式 !{timestamp:yyyy} 的評估結果為 2018

評估時間戳記時,Firehose 會使用正在寫入之 Amazon S3 物件中所包含之最舊記錄的近似到達時間戳記。

依預設,時間戳記為中UTC。但是,您可以指定您喜歡的時區。例如,您可以在中將時區設定為「亞洲/東京」 AWS Management Console 或者在API參數設置(CustomTimeZone),如果你想使用日本標準時間代替UTC。若要查看支援的時區清單,請參閱 Amazon S3 物件名稱格式

若您在同一字首表達式內多次使用 timestamp 命名空間,每個執行個體的評估結果都是相同的時間。

firehose 命名空間

此命名空間可使用兩個值:error-output-typerandom-string。下表說明如何使用這兩個值。

firehose 命名空間值
Conversion (轉換) 描述 範例輸入 範例輸出 備註
error-output-type 根據 Firehose 串流的組態以及失敗的原因,評估為下列其中一個字串:{處理失敗、失敗、溢出失敗、 AmazonOpenSearchService、、}。 format-conversion-failed http-endpoint-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 達到極高輸送量有時需要的隨機字首。

partitionKeyFromLambdapartitionKeyFromQuery 命名空間

對於動態分割,您必須在 S3 儲存貯體字首中使用下列運算式格式:!{namespace:value},其中命名空間可以是 partitionKeyFromQuerypartitionKeyFromLambda,也可以是兩者。如果您使用內嵌剖析來建立來源資料的分割索引鍵,則必須指定由以下格式指定之運算式所組成的 S3 儲存貯體字首值:"partitionKeyFromQuery:keyID"。如果您正在使用 AWS Lambda 函數若要為來源資料建立分割金鑰,您必須指定由以下格式指定的運算式所組成的 S3 儲存貯體前綴值:"partitionKeyFromLambda:keyID"如需詳細資訊,請參閱建立 Amazon Firehose 串流中的「為您的目的地選擇 Amazon S3」。

語義規則

下列規則適用於 PrefixErrorOutputPrefix 表達式。

  • timestamp 命名空間而言,不在單引號內的任何字元都將納入評估。換言之,值欄位中任何以單引號逸出的字串都將依照字面意思處理。

  • 如果您指定不包含時間戳記命名空間運算式的前置詞,Firehose 會將運算式附加!{timestamp:yyyy/MM/dd/HH/}至欄位中的Prefix值。

  • 序列 !{ 僅出現於 !{namespace:value} 表達式。

  • 僅在 Prefix 不具表達式時,ErrorOutputPrefix 才可為零。在此情況下,Prefix 評估為 <specified-prefix>yyyy/MM/DDD/HH/,而 ErrorOutputPrefix 評估為 <specified-prefix><error-output-type>YYYY/MM/DDD/HH/DDD 代表某年某日。

  • 若您指定 ErrorOutputPrefix 的表達式,務必納入至少一個 !{firehose:error-output-type} 執行個體。

  • Prefix 無法納入 !{firehose:error-output-type}

  • PrefixErrorOutputPrefix 評估後都不能超過 512 個字元。

  • 若目的地為 Amazon Redshift,Prefix 必定不能具備運算式,ErrorOutputPrefix 必須為零。

  • 當目的地是 Amazon OpenSearch 服務或 Splunk,並且沒有ErrorOutputPrefix指定時,Firehose 會使用該Prefix欄位來輸入失敗的記錄。

  • 當目的地為 Amazon S3 時,Amazon S3 目的地組態中的 PrefixErrorOutputPrefix 會分別用於成功的記錄和失敗的記錄。如果您使用 AWS CLI 或者API,您可以使ExtendedS3DestinationConfiguration用它自己的Prefix和來指定 Amazon S3 備份組態ErrorOutputPrefix

  • 當您使用 AWS Management Console 並將目的地設定為 Amazon S3,Firehose 會分別使用目標組態ErrorOutputPrefix中的Prefix和來處理成功記錄和失敗記錄。如果您使用表示式指定前置詞,則必須指定錯誤前置碼,包括!{firehose:error-output-type}

  • 當您ExtendedS3DestinationConfiguration搭配使用時 AWS CLI API、或 AWS CloudFormation,如果您指定了S3BackupConfiguration,Firehose 就不會提供預設值ErrorOutputPrefix

  • 建立 ErrorOutputPrefix 運算式時partitionKeyFromLambda,您無法使用和partitionKeyFromQuery命名空間。

範例字首

PrefixErrorOutputPrefix 範例
輸入 已評估的前綴(二零一八年八月二十七日UTC上午十時三十分)

Prefix:未指定

ErrorOutputPrefix: myFirehoseFailures/!{firehose:error-output-type}/

Prefix: 2018/08/27/10

ErrorOutputPrefix: myFirehoseFailures/processing-failed/

Prefix: !{timestamp:yyyy/MM/dd}

ErrorOutputPrefix:未指定

無效輸入:Prefix 具有表達式時,ErrorOutputPrefix 不可為零

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

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

Prefix: myFirehose/DeliveredYear=2018/anyMonth/rand=5abf82daaa5

ErrorOutputPrefix: myFirehoseFailures/processing-failed/2018/anyMonth/10

Prefix: myPrefix/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}

Prefix: myPrefix/year=2018/month=07/day=06/hour=23/

ErrorOutputPrefix: myErrorPrefix/year=2018/month=07/day=06/hour=23/processing-failed

Prefix: myFirehosePrefix/

ErrorOutputPrefix:未指定

Prefix: myFirehosePrefix/2018/08/27/

ErrorOutputPrefix: myFirehosePrefix/processing-failed/2018/08/27/