本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Hive jsonSerDe
Hive JSONSerDe通常用于处理事件等 JSON 数据。这些事件表示为用新行分隔的 JSON 编码文本的单行字符串。Hive JSONSerDe不允许重复密钥进入map
要么struct
密钥名称。
注意
该SerDe期望每个 JSON 文档位于一行文本上,记录中的字段之间没有行终止字符。如果 JSON 文本的打印格式很漂亮,你可能会收到一条错误消息,比如HIVE_CURSOR_ERROR:行不是有效的 JSON 对象
要么HIVE_CURSOR_错误:JsonParseException: 意想不到的 end-of-input: OBJECT 的预期关闭标记
当您在创建表后尝试查询表时。有关更多信息,请参见JSON 数据文件
以下示例 DDL 语句使用 Hive JSONSerDe根据示例在线广告数据创建表格。在 LOCATION
子句中,将 s3://
中的 myregion
.elasticmapreduce/samples/hive-ads/tables/impressionsmyregion
替换为您运行 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://
myregion
.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 JSONSerDe去查询CloudTrail日志。有关更多信息以及示例 CREATE TABLE
语句,请参阅 查询 Amazon CloudTrail 日志。