本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
蜂巢 JSON SerDe
蜂巢通JSON SerDe 常用於處理JSON數據,如事件。這些事件被表示為由新行分隔的JSON編碼文本的單行字符串。蜂巢JSON SerDe 不允許重複鍵map
或struct
密鑰名稱。
注意
SerDe 預期每個JSON文件都位於單行文字上,記錄中的欄位之間沒有行終止字元。如果JSON文本是漂亮的打印格式,你可能會收到一個錯誤消息,如 HIVECURSOR_ _ERROR: 行不是一個有效的JSON對象
或 HIVECURSOR_ _ ERROR JsonParseException end-of-input: 意外:OBJECT當你嘗試查詢表後,你創建它的預期關閉標記
。如需詳細資訊,請參閱上 GitHub的 OpenX SerDe 文件中的資JSON料
下列範例DDL陳述式會使用 Hive JSON SerDe ,根據範例線上廣告資料建立資料表。在子LOCATION
句中,取代 myregion
s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions
使用您執行 Athena 的地區識別碼 (例如s3://us-west-2.elasticmapreduce/samples/hive-ads/tables/impressions
)。
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://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions';
使用 Hive 指定時間戳格式 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 記錄
您可以使用 Hive JSON SerDe 來查詢 CloudTrail 日誌。如需詳細資訊和範例 CREATE TABLE
陳述式,則請參閱 查詢 AWS CloudTrail 日誌。