

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

# Mengkueri data di DynamoDB
<a name="EMRforDynamoDB.Querying"></a>

Contoh berikut menunjukkan beberapa cara yang dapat Anda gunakan dalam menggunakan HiveQL untuk mengkueri data yang disimpan di DynamoDB.

Contoh-contoh ini mengacu pada tabel *ddb\$1features* di tutorial ([Langkah 5: Salin data ke DynamoDB](EMRforDynamoDB.Tutorial.CopyDataToDDB.md)).

**Topics**
+ [Menggunakan fungsi agregat](#EMRforDynamoDB.Querying.AggregateFunctions)
+ [Menggunakan klausul GROUP BY dan HAVING](#EMRforDynamoDB.Querying.GroupByAndHaving)
+ [Menggabungkan dua tabel DynamoDB](#EMRforDynamoDB.Querying.JoiningTwoTables)
+ [Tabel Gabungan dari berbagai sumber](#EMRforDynamoDB.Querying.JoiningTablesFromDifferentSources)

## Menggunakan fungsi agregat
<a name="EMRforDynamoDB.Querying.AggregateFunctions"></a>

HiveQL menyediakan fungsi bawaan untuk meringkas nilai-nilai data. Misalnya, Anda dapat menggunakan fungsi `MAX` untuk menemukan nilai terbesar untuk kolom tertentu. Contoh berikut mengembalikan elevasi fitur tertinggi di negara bagian Colorado.

```
SELECT MAX(elev_in_ft)
FROM ddb_features
WHERE state_alpha = 'CO';
```

## Menggunakan klausul GROUP BY dan HAVING
<a name="EMRforDynamoDB.Querying.GroupByAndHaving"></a>

Anda dapat menggunakan klausul `GROUP BY` untuk mengumpulkan data di beberapa catatan. Klausul ini sering kali digunakan dengan fungsi agregat seperti `SUM`, `COUNT`, `MIN`, atau `MAX`. Anda juga dapat menggunakan klausul `HAVING` untuk membuang hasil yang tidak memenuhi kriteria tertentu.

Contoh berikut menghasilkan daftar elevasi tertinggi dari negara-negara yang memiliki lebih dari lima fitur di tabel *ddb\$1features*.

```
SELECT state_alpha, max(elev_in_ft)
FROM ddb_features
GROUP BY state_alpha
HAVING count(*) >= 5;
```

## Menggabungkan dua tabel DynamoDB
<a name="EMRforDynamoDB.Querying.JoiningTwoTables"></a>

Contoh berikut memetakan tabel Hive lain (*east\$1coast\$1states*) ke tabel di DynamoDB. Pernyataan `SELECT` adalah gabungan di dua tabel ini. Gabungan tersebut dikomputasi pada klaster dan dikembalikan. Gabungan ini tidak terjadi di DynamoDB. 

Pertimbangkan tabel DynamoDB EastCoastStates bernama yang berisi data berikut:

```
StateName       StateAbbrev

Maine           ME
New Hampshire   NH
Massachusetts   MA
Rhode Island    RI
Connecticut     CT
New York        NY
New Jersey      NJ
Delaware        DE
Maryland        MD
Virginia        VA
North Carolina  NC
South Carolina  SC
Georgia         GA
Florida         FL
```

Mari kita asumsikan tabel tersedia sebagai tabel eksternal Hive bernama east\$1coast\$1states:

```
1. CREATE EXTERNAL TABLE ddb_east_coast_states (state_name STRING, state_alpha STRING)
2. STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
3. TBLPROPERTIES ("dynamodb.table.name" = "EastCoastStates",
4. "dynamodb.column.mapping" = "state_name:StateName,state_alpha:StateAbbrev");
```

Gabungan berikut menampilkan negara-negara di Pantai Timur Amerika Serikat yang memiliki setidaknya tiga fitur:

```
SELECT ecs.state_name, f.feature_class, COUNT(*)
FROM ddb_east_coast_states ecs
JOIN ddb_features f on ecs.state_alpha = f.state_alpha
GROUP BY ecs.state_name, f.feature_class
HAVING COUNT(*) >= 3;
```

## Tabel Gabungan dari berbagai sumber
<a name="EMRforDynamoDB.Querying.JoiningTablesFromDifferentSources"></a>

Di contoh berikut, s3\$1east\$1coast\$1states adalah tabel Hive yang terkait dengan file CSV yang disimpan di Amazon S3. Tabel *ddb\$1features* terkait dengan data dalam DynamoDB. Contoh berikut menggabungkan dua tabel ini, menampilkan fitur geografis dari negara-negara yang namanya dimulai dengan "New."

```
1. create external table s3_east_coast_states (state_name STRING, state_alpha STRING)
2. ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
3. LOCATION 's3://bucketname/path/subpath/';
```

```
SELECT ecs.state_name, f.feature_name, f.feature_class
FROM s3_east_coast_states ecs
JOIN ddb_features f
ON ecs.state_alpha = f.state_alpha
WHERE ecs.state_name LIKE 'New%';
```