將亞馬遜資料 Firehose 串流交付到 Amazon S3 中的 Apache 冰山表格已處於預覽狀態,且可能會有所變更。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon 數據 Firehose 件中轉換輸入記錄格式
Amazon 數據 Firehose 可以在將數據存儲在 Amazon S3 ORC 之前,將輸入數據的格式從JSON轉換為 Apache 實木複合地板
必要條件
Amazon 資料 Firehose 需要以下三個元素來轉換記錄資料的格式:
-
用於讀取輸入數據JSON的反序列化程序-您可以選擇兩種類型的反序列化器之一:Apache Hive 或 OpenX。JSON SerDe JSON SerDe
注意
將多個JSON文件合併到同一筆記錄時,請確定您的輸入仍以支援的JSON格式顯示。JSON文件陣列不是有效的輸入。
例如,正確的輸入是:
{"a":1}{"a":2}
這是不正確的輸入:
[{"a":1}, {"a":2}]
-
決定如何解譯該資料的結構描述 – 使用 AWS Glue 在 AWS Glue Data Catalog中建立結構描述。然後,Amazon 資料 Firehose 會參考該結構描述,並使用該結構描述來解譯您的輸入資料。您可以使用相同的結構描述來設定 Amazon 資料 Firehose 和分析軟體。如需詳細資訊,請參閱AWS Glue 開發人員指南中的填入 AWS Glue 資料目錄。
注意
在 AWS Glue 資料目錄中建立的結構描述應該符合輸入資料結構。否則,已轉換資料將不會包含結構描述中未指定的屬性。如果您使用巢狀JSON,請在結構描述中使用鏡像資JSON料結構的STRUCT型別。JSON有關如何處理嵌套STRUCT類型的例子,請參閱此示例。
-
將資料轉換為目標欄式儲存格式的序列化程式 (Parquet 或ORC) — 您可以選擇兩種類型的序列化程式之一:或 Parquet。ORC SerDe
SerDe
重要
如果啟用記錄格式轉換,則無法將 Amazon 數據 Firehose 目的地設置為 Amazon OpenSearch 服務,亞馬遜紅移或 Splunk。啟用格式轉換後,Amazon S3 是您唯一可用於 Firehose 串流的目的地。
即使您在將記錄傳送至 Amazon Data Firehose 之前彙總了記錄,也可以轉換資料的格式。
選擇解JSON串器
JSON SerDe如果您的輸入JSON包含以下格式的時間戳記,請選擇 OpenX
-
yyyy-MM-dd'T'HH:mm:ss[.S]'Z',其中小數點最多可有 9 位數 – 例如:
2017-02-07T15:13:01.39256Z
。 -
yyyy-[M]M-[d]d HH:mm:ss[.S],其中小數點最多可有 9 位數 – 例如:
2017-02-07 15:13:01.14
。 -
Epoch 秒 – 例如:
1518033528
。 -
Epoch 毫秒 – 例如:
1518033528123
。 -
浮點 epoch 秒 – 例如:
1518033528.123
。
OpenX JSON SerDe 可以將句號(.
)轉換為下劃線(_
)。它還可以在反序列化之前將JSON密鑰轉換為小寫。如需有關此還原序列器可透過 Amazon Data Firehose 使用的選項的詳細資訊,請參閱 O。penXJson SerDe
如果您不確定要選擇哪個解串器,請使用 OpenX JSON SerDe,除非您有不支持的時間戳記。
如果您有先前列出的格式以外的時間戳記,請使用 Apache Hive JSON SerDeDateTimeFormat
格式字串的模式語法。如需詳細資訊,請參閱類別 DateTimeFormat
您亦可使用特殊值 millis
來剖析時間戳記 (epoch 毫秒)。如果您沒有指定格式,Amazon 資料 Firehose 預設會使java.sql.Timestamp::valueOf
用。
配置單元JSON SerDe 不允許以下內容:
-
欄位名稱內的句點 (
.
)。 -
類型為
uniontype
的欄位。 -
結構描述中具有數值類型的欄位,但在JSON. 例如,如果模式是(一個 int),並且JSON是
{"a":"123"}
,配置單元 SerDe 給出了一個錯誤。
蜂巢 SerDe 不轉換嵌套JSON成字符串。例如,若其中有 {"a":{"inner":1}}
,則 {"inner":1}
不會視為字串。
選擇序列化程序
您選擇的序列化程式取決於您的商業需求。要了解有關兩個序列化程序選項的更多信息,請參閱ORC SerDe
從控制台啟用記錄格式轉換
您可以在建立或更新 Firehose 串流時,在主控台上啟用資料格式轉換。啟用資料格式轉換後,Amazon S3 是唯一可以為 Firehose 串流設定的目的地。此外,啟用格式轉換將停用 Amazon S3 壓縮。然而,轉換程序中會自動出現 Snappy 壓縮。Amazon 數據 Firehose 在這種情況下使用的 Snappy 的框架格式與 Hadoop 兼容。這表示您可使用 Snappy 壓縮的結果,並在 Athena 中查詢這些資料。有關 Hadoop 依賴的活潑框架格式,請參閱 .java。BlockCompressorStream
啟用資料 Firehose 串流的資料格式轉換
-
登入 AWS Management Console,然後開啟 Amazon 資料 Firehose 主控台,位於https://console.aws.amazon.com/firehose/
。 -
選擇要更新的 Firehose 串流,或依照中的步驟建立新的 Firehose 串流。建立 Firehose 串流
-
在 Convert record format (轉換記錄格式) 底下,將 Record format conversion (記錄格式轉換) 設定為 Enabled (已啟用)。
-
選擇您想要的輸出格式。如需有關這兩個選項的詳細資訊,請參閱 Apache 鑲木地板
和 Apache ORC 。 -
選擇 AWS Glue 表格以指定來源記錄的結構描述。設定區域、資料庫、表格與表格版本。
管理 Firehose 的記錄格式轉換 API
如果您希望 Amazon 數據 Firehose 將輸入數據的格式從JSON轉換為實木複合地板ORC,或者在擴展 DS3 或擴展DestinationConfiguration中指定可選DataFormatConversionConfiguration元素。DestinationUpdate如果您指定 DataFormatConversionConfiguration,則適用下列限制。
-
在中 BufferingHints,如果啟用記錄格式轉換,則無法設定
SizeInMBs
為小於 64 的值。格式轉換未啟用時,該值預設為 5,啟用後則變成 128。 -
您必須在延伸 DS3
CompressionFormat
中DestinationConfiguration或在延伸 DS3 中設定為。DestinationUpdateUNCOMPRESSED
CompressionFormat
的預設值為UNCOMPRESSED
。因此,您也可以將其保留在擴展 DestinationConfiguration DS3 中未指定。序列化程序仍會壓縮這些資料,預設使用 Snappy 壓縮。Amazon 數據 Firehose 在這種情況下使用的 Snappy 的框架格式與 Hadoop 兼容。這表示您可使用 Snappy 壓縮的結果,並在 Athena 中查詢這些資料。有關 Hadoop 依賴的活潑框架格式,請參閱 .java。BlockCompressorStream設定序列化程式時,您可選擇其他壓縮類型。
錯誤處理
當 Amazon 資料 Firehose 無法剖析或還原序列化記錄 (例如,當資料與結構描述不相符時),它會使用錯誤前置詞將其寫入 Amazon S3。如果此寫入失敗,Amazon 資料 Firehose 會永遠重試,阻止進一步的交付。Amazon 資料 Firehose 會針對每筆失敗的記錄撰寫具有下列結構描述的JSON文件:
{ "attemptsMade": long, "arrivalTimestamp": long, "lastErrorCode": string, "lastErrorMessage": string, "attemptEndingTimestamp": long, "rawData": string, "sequenceNumber": string, "subSequenceNumber": long, "dataCatalogTable": { "catalogId": string, "databaseName": string, "tableName": string, "region": string, "versionId": string, "catalogArn": string } }
範例
如需如何設定記錄格式轉換的範例 AWS CloudFormation,請參閱AWS:DataFirehose:: DeliveryStream。