Hive jsonSerDe - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 数据文件在 OpenX 里SerDe上的文档GitHub。

以下示例 DDL 语句使用 Hive JSONSerDe根据示例在线广告数据创建表格。在 LOCATION 子句中,将 s3://myregion.elasticmapreduce/samples/hive-ads/tables/impressions 中的 myregion 替换为您运行 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 日志