本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon 數據 Firehose 件中轉換輸入數據格式
Amazon 數據 Firehose 可以在將數據存儲在 Amazon S3 ORC 之前,將輸入數據的格式從JSON轉換為 Apache 實木複合地板
即使您在將記錄傳送至 Amazon Data Firehose 之前彙總了記錄,也可以轉換資料的格式。
Amazon 資料 Firehose 需要以下三個元素來轉換記錄資料的格式:
Deserializer
Amazon 數據 Firehose 件需要一個解串器來讀取您JSON的輸入數據。您可以選擇以下兩種類型的解串器之一。
將多個JSON文件合併到同一筆記錄時,請確定您的輸入仍以支援的JSON格式顯示。JSON文件陣列不是有效的輸入。
例如,正確的輸入是:{"a":1}{"a":2}
這是不正確的輸入:[{"a":1}, {"a":2}]
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}
不會視為字串。
結構描述
Amazon 資料 Firehose 需要結構描述來決定如何解譯該資料。使用 AWS Glue 在中創建模式 AWS Glue Data Catalog。 然後,Amazon 資料 Firehose 會參考該結構描述,並使用該結構描述來解譯您的輸入資料。您可以使用相同的結構描述來設定 Amazon 資料 Firehose 和分析軟體。如需詳細資訊,請參閱填入 AWS Glue 資料目錄 AWS Glue 開發人員指南。
注意
在中建立的結構描述 AWS Glue 數據目錄應該匹配輸入數據結構。否則,已轉換資料將不會包含結構描述中未指定的屬性。如果您使用巢狀JSON,請在結構描述中使用鏡像資JSON料結構的STRUCT型別。JSON有關如何處理嵌套STRUCT類型的例子,請參閱此示例。
重要
對於未指定大小限制的資料類型,單一資料列中所有資料的實際限制MBs為 32。
如果您指定CHAR
或的長度VARCHAR
,Firehose 會在讀取輸入資料時,以指定長度截斷字串。如果基礎資料字串較長,則會保持不變。
Serializer
Firehose 需要序列化程式才能將資料轉換為目標欄式儲存格式 (Parquet 或ORC) — 您可以選擇以下兩種序列化程式之一。
您選擇的序列化程式取決於您的商業需求。要了解有關兩個序列化程序選項的更多信息,請參閱ORC SerDe