蜂巢 SerDe - Amazon Athena

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

蜂巢 SerDe

蜂巢 JSON 通 SerDe 常用於處理 JSON 數據,如事件。這些事件以 JSON 編碼文字 (以新行分隔) 的單行字串表示。蜂巢 JSON SerDe 不允許在mapstruct密鑰名稱中重複的密鑰。

注意

SerDe 預期每個 JSON 文件都位於單行文字上,且記錄中欄位之間沒有行終止字元。如果 JSON 文本是漂亮的打印格式,您可能會收到一條錯誤消息,如 HIVE_CURSOR_ERROR:行不是有效的 JSON 對象HIVE_CURSOR_ERROR:: 意外 JsonParseException end-of-input:當您嘗試查詢表後創建表時,對象的預期關閉標記。如需詳細資訊,請參閱上 GitHub的 OpenX SerDe 文件中的 JSON 資料檔案。

下列範例 DDL 陳述式會使用 Hive JSON SerDe ,根據範例線上廣告資料建立資料表。在 LOCATION 子句中,請以您執行 Athena 所在位置的區域識別符 (例如 s3://us-west-2.elasticmapreduce/samples/hive-ads/tables/impressions) 來取代 s3://DOC-EXAMPLE-BUCKET.elasticmapreduce/samples/hive-ads/tables/impressions 中的 myregion

CREATE EXTERNAL TABLE impressions ( requestbegintime string, adid string, impressionid string, referrer string, useragent string, usercookie string, ip string, number string, processid string, browsercookie string, requestendtime string, timers struct < modellookup:string, requesttime:string >, threadid string, hostname string, sessionid string ) PARTITIONED BY (dt string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://DOC-EXAMPLE-BUCKET.elasticmapreduce/samples/hive-ads/tables/impressions';

使用蜂巢 JSON 指定時間戳記格式 SerDe

若要從字串中剖析時間戳記值,您可以將 WITH SERDEPROPERTIES 子欄位新增至 ROW FORMAT SERDE 子句並使用它來指定 timestamp.formats 參數。在參數中,指定一個或多個時間戳記模式的逗號分隔清單,如下範例所示:

... ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd'T'HH:mm:ss.SSS'Z',yyyy-MM-dd'T'HH:mm:ss") ...

如需詳細資訊,請參閱 Apache Hive 文件中時間戳記

載入資料表以進行查詢

建立資料表後,請執行 MSCK REPAIR TABLE 以載入資料表,並讓其可從 Athena 查詢:

MSCK REPAIR TABLE impressions

查詢 CloudTrail 記錄

您可以使用蜂巢 JSON SerDe 查詢 CloudTrail 記錄檔。如需詳細資訊和範例 CREATE TABLE 陳述式,則請參閱 查詢 AWS CloudTrail 記錄檔