Copie de données entre DynamoDB et Amazon S3 - Amazon DynamoDB

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 avez travaillé dans Didacticiel : Utilisation d'Amazon DynamoDB et d'Apache Hive, vous disposez déjà d'un compartiment Amazon S3 contenant vos journaux Amazon EMR. Vous pouvez utiliser ce compartiment pour les exemples de cette section si vous connaissez le chemin d'accès racine du compartiment :

  1. Ouvrez la console Amazon EMR à l'adressehttps://console.aws.amazon.com/emr.

  2. Pour Name (Nom), choisissez votre cluster.

  3. L'URI figure dans Log URI (URI de journal) sous Configuration Details (Détails de configuration).

  4. Notez le chemin d'accès racine du compartiment. La convention de dénomination est la suivante :

    s3://aws-logs-accountID-region

    accountID est l'ID de votre compte AWS et region la région AWS de votre compartiment.

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.

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

Les champs sont séparés par un caractère SOH (début d'en-tête, 0x01). Dans le fichier, SOH s'affiche sous la forme ^A.

Exemple D'Amazon S3 vers DynamoDB
  1. 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';
  2. 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
  1. 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';
  2. 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
  1. 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");

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

Chaque champ commence par un caractère STX (début de texte, 0x02) et se termine par un caractère ETX (fin de texte, 0x03). Dans le fichier, STX apparaît sous la forme ^B, et ETX sous la forme ^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 utilisez SSH pour vous connecter au nœud leader, vous pouvez utiliser 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.

  1. Si vous vous trouvez à l'invite de commande Hive, passez l'invite de commande Linux.

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

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