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

查询 JSON

Amazon Athena 可让您查询 JSON 编码的数据,从嵌套 JSON 中提取数据,搜索值,以及查找 JSON 数组的长度和大小。要了解在 Athena 中查询 JSON 数据的基础知识,请考虑下列星球数据示例:

{name:"Mercury",distanceFromSun:0.39,orbitalPeriod:0.24,dayLength:58.65} {name:"Venus",distanceFromSun:0.72,orbitalPeriod:0.62,dayLength:243.02} {name:"Earth",distanceFromSun:1.00,orbitalPeriod:1.00,dayLength:1.00} {name:"Mars",distanceFromSun:1.52,orbitalPeriod:1.88,dayLength:1.03}

请注意每个记录(实际上是表中的每一行)是如何位于一个单独的行上的。要查询此 JSON 数据,可以使用如下 CREATE TABLE 语句:

CREATE EXTERNAL TABLE `planets_json`( `name` string, `distancefromsun` double, `orbitalperiod` double, `daylength` double) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/json/'

要查询数据,请使用类似以下示例的简单 SELECT 语句。

SELECT * FROM planets_json

查询结果如下所示。

# name distancefromsun orbitalperiod daylength
1 水星 0.39 0.24 58.65
2 金星 0.72 0.62 243.02
3 地球 1.0 1.0 1.0
4 火星 1.52 1.88 1.03

请注意 CREATE TABLE 语句是如何使用 OpenX JSON SerDe 的,它要求每个 JSON 记录都在一个单独的行上。如果 JSON 采用漂亮打印格式,或者所有记录都在一行上,则数据将无法正确读取。

要查询采用漂亮打印格式的 JSON 数据,可以使用 Amazon Ion Hive SerDe 代替 OpenX JSON Serde。考虑以前以漂亮打印格式存储的数据:

{ name:"Mercury", distanceFromSun:0.39, orbitalPeriod:0.24, dayLength:58.65 } { name:"Venus", distanceFromSun:0.72, orbitalPeriod:0.62, dayLength:243.02 } { name:"Earth", distanceFromSun:1.00, orbitalPeriod:1.00, dayLength:1.00 } { name:"Mars", distanceFromSun:1.52, orbitalPeriod:1.88, dayLength:1.03 }

要在不重新设置格式的情况下查询这些数据,可以使用如下 CREATE TABLE 语句。请注意,语句不是指定 OpenX JSON SerDe,而是指定 STORED AS ION

CREATE EXTERNAL TABLE `planets_ion`( `name` string, `distancefromsun` DECIMAL(10, 2), `orbitalperiod` DECIMAL(10, 2), `daylength` DECIMAL(10, 2)) STORED AS ION LOCATION 's3://DOC-EXAMPLE-BUCKET/json-ion/'

查询 SELECT * FROM planets_ion 产生的结果与以前相同。有关使用 Amazon Ion Hive SerDe 以这种方式创建表的更多信息,请参阅 使用 CREATE TABLE 创建 Amazon Ion 表

前面的示例 JSON 数据不包含复杂的数据类型,如嵌套数组或结构。有关查询嵌套 JSON 数据的更多信息,请参阅 示例:反序列化嵌套 JSON