

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kueri data JSON
<a name="querying-JSON"></a>

Amazon Athena memungkinkan Anda menanyakan data yang disandikan JSON, mengekstrak data dari JSON bersarang, mencari nilai, dan menemukan panjang dan ukuran array JSON. Untuk mempelajari dasar-dasar kueri data JSON di Athena, pertimbangkan contoh data planet berikut:

```
{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}
```

Perhatikan bagaimana setiap catatan (pada dasarnya, setiap baris dalam tabel) berada pada baris terpisah. Untuk menanyakan data JSON ini, Anda dapat menggunakan `CREATE TABLE` pernyataan seperti berikut:

```
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/'
```

Untuk query data, gunakan `SELECT` pernyataan sederhana seperti contoh berikut.

```
SELECT * FROM planets_json
```

Hasil kueri terlihat seperti berikut ini.


****  

| \# | name | jarakdarimatahari | periode orbital | panjang hari | 
| --- | --- | --- | --- | --- | 
| 1 | Merkuri | 0,39 | 0,24 | 58.65 | 
| 2 | Venus | 0,72 | 0,62 | 243.02 | 
| 3 | Bumi | 1.0 | 1.0 | 1.0 | 
| 4 | Mars | 1,52 | 1,88 | 1.03 | 

Perhatikan bagaimana `CREATE TABLE` pernyataan menggunakan[OpenX JSON SerDe](openx-json-serde.md), yang mengharuskan setiap catatan JSON berada pada baris terpisah. Jika JSON dalam format cetak cantik, atau jika semua catatan berada pada satu baris, data tidak akan dibaca dengan benar.

Untuk kueri data JSON yang dalam format cetak cantik, Anda dapat menggunakan [Sarang Ion Amazon SerDe](ion-serde.md) bukan SerDe OpenX JSON. Pertimbangkan data sebelumnya yang disimpan dalam format cetak cantik:

```
{
  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
}
```

Untuk menanyakan data ini tanpa memformat ulang, Anda dapat menggunakan `CREATE TABLE` pernyataan seperti berikut ini. Perhatikan bahwa, alih-alih menentukan OpenX SerDe JSON, pernyataan menentukan. `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/'
```

Kueri `SELECT * FROM planets_ion` menghasilkan hasil yang sama seperti sebelumnya. Untuk informasi selengkapnya tentang membuat tabel dengan cara ini menggunakan Amazon Ion Hive SerDe, lihat[Buat tabel Amazon Ion](ion-serde-using-create-table.md).

Contoh data JSON sebelumnya tidak berisi tipe data yang kompleks seperti array bersarang atau struct. Untuk informasi selengkapnya tentang menanyakan data JSON bersarang, lihat. [Contoh: deserialisasi JSON bersarang](openx-json-serde.md#nested-json-serde-example)

**Topics**
+ [Praktik terbaik untuk membaca data JSON](parsing-json-data.md)
+ [Ekstrak data JSON dari string](extracting-data-from-JSON.md)
+ [Cari nilai dalam array JSON](searching-for-values.md)
+ [Dapatkan panjang dan ukuran array JSON](length-and-size.md)
+ [Memecahkan masalah kueri JSON](json-troubleshooting.md)