Copia di dati tra DynamoDB e Amazon S3 - Amazon DynamoDB

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 è stato seguito il Tutorial: Utilizzo di Amazon DynamoDB e Apache Hive, si dispone già di un bucket Amazon S3 contenente i log Amazon EMR. È possibile utilizzare questo bucket per gli esempi in questa sezione, se si conosce il percorso principale per il bucket:

  1. Apri la console Amazon EMR all'indirizzo https://console.aws.amazon.com/emr.

  2. Per Nome, scegli il nome del cluster.

  3. L'URI è riportato in URI log in Dettagli di configurazione.

  4. 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.

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^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

Ogni campo è separato da un carattere SOH (inizio dell'intestazione, 0x01). Nel file, SOH appare come ^A.

Esempio Da Amazon S3 a DynamoDB
  1. 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';
  2. 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
  1. 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';
  2. 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
  1. 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");

  2. 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';
  3. 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"}^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"}

Ogni campo inizia con un carattere STX (inizio del testo, 0x02) e termina con un carattere ETX (fine del testo, 0x03). Nel file, STX viene visualizzato come ^B e ETX viene visualizzato come ^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 per connettersi al nodo principale si utilizza SSH, è possibile utilizzare il comando 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.

  1. Se ti trovi attualmente al prompt dei comandi di Hive, passa al prompt dei comandi di Linux.

    hive> exit;
  2. 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.

  3. (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.