本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
查詢 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://amzn-s3-demo-bucket/json/'
若要查詢資料,請使用簡單的 SELECT 陳述式,如下列範例所示。
SELECT * FROM planets_json
查詢結果如下所示。
| # | name | distancefromsun | orbitalperiod | daylength |
|---|---|---|---|---|
| 1 | Mercury | 0.39 | 0.24 | 58.65 |
| 2 | Venus | 0.72 | 0.62 | 243.02 |
| 3 | Earth | 1.0 | 1.0 | 1.0 |
| 4 | Mars | 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://amzn-s3-demo-bucket/json-ion/'
查詢 SELECT * FROM planets_ion 會產生與之前相同的結果。如需有關使用 Amazon Ion Hive SerDe 以這種方式建立資料表的詳細資訊,請參閱 建立 Amazon Ion 資料表。
上述範例 JSON 資料不包含複雜的資料類型,例如巢狀陣列或結構。如需有關查詢巢狀 JSON 資料的詳細資訊,請參閱 範例:還原序列化巢狀 JSON。