Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Copia di dati tra DynamoDB e Amazon S3
Se si dispone di dati in una tabella DynamoDB, è possibile utilizzare Hive per copiarli in un bucket Amazon S3.
È possibile eseguire questa operazione se si desidera creare un archivio di dati nella tabella DynamoDB. Ad esempio, si supponga di disporre di un ambiente di test in cui è necessario lavorare con un set di base di dati di test in DynamoDB. È possibile copiare i dati di base in un bucket Amazon S3 e quindi eseguire i test. Successivamente, sarà possibile reimpostare l'ambiente di test ripristinando i dati di base dal bucket di Amazon S3 su DynamoDB.
Se hai funzionatoTutorial: Utilizzo di Amazon DynamoDB e Apache Hive, allora hai già un bucket Amazon S3 che contiene i tuoi log Amazon. EMR È possibile utilizzare questo bucket per gli esempi in questa sezione, se si conosce il percorso principale per il bucket:
Apri la EMR console Amazon in https://console.aws.amazon.com/emr
. -
Per Nome, scegli il nome del cluster.
-
URIÈ elencato in Accedi nella URI sezione Dettagli di configurazione.
-
Prendere nota del percorso completo dei bucket. La convenzione di denominazione è:
s3://aws-logs-
accountID
-region
dove
accountID
è l'ID AWS dell'account e la regione è la AWS regione del bucket.
Nota
Per questi esempi, useremo un percorso secondario all'interno del bucket.
s3://aws-logs-123456789012-us-west-2
/hive-test
Le procedure seguenti presuppongono che sia stata seguita la procedura nel tutorial e che sia presente una tabella esterna in DynamoDB denominata ddb_features.
Argomenti
Copia di dati utilizzando il formato predefinito Hive
Esempio Da DynamoDB a Amazon S3
Utilizza un'istruzione INSERT OVERWRITE
per scrivere direttamente in Amazon S3.
INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test' SELECT * FROM ddb_features;
Il file di dati in Amazon S3 ha il seguente aspetto:
920709
^A
Soldiers Farewell Hill^A
Summit^A
NM^A
32.3564729^A
-108.33004616135 1178153^A
Jones Run^A
Stream^A
PA^A
41.2120086^A
-79.25920781260 253838^A
Sentinel Dome^A
Summit^A
CA^A
37.7229821^A
-119.584338133 264054^A
Neversweet Gulch^A
Valley^A
CA^A
41.6565269^A
-122.83614322900 115905^A
Chacaloochee Bay^A
Bay^A
AL^A
30.6979676^A
-87.97388530
Ogni campo è separato da un SOH carattere (inizio del titolo, 0x01). Nel file, SOH appare come. ^A
Esempio Da Amazon S3 a DynamoDB
-
Crea una tabella esterna che punta ai dati non formattati in 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';
-
Copiare i dati in DynamoDB.
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_unformatted;
Copia di dati con un formato specificato dall'utente
Se desideri specificare il proprio carattere separatore dei campi, è possibile creare una tabella esterna mappata al bucket Amazon S3. È possibile utilizzare questa tecnica per creare file di dati con valori separati da virgole (). CSV
Esempio Da DynamoDB a Amazon S3
-
Crea una tabella esterna Hive mappata ad Amazon S3. Quando si esegue questa operazione, assicurarsi che i tipi di dati siano coerenti con quelli della tabella esterna 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';
-
Copiare i dati da DynamoDB.
INSERT OVERWRITE TABLE s3_features_csv SELECT * FROM ddb_features;
Il file di dati in Amazon S3 ha il seguente aspetto:
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
Esempio Da Amazon S3 a DynamoDB
Con una singola istruzione HiveQL, è possibile popolare la tabella DynamoDB utilizzando i dati di Amazon S3:
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_csv;
Copia di dati senza mappature di colonne
È possibile copiare i dati da DynamoDB in un formato non elaborato e scriverli in Amazon S3 senza specificare alcun tipo di dati o mappatura di colonne. Questo metodo può essere utilizzato per creare un archivio dei dati DynamoDB e memorizzarlo in Amazon S3.
Esempio Da DynamoDB a Amazon S3
-
Crea una tabella esterna associata alla tabella DynamoDB. In questa istruzione HiveQL non c'è
dynamodb.column.mapping
.CREATE EXTERNAL TABLE ddb_features_no_mapping (item MAP<STRING, STRING>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Features");
-
Crea un'altra tabella esterna associata al bucket Amazon S3.
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';
-
Copiare i dati da DynamoDB ad Amazon S3.
INSERT OVERWRITE TABLE s3_features_no_mapping SELECT * FROM ddb_features_no_mapping;
Il file di dati in Amazon S3 ha il seguente aspetto:
Name
^C
{"s":"Soldiers Farewell Hill"}^B
State^C
{"s":"NM"}^B
Class^C
{"s":"Summit"}^B
Elevation^C
{"n":"6135"}^B
Latitude^C
{"n":"32.3564729"}^B
Id^C
{"n":"920709"}^B
Longitude^C
{"n":"-108.3300461"} Name^C
{"s":"Jones Run"}^B
State^C
{"s":"PA"}^B
Class^C
{"s":"Stream"}^B
Elevation^C
{"n":"1260"}^B
Latitude^C
{"n":"41.2120086"}^B
Id^C
{"n":"1178153"}^B
Longitude^C
{"n":"-79.2592078"} Name^C
{"s":"Sentinel Dome"}^B
State^C
{"s":"CA"}^B
Class^C
{"s":"Summit"}^B
Elevation^C
{"n":"8133"}^B
Latitude^C
{"n":"37.7229821"}^B
Id^C
{"n":"253838"}^B
Longitude^C
{"n":"-119.58433"} Name^C
{"s":"Neversweet Gulch"}^B
State^C
{"s":"CA"}^B
Class^C
{"s":"Valley"}^B
Elevation^C
{"n":"2900"}^B
Latitude^C
{"n":"41.6565269"}^B
Id^C
{"n":"264054"}^B
Longitude^C
{"n":"-122.8361432"} Name^C
{"s":"Chacaloochee Bay"}^B
State^C
{"s":"AL"}^B
Class^C
{"s":"Bay"}^B
Elevation^C
{"n":"0"}^B
Latitude^C
{"n":"30.6979676"}^B
Id^C
{"n":"115905"}^B
Longitude^C
{"n":"-87.9738853"}
Ogni campo inizia con un STX carattere (inizio del testo, 0x02) e termina con un ETX carattere (fine testo, 0x03). Nel file, STX appare come e appare come^B
. ETX ^C
Esempio Da Amazon S3 a DynamoDB
Con una singola istruzione HiveQL, è possibile popolare la tabella DynamoDB utilizzando i dati di Amazon S3:
INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM s3_features_no_mapping;
Visualizzazione dei dati in Amazon S3
Se lo utilizzi SSH per connetterti al nodo leader, puoi usare il AWS Command Line Interface (AWS CLI) per accedere ai dati che Hive ha scritto su Amazon S3.
I passaggi seguenti presuppongono che siano stati copiati i dati da DynamoDB ad Amazon S3 utilizzando una delle procedure descritte in questa sezione.
-
Se ti trovi attualmente al prompt dei comandi di Hive, passa al prompt dei comandi di Linux.
hive> exit;
-
Elencare il contenuto della directory hive-test nel bucket Amazon S3. Questo è il percorso in cui Hive ha copiato i dati da DynamoDB.
aws s3 ls s3://aws-logs-123456789012-us-west-2/hive-test/
La risposta dovrebbe essere simile alla seguente:
2016-11-01 23:19:54 81983 000000_0
Il nome del file (000000_0) è generato dal sistema.
-
(Facoltativo) È possibile copiare il file di dati da Amazon S3 nel file system locale sul nodo principale. Successivamente, sarà possibile utilizzare le utilità della riga di comando Linux standard per lavorare con i dati nel file.
aws s3 cp s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 .
La risposta dovrebbe essere simile alla seguente:
download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0
Nota
Il file system locale sul nodo principale ha una capacità limitata. Non utilizzare questo comando con file più grandi dello spazio disponibile nel file system locale.