Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Copie de données entre DynamoDB et Amazon S3
Si vous disposez de données dans une table DynamoDB, vous pouvez utiliser Hive pour les copier vers un compartiment Amazon S3.
Vous pouvez le faire si vous souhaitez créer une archive de données dans votre table DynamoDB. Par exemple, supposons que vous disposez d'un environnement de test dans lequel vous devez utiliser un jeu de base de données de test dans DynamoDB. Vous pouvez copier les données de base dans un compartiment Amazon S3, puis exécuter vos tests. Ensuite, vous pouvez réinitialiser l'environnement de test en restaurant les données de base à partir du compartiment Amazon S3 vers DynamoDB.
Si vous y êtes Didacticiel : Utilisation d'Amazon DynamoDB et d'Apache Hive parvenu, vous disposez déjà d'un compartiment Amazon S3 contenant vos EMR journaux Amazon. Vous pouvez utiliser ce compartiment pour les exemples de cette section si vous connaissez le chemin d'accès racine du compartiment :
Ouvrez la EMR console Amazon à l'adresse https://console.aws.amazon.com/emr
. -
Pour Name (Nom), choisissez votre cluster.
-
URIIl est répertorié dans le journal URI sous Détails de configuration.
-
Notez le chemin d'accès racine du compartiment. La convention de dénomination est la suivante :
s3://aws-logs-
accountID
-region
où se
accountID
trouve votre identifiant de AWS compte et la AWS région est la région du bucket.
Note
Pour ces exemples, nous allons utiliser un sous-chemin dans le compartiment, comme dans cet exemple :
s3://aws-logs-123456789012-us-west-2
/hive-test
Les procédures suivantes partent du principe que vous avez suivi les étapes décrites dans le didacticiel et disposez d'une table externe dans DynamoDB nommée ddb_features.
Rubriques
Copie de données à l'aide du format par défaut de Hive
Exemple De DynamoDB vers Amazon S3
Utilisez une instruction INSERT OVERWRITE
pour écrire directement sur Amazon S3.
INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test' SELECT * FROM ddb_features;
Le fichier de données dans Amazon S3 ressemble à ceci :
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
Chaque champ est séparé par un SOH caractère (début du titre, 0x01). Dans le fichier, SOH apparaît sous la forme^A
.
Exemple D'Amazon S3 vers DynamoDB
-
Créez une table externe pointant vers les données non mises en forme dans 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';
-
Copiez les données vers DynamoDB.
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_unformatted;
Copie de données avec un format spécifié par l'utilisateur
Si vous souhaitez spécifier votre propre caractère séparateur de champs, vous pouvez créer une table externe qui mappe au compartiment Amazon S3. Vous pouvez utiliser cette technique pour créer des fichiers de données avec des valeurs séparées par des virgules ()CSV.
Exemple De DynamoDB vers Amazon S3
-
Créez une table externe Hive qui mappe à Amazon S3. Lorsque vous effectuez cette opération, assurez-vous que les types de données sont cohérents avec ceux de la table externe 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';
-
Copiez les données à partir de DynamoDB.
INSERT OVERWRITE TABLE s3_features_csv SELECT * FROM ddb_features;
Le fichier de données dans Amazon S3 ressemble à ceci :
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
Exemple D'Amazon S3 vers DynamoDB
Avec une seule instruction HiveQL, vous pouvez remplir la table DynamoDB à l'aide des données d'Amazon S3 :
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_csv;
Copie de données sans mappage de colonnes
Vous pouvez copier des données de DynamoDB dans un format brut et les écrire dans Amazon S3 sans spécifier de types de données ou de mappage de colonnes. Vous pouvez utiliser cette méthode pour créer une archive des données DynamoDB et la stocker dans Amazon S3.
Exemple De DynamoDB vers Amazon S3
-
Créez une table externe associée à votre table DynamoDB. (Il n'y a pas de
dynamodb.column.mapping
dans cette instruction HiveQL.)CREATE EXTERNAL TABLE ddb_features_no_mapping (item MAP<STRING, STRING>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Features");
-
Créez une autre table externe associée à votre compartiment 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';
-
Copiez les données de DynamoDB vers Amazon S3.
INSERT OVERWRITE TABLE s3_features_no_mapping SELECT * FROM ddb_features_no_mapping;
Le fichier de données dans Amazon S3 ressemble à ceci :
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"}
Chaque champ commence par un STX caractère (début du texte, 0x02) et se termine par un ETX caractère (fin du texte, 0x03). Dans le fichier, STX apparaît sous forme ^B
et ETX apparaît sous forme de^C
.
Exemple D'Amazon S3 vers DynamoDB
Avec une seule instruction HiveQL, vous pouvez remplir la table DynamoDB à l'aide des données d'Amazon S3 :
INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM s3_features_no_mapping;
Affichage des données dans Amazon S3
Si vous vous connectez SSH au nœud principal, vous pouvez utiliser le AWS Command Line Interface (AWS CLI) pour accéder aux données que Hive a écrites sur Amazon S3.
Les étapes suivantes partent du principe que vous avez copié les données de DynamoDB vers Amazon S3 en suivant l'une des procédures décrites dans cette section.
-
Si vous vous trouvez à l'invite de commande Hive, passez l'invite de commande Linux.
hive> exit;
-
Répertoriez le contenu du répertoire hive-test dans votre compartiment Amazon S3. (C'est là que Hive a copié les données de DynamoDB.)
aws s3 ls s3://aws-logs-123456789012-us-west-2/hive-test/
La réponse devrait ressembler à ceci :
2016-11-01 23:19:54 81983 000000_0
Le nom du fichier (000000_0) est généré par le système.
-
(Facultatif) Vous pouvez copier le fichier de données d'Amazon S3 vers le système de fichiers local sur le nœud principal. Après cela, vous pouvez vous servir d'utilitaires de ligne de commande Linux standard pour travailler avec les données dans le fichier.
aws s3 cp s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 .
La réponse devrait ressembler à ceci :
download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0
Note
Le système de fichiers local sur le nœud leader a une capacité limitée. N'utilisez pas cette commande avec des fichiers plus grands que l'espace disponible dans le système de fichiers local.