

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Kopieren von Daten zwischen DynamoDB und Amazon S3
<a name="EMRforDynamoDB.CopyingData.S3"></a>

Wenn Sie Daten in einer DynamoDB-Tabelle vorliegen haben, können Sie sie mit Hive in einen Amazon-S3-Bucket kopieren.

Dies ist sinnvoll, wenn Sie ein Datenarchiv in Ihrer DynamoDB-Tabelle erstellen möchten. Angenommen, Sie haben eine Testumgebung, in der Sie mit einer grundlegenden Reihe von Testdaten in DynamoDB arbeiten müssen. Sie können die grundlegenden Daten in einen Amazon-S3-Bucket kopieren und Ihre Tests dann ausführen. Danach können Sie die Testumgebung durch Wiederherstellen der grundlegenden Daten aus dem Amazon-S3-Bucket in DynamoDB zurücksetzen.

Wenn Sie das [Tutorial: Arbeiten mit Amazon DynamoDB und Apache Hive](EMRforDynamoDB.Tutorial.md) durchgearbeitet haben, verfügen Sie bereits über einen Amazon-S3-Bucket, der Ihre Amazon-EMR-Protokolle enthält. Sie können diesen Bucket für die Beispiele in diesem Abschnitt verwenden, wenn Sie den Stammpfad des Buckets kennen:

1. Öffnen Sie die Amazon EMR-Konsole unter [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/).

1. Wählen Sie für **Name** Ihren Cluster aus.

1. Der URI ist in **Log URI** unter **Configuration Details** aufgelistet.

1. Notieren Sie den Stammpfad des Buckets. Die Namenskonvention lautet wie folgt:

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

   wo {{accountID}} ist Ihre AWS Konto-ID und Region ist die AWS Region für den Bucket.

**Anmerkung**  
Bei diesen Beispielen verwenden wir ein Unterpfad innerhalb des Buckets, wie in diesem Fall:  
 `s3://aws-logs-123456789012-us-west-2/hive-test`

Die folgenden Verfahren setzen voraus, dass Sie die Schritte im Tutorial befolgt haben und über eine externe Tabelle, die in DynamoDB verwaltet wird (*ddb\_features*), verfügen.

**Topics**
+ [Kopieren von Daten mit dem Hive-Standardformat](#EMRforDynamoDB.CopyingData.S3.DefaultFormat)
+ [Kopieren von Daten in einem benutzerdefinierten Format](#EMRforDynamoDB.CopyingData.S3.UserSpecifiedFormat)
+ [Kopieren von Daten ohne Spaltenmapping](#EMRforDynamoDB.CopyingData.S3.NoColumnMapping)
+ [Anzeigen der Daten in Amazon S3](#EMRforDynamoDB.CopyingData.S3.ViewingData)

## Kopieren von Daten mit dem Hive-Standardformat
<a name="EMRforDynamoDB.CopyingData.S3.DefaultFormat"></a>

**Example Von DynamoDB zu Amazon S3**  
Verwenden Sie eine `INSERT OVERWRITE`-Anweisung, um direkt in Amazon S3 zu schreiben.  

```
INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test'
SELECT * FROM ddb_features;
```
Die Datendatei in Amazon S3 sieht folgendermaßen aus:  

```
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
```
Jedes Feld wird durch ein SoH-Zeichen getrennt (Anfang der Überschrift, 0x01). In der Datei wird SoH als **^A** angezeigt.

**Example Von Amazon S3 zu DynamoDB**  

1. Erstellen Sie eine externe Tabelle, die auf die unformatierten Daten in Amazon S3 verweist.

   ```
   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. Kopieren Sie die Daten nach DynamoDB.

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

## Kopieren von Daten in einem benutzerdefinierten Format
<a name="EMRforDynamoDB.CopyingData.S3.UserSpecifiedFormat"></a>

Wenn Sie ein eigenes Feldtrennzeichen angeben möchten, können Sie eine externe Tabelle erstellen, die dem Amazon S3-Bucket zugeordnet ist. Sie können diese Vorgehensweise zum Erstellen von Datendateien mit CSV-Werten verwenden.

**Example Von DynamoDB zu Amazon S3**  

1. Erstellen Sie eine externe Hive-Tabelle, die Amazon S3 zugeordnet ist. Stellen Sie dabei sicher, dass die Datentypen mit den Typen der externen DynamoDB-Tabelle konsistent sind.

   ```
   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. Kopieren Sie die Daten aus DynamoDB.

   ```
   INSERT OVERWRITE TABLE s3_features_csv
   SELECT * FROM ddb_features;
   ```
Die Datendatei in Amazon S3 sieht folgendermaßen aus:  

```
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 Von Amazon S3 zu DynamoDB**  
Mit einer einzigen HiveQL-Anweisung können Sie die DynamoDB-Tabelle mit den Daten aus Amazon S3: auffüllen:  

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

## Kopieren von Daten ohne Spaltenmapping
<a name="EMRforDynamoDB.CopyingData.S3.NoColumnMapping"></a>

Sie können Daten aus DynamoDB in einem unformatierten Format kopieren und sie ohne Angabe von Datentypen oder Spaltenmapping in Amazon S3 schreiben. Sie können diese Methode zum Erstellen eines Archivs von DynamoDB-Daten und zum Speichern in Amazon S3 verwenden.



**Example Von DynamoDB zu Amazon S3**  

1. Erstellen Sie eine externe Tabelle im Zusammenhang mit Ihrer DynamoDB-Tabelle. (In dieser HiveQL-Anweisung ist keine `dynamodb.column.mapping` enthalten.)

   ```
   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. Erstellen Sie eine weitere externe Tabelle im Zusammenhang mit Ihrem Amazon-S3-Bucket.

   ```
   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. Kopieren Sie die Daten aus DynamoDB in Amazon S3.

   ```
   INSERT OVERWRITE TABLE s3_features_no_mapping
   SELECT * FROM ddb_features_no_mapping;
   ```
Die Datendatei in Amazon S3 sieht folgendermaßen aus:  

```
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"}
```
Jedes Feld beginnt mit einem STX-Zeichen (Textanfang, 0x02) und endet mit einem ETX-Zeichen (Textende, 0x03). In der Datei wird für STX **^B** und für ETX **^C** angegeben.

**Example Von Amazon S3 zu DynamoDB**  
Mit einer einzigen HiveQL-Anweisung können Sie die DynamoDB-Tabelle mit den Daten aus Amazon S3: auffüllen:  

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

## Anzeigen der Daten in Amazon S3
<a name="EMRforDynamoDB.CopyingData.S3.ViewingData"></a>

Wenn Sie eine Verbindung zum Leader-Knoten über SSH herstellen, können Sie die AWS Command Line Interface (AWS CLI) für den Zugriff auf die Daten verwenden, die von Hive in Amazon S3 geschrieben wurden.

Die folgenden Schritte setzen voraus, dass Sie die Daten aus DynamoDB in Amazon S3 mit einem der in diesem Abschnitt beschriebenen Verfahren kopiert haben.

1. Wenn Sie sich an der Hive-Eingabeaufforderung befinden, beenden Sie die Linux-Eingabeaufforderung.

   ```
   hive> exit;
   ```

1. Führen Sie den Inhalt des Hive-Testverzeichnisses in Ihrem Amazon-S3-Bucket auf. (Dies ist der Speicherort, an den Hive die Daten aus DynamoDB kopiert hat.)

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

   Die Antwort sollte wie folgt aussehen:

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

   Der Dateiname (*000000\_0*) wird vom System generiert.

1. (Optional) Sie können die Datendatei aus Amazon S3 in das lokale Dateisystem auf dem Leader-Knoten kopieren. Anschließend können Sie mithilfe von Standardbefehlszeilen-Dienstprogrammen von Linux mit den Daten in der Datei arbeiten.

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

   Die Antwort sollte wie folgt aussehen:

   `download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0`
**Anmerkung**  
Das lokale Dateisystem auf dem Leader-Knoten verfügt über begrenzte Kapazität. Verwenden Sie diesen Befehl nicht mit Dateien, die größer als der im lokalen Dateisystem verfügbare Platz sind.