Copiar dados entre o DynamoDB e o Amazon S3 - Amazon DynamoDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Copiar dados entre o DynamoDB e o Amazon S3

Caso tenha dados em uma tabela do DynamoDB, você poderá usar o Hive para copiá-los para um bucket do Amazon S3.

Você poderá fazer, por exemplo, se quiser criar um arquivo de dados na sua tabela do DynamoDB. Por exemplo, suponha que você tem um ambiente de teste no qual precisa trabalhar com um conjunto de dados de teste de linha de base no DynamoDB. Você pode copiar os dados de referência para um bucket do Amazon S3 e, em seguida, executar os testes. Depois disso, você poderá redefinir o ambiente de teste restaurando os dados de referência do bucket do Amazon S3 para o DynamoDB.

Se você trabalhou no Tutorial: Como trabalhar com o Amazon DynamoDB e o Apache Hive, então já tem um bucket do Amazon S3 que contém seus logs do Amazon EMR. Você pode usar esse bucket para os exemplos desta seção, se souber o caminho raiz do bucket:

  1. Abra o console do Amazon EMR em https://console.aws.amazon.com/emr.

  2. Para Name, escolha o seu cluster.

  3. O URI é listado no Log URI em Configuration Details.

  4. Anote o caminho raiz do bucket. A convenção de nomenclatura é:

    s3://aws-logs-accountID-region

    onde accountID é o ID da sua conta da AWS e região é a região da AWS do bucket.

nota

Para esses exemplos, usaremos um subcaminho no bucket, como neste exemplo:

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

Os procedimentos a seguir são escritos sob a premissa de que você seguiu as etapas do tutorial e tem uma tabela externa chamada ddb_features no DynamoDB.

Copiar dados usando o formato padrão do Hive

exemplo Do DynamoDB para o Amazon S3

Use uma instrução INSERT OVERWRITE para escrever diretamente para no Amazon S3.

INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test' SELECT * FROM ddb_features;

O arquivo de dados no Amazon S3 é semelhante a:

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

Cada campo é separado por um caractere SOH (início de cabeçalho, 0x01). No arquivo, SOH aparece como ^A.

exemplo Do Amazon S3 para o DynamoDB
  1. Crie uma tabela externa apontando para os dados não formatados no 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. Copie os dados para o DynamoDB.

    INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_unformatted;

Copiar dados com um formato especificado pelo usuário

Se você deseja especificar seu próprio caractere separador de campos, crie uma tabela externa mapeada no bucket do Amazon S3. Você pode usar essa técnica para a criação de arquivos de dados com valores separados por vírgulas (CSV).

exemplo Do DynamoDB para o Amazon S3
  1. Crie uma tabela externa do Hive mapeada no Amazon S3. Ao fazer isso, certifique-se de que os tipos de dados sejam consistentes com os da tabela externa do 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. Copie os dados do DynamoDB.

    INSERT OVERWRITE TABLE s3_features_csv SELECT * FROM ddb_features;

O arquivo de dados no Amazon S3 é semelhante a:

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
exemplo Do Amazon S3 para o DynamoDB

Com uma única instrução HiveQL, você pode preencher a tabela do DynamoDB usando os dados do Amazon S3:

INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_csv;

Copiar dados sem um mapeamento de colunas

Você pode copiar dados do DynamoDB em um formato bruto e gravá-los no Amazon S3 sem especificar quaisquer tipos de dados ou mapeamento da coluna. Você pode usar esse método para criar um arquivamento de dados do DynamoDB e armazená-lo no Amazon S3.

exemplo Do DynamoDB para o Amazon S3
  1. Crie uma tabela externa associada à sua tabela do DynamoDB. (Não há dynamodb.column.mapping nesta instrução 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. Crie outra tabela externa associada ao seu bucket do 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. Copie os dados do DynamoDB para o Amazon S3.

    INSERT OVERWRITE TABLE s3_features_no_mapping SELECT * FROM ddb_features_no_mapping;

O arquivo de dados no Amazon S3 é semelhante a:

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"}

Cada campo começa com um caractere STX (início de texto, 0x02) e termina com um caractere ETX (fim de texto, 0x03). No arquivo, o caractere STX é mostrado como ^B e o caractere ETX é mostrado como ^C.

exemplo Do Amazon S3 para o DynamoDB

Com uma única instrução HiveQL, você pode preencher a tabela do DynamoDB usando os dados do Amazon S3:

INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM s3_features_no_mapping;

Visualizar os dados no Amazon S3

Se você usa SSH para se conectar ao nó líder, poderá usar a AWS Command Line Interface (AWS CLI) para acessar os dados escritos pelo Hive no Amazon S3.

As etapas a seguir são escritas sob a premissa de que você copiou os dados do DynamoDB para o Amazon S3 usando um dos procedimentos desta seção.

  1. Se você estiver no momento no prompt de comando do Hive, saia do prompt de comando do Linux.

    hive> exit;
  2. Liste o conteúdo do diretório hive-test em seu bucket do Amazon S3. (Esse é o local para o qual o Hive copiou os dados do DynamoDB.)

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

    A resposta deve ter a seguinte aparência:

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

    O nome do arquivo (000000_0) é gerado pelo sistema.

  3. (Opcional) Você pode copiar o arquivo de dados do Amazon S3 para o sistema de arquivos local no nó líder. Depois de fazer isso, você pode usar os utilitários de linha de comando padrão do Linux para trabalhar com os dados no arquivo.

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

    A resposta deve ter a seguinte aparência:

    download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0

    nota

    O sistema de arquivos local no nó líder tem capacidade limitada. Não use este comando com arquivos maiores do que o espaço disponível no sistema de arquivos local.