

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

# Menyalin data antara DynamoDB dan Amazon S3
<a name="EMRforDynamoDB.CopyingData.S3"></a>

Jika memiliki data dalam tabel DynamoDB, Anda dapat menggunakan Hive untuk menyalin data tersebut ke bucket Amazon S3.

Anda dapat melakukannya jika ingin membuat arsip data dalam tabel DynamoDB Anda. Misalnya, anggaplah lingkungan pengujian Anda mengharuskan Anda menggunakan kumpulan data pengujian dasar di DynamoDB. Anda dapat menyalin data dasar ke bucket Amazon S3, lalu menjalankan pengujian. Setelah itu, Anda dapat mengatur ulang lingkungan pengujian dengan memulihkan data dasar dari bucket Amazon S3 ke DynamoDB.

Jika Anda bekerja menggunakan [Tutorial: Menggunakan Amazon DynamoDB dan Apache Hive](EMRforDynamoDB.Tutorial.md), maka Anda sudah memiliki bucket Amazon S3 yang berisi log Amazon EMR. Anda dapat menggunakan bucket ini untuk contoh di bagian ini, jika Anda tahu jalur root untuk bucket:

1. [Buka konsol EMR Amazon di https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr/)

1. Untuk **Nama**, pilih klaster Anda.

1. URI tercantum di **URI Log** di bagian **Detail Konfigurasi**.

1. Membuat catatan tentang jalur root bucket. Konvensi penamaan adalah:

   `s3://aws-logs-{{accountID}}-{{region}}`

   di {{accountID}} mana ID AWS akun Anda dan wilayah adalah AWS wilayah untuk bucket.

**catatan**  
Untuk contoh ini, kita akan menggunakan subpath dalam bucket, seperti dalam contoh ini:  
 `s3://aws-logs-123456789012-us-west-2/hive-test`

Prosedur berikut ditulis dengan asumsi Anda mengikuti langkah-langkah di tutorial dan memiliki tabel eksternal di DynamoDB bernama *ddb\_features*.

**Topics**
+ [Menyalin data menggunakan format default Hive](#EMRforDynamoDB.CopyingData.S3.DefaultFormat)
+ [Menyalin data dengan format yang ditentukan pengguna](#EMRforDynamoDB.CopyingData.S3.UserSpecifiedFormat)
+ [Menyalin data tanpa pemetaan kolom](#EMRforDynamoDB.CopyingData.S3.NoColumnMapping)
+ [Melihat Data di Amazon S3](#EMRforDynamoDB.CopyingData.S3.ViewingData)

## Menyalin data menggunakan format default Hive
<a name="EMRforDynamoDB.CopyingData.S3.DefaultFormat"></a>

**Example Dari DynamoDB ke Amazon S3**  
Gunakan pernyataan `INSERT OVERWRITE` untuk menulis langsung ke Amazon S3.  

```
INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test'
SELECT * FROM ddb_features;
```
File data di Amazon S3 terlihat seperti ini:  

```
920709^ASoldiers Farewell Hill^ASummit^ANM^A32.3564729^A-108.33004616135
1178153^AJones Run^AStream^APA^A41.2120086^A-79.25920781260
253838^ASentinel Dome^ASummit^ACA^A37.7229821^A-119.584338133
264054^ANeversweet Gulch^AValley^ACA^A41.6565269^A-122.83614322900
115905^AChacaloochee Bay^ABay^AAL^A30.6979676^A-87.97388530
```
Setiap bidang dipisahkan oleh karakter SOH (awal mulai, 0x01). Di file, SOH muncul sebagai **^A**.

**Example Dari Amazon S3 ke DynamoDB**  

1. Buat tabel eksternal yang menunjuk ke data yang belum diformat di Amazon S3.

   ```
   CREATE EXTERNAL TABLE s3_features_unformatted
       (feature_id       BIGINT,
       feature_name      STRING ,
       feature_class     STRING ,
       state_alpha       STRING,
       prim_lat_dec      DOUBLE ,
       prim_long_dec     DOUBLE ,
       elev_in_ft        BIGINT)
   LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
   ```

1. Salin data ke DynamoDB.

   ```
   INSERT OVERWRITE TABLE ddb_features
   SELECT * FROM s3_features_unformatted;
   ```

## Menyalin data dengan format yang ditentukan pengguna
<a name="EMRforDynamoDB.CopyingData.S3.UserSpecifiedFormat"></a>

Jika ingin menentukan karakter pemisah bidang Anda sendiri, Anda dapat membuat tabel eksternal yang dipetakan ke bucket Amazon S3. Anda dapat menggunakan teknik ini untuk membuat file data dengan nilai yang dipisahkan oleh koma (CSV).

**Example Dari DynamoDB ke Amazon S3**  

1. Buat tabel eksternal Hive yang dipetakan ke Amazon S3. Jika Anda melakukannya, pastikan jenis data konsisten dengan jenis data yang ada di tabel eksternal DynamoDB.

   ```
   CREATE EXTERNAL TABLE s3_features_csv
       (feature_id       BIGINT,
       feature_name      STRING,
       feature_class     STRING,
       state_alpha       STRING,
       prim_lat_dec      DOUBLE,
       prim_long_dec     DOUBLE,
       elev_in_ft        BIGINT)
   ROW FORMAT DELIMITED
   FIELDS TERMINATED BY ','
   LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
   ```

1. Salin data dari DynamoDB.

   ```
   INSERT OVERWRITE TABLE s3_features_csv
   SELECT * FROM ddb_features;
   ```
File data di Amazon S3 terlihat seperti ini:  

```
920709,Soldiers Farewell Hill,Summit,NM,32.3564729,-108.3300461,6135
1178153,Jones Run,Stream,PA,41.2120086,-79.2592078,1260
253838,Sentinel Dome,Summit,CA,37.7229821,-119.58433,8133
264054,Neversweet Gulch,Valley,CA,41.6565269,-122.8361432,2900
115905,Chacaloochee Bay,Bay,AL,30.6979676,-87.9738853,0
```

**Example Dari Amazon S3 ke DynamoDB**  
Dengan pernyataan HiveQL tunggal, Anda dapat mengisi tabel DynamoDB menggunakan data dari Amazon S3:  

```
INSERT OVERWRITE TABLE ddb_features
SELECT * FROM s3_features_csv;
```

## Menyalin data tanpa pemetaan kolom
<a name="EMRforDynamoDB.CopyingData.S3.NoColumnMapping"></a>

Anda dapat menyalin data dari DynamoDB dalam format mentah dan menuliskannya ke Amazon S3 tanpa menentukan jenis data atau pemetaan kolom. Anda dapat menggunakan metode ini untuk membuat arsip data DynamoDB dan menyimpannya di Amazon S3.



**Example Dari DynamoDB ke Amazon S3**  

1. Buat tabel eksternal yang terkait dengan tabel DynamoDB Anda. (Tidak ada `dynamodb.column.mapping` dalam pernyataan HiveQL ini.)

   ```
   CREATE EXTERNAL TABLE ddb_features_no_mapping
       (item MAP<STRING, STRING>)
   STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
   TBLPROPERTIES ("dynamodb.table.name" = "Features");
   ```

   

1. Buat tabel eksternal lain yang terkait dengan bucket Amazon S3 Anda.

   ```
   CREATE EXTERNAL TABLE s3_features_no_mapping
       (item MAP<STRING, STRING>)
   ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\t'
   LINES TERMINATED BY '\n'
   LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
   ```

1. Salin data dari DynamoDB ke Amazon S3.

   ```
   INSERT OVERWRITE TABLE s3_features_no_mapping
   SELECT * FROM ddb_features_no_mapping;
   ```
File data di Amazon S3 terlihat seperti ini:  

```
Name^C{"s":"Soldiers Farewell Hill"}^BState^C{"s":"NM"}^BClass^C{"s":"Summit"}^BElevation^C{"n":"6135"}^BLatitude^C{"n":"32.3564729"}^BId^C{"n":"920709"}^BLongitude^C{"n":"-108.3300461"}
Name^C{"s":"Jones Run"}^BState^C{"s":"PA"}^BClass^C{"s":"Stream"}^BElevation^C{"n":"1260"}^BLatitude^C{"n":"41.2120086"}^BId^C{"n":"1178153"}^BLongitude^C{"n":"-79.2592078"}
Name^C{"s":"Sentinel Dome"}^BState^C{"s":"CA"}^BClass^C{"s":"Summit"}^BElevation^C{"n":"8133"}^BLatitude^C{"n":"37.7229821"}^BId^C{"n":"253838"}^BLongitude^C{"n":"-119.58433"}
Name^C{"s":"Neversweet Gulch"}^BState^C{"s":"CA"}^BClass^C{"s":"Valley"}^BElevation^C{"n":"2900"}^BLatitude^C{"n":"41.6565269"}^BId^C{"n":"264054"}^BLongitude^C{"n":"-122.8361432"}
Name^C{"s":"Chacaloochee Bay"}^BState^C{"s":"AL"}^BClass^C{"s":"Bay"}^BElevation^C{"n":"0"}^BLatitude^C{"n":"30.6979676"}^BId^C{"n":"115905"}^BLongitude^C{"n":"-87.9738853"}
```
Setiap bidang diawali dengan karakter STX (awal teks, 0x02) dan diakhiri dengan karakter ETX (akhir teks, 0x03). Dalam file tersebut, STX muncul sebagai **^B** dan ETX muncul sebagai **^C**.

**Example Dari Amazon S3 ke DynamoDB**  
Dengan pernyataan HiveQL tunggal, Anda dapat mengisi tabel DynamoDB menggunakan data dari Amazon S3:  

```
INSERT OVERWRITE TABLE ddb_features_no_mapping
SELECT * FROM s3_features_no_mapping;
```

## Melihat Data di Amazon S3
<a name="EMRforDynamoDB.CopyingData.S3.ViewingData"></a>

Jika menggunakan SSH untuk menghubungkan ke simpul pemimpin, Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk mengakses data yang ditulis Hive ke Amazon S3.

Langkah-langkah berikut ditulis dengan asumsi Anda telah menyalin data dari DynamoDB ke Amazon S3 menggunakan salah satu prosedur di bagian ini.

1. Jika saat ini Anda berada di prompt perintah Hive, keluarlah ke prompt perintah Linux.

   ```
   hive> exit;
   ```

1. Cantumkan konten direktori hive-test di bucket Amazon S3 Anda. (Di sinilah Hive menyalin data dari DynamoDB.)

   ```
   aws s3 ls s3://aws-logs-123456789012-us-west-2/hive-test/
   ```

   Responsnya akan tampak mirip dengan ini:

   `2016-11-01 23:19:54 81983 000000_0` 

   Nama file (*000000\_0*) dihasilkan sistem.

1. (Opsional) Anda dapat menyalin file data dari Amazon S3 ke sistem file lokal di simpul pemimpin. Setelah melakukannya, Anda dapat menggunakan utilitas baris perintah Linux standar untuk menggunakan data dalam file.

   ```
   aws s3 cp s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 .
   ```

   Responsnya akan tampak mirip dengan ini:

   `download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0`
**catatan**  
Kapasitas sistem file lokal di simpul pemimpin terbatas. Jangan gunakan perintah ini dengan file yang lebih besar dari ruang yang tersedia di sistem file lokal.