在 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 資料 Firehose 需要以下三個元素來轉換記錄資料的格式:

重要

如果啟用記錄格式轉換,則無法將 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 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} 不會視為字串。

選擇序列化程序

您選擇的序列化程式取決於您的商業需求。要了解有關兩個序列化程序選項的更多信息,請參閱ORC SerDe實木地板 SerDe

從控制台啟用記錄格式轉換

您可以在建立或更新 Firehose 串流時,在主控台上啟用資料格式轉換。啟用資料格式轉換後,Amazon S3 是唯一可以為 Firehose 串流設定的目的地。此外,啟用格式轉換將停用 Amazon S3 壓縮。然而,轉換程序中會自動出現 Snappy 壓縮。Amazon 數據 Firehose 在這種情況下使用的 Snappy 的框架格式與 Hadoop 兼容。這表示您可使用 Snappy 壓縮的結果,並在 Athena 中查詢這些資料。有關 Hadoop 依賴的活潑框架格式,請參閱 .java。BlockCompressorStream

啟用資料 Firehose 串流的資料格式轉換
  1. 登入 AWS Management Console,然後開啟 Amazon 資料 Firehose 主控台,位於https://console.aws.amazon.com/firehose/

  2. 選擇要更新的 Firehose 串流,或依照中的步驟建立新的 Firehose 串流。建立 Firehose 串流

  3. Convert record format (轉換記錄格式) 底下,將 Record format conversion (記錄格式轉換) 設定為 Enabled (已啟用)

  4. 選擇您想要的輸出格式。如需有關這兩個選項的詳細資訊,請參閱 Apache 鑲木地板Apache ORC

  5. 選擇 AWS Glue 表格以指定來源記錄的結構描述。設定區域、資料庫、表格與表格版本。

管理 Firehose 的記錄格式轉換 API

如果您希望 Amazon 數據 Firehose 將輸入數據的格式從JSON轉換為實木複合地板ORC,或者在擴展 DS3 或擴展DestinationConfiguration中指定可選DataFormatConversionConfiguration元素。DestinationUpdate如果您指定 DataFormatConversionConfiguration,則適用下列限制。

錯誤處理

當 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