在 Amazon 數據 Firehose 件中轉換輸入數據格式 - Amazon 數據 Firehose

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

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

在 Amazon 數據 Firehose 件中轉換輸入數據格式

Amazon 數據 Firehose 可以在將數據存儲在 Amazon S3 ORC 之前,將輸入數據的格式從JSON轉換為 Apache 實木複合地板或 Apache。實木複合地板並且ORC是列數據格式,可節省空間並啟用更快的查詢相比,面向行的格式,如. JSON 如果要轉換輸入格式以外的其他格式JSON,例如逗號分隔值 (CSV) 或結構化文字,則可以使用 AWS Lambda 將其轉換為JSON第一個。如需詳細資訊,請參閱在 Amazon 數據 Firehose 件中轉換源數據

即使您在將記錄傳送至 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 SerDe。選擇此還原序列化程式後,您可指定欲使用的時間戳記格式,方法是遵循 Joda-Time DateTimeFormat 格式字串的模式語法。如需詳細資訊,請參閱類別 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實木地板 SerDe