Importclient für DynamoDB

Der erste Teil meiner Artikelserie zu AWS Lambda ist nun im Jaxenter erschienen unter Spring-Boot vs. AWS Lambda. In diesem Artikel habe ich auch einen Client für den Import von Jason basierten Datensätzen für die Area sowie die Pictures angesprochen. Im Grund möchte ich in meine DynamoDB die folgenden Datensätze importieren:

Areas:

[
{"id":"1", "name":"Architektur", "folder":"0100000000000000000", "number":50, "size":6422, "date":"2016-01-01T12:00:00.000Z", "version":1},
{"id":"2", "name":"Audio", "folder":"0200000000000000000", "number":17, "size":1655, "date":"2016-01-01T12:00:00.000Z", "version":1},
{"id":"3", "name":"Auto", "folder":"0300000000000000000", "number":70, "size":8459, "date":"2016-01-01T12:00:00.000Z", "version":1},
usw.

Pictures:

[
{"id":"1", "areaId":"1", "name":"5878385598646124113", "size":112, "date":"2012-10-11T12:00:00.000Z", "version":1},
{"id":"2", "areaId":"1", "name":"7655519180858176879", "size":109, "date":"2012-10-11T12:00:00.000Z", "version":1},
{"id":"3", "areaId":"1", "name":"8086031961797504572", "size":98, "date":"2012-10-11T12:00:00.000Z", "version":1},

Der zugehörige Code sieht dann wie folgt aus:

package com.axxessio.axx2sls.content;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import org.junit.Test;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class LoadDB {

    @Test
    public void test() throws JsonParseException, IOException {
    Table table;
    JsonParser parser;
    JsonNode rootNode;

    
    AmazonDynamoDBClient client = new AmazonDynamoDBClient().withEndpoint("https://dynamodb.eu-central-1.amazonaws.com");
    DynamoDB dynamoDB = new DynamoDB(client);

    table = dynamoDB.getTable("area");

    parser = new JsonFactory().createParser(new File("./src/main/resources/areas.json"));
    
    rootNode = new ObjectMapper().readTree(parser);

    loadTable (rootNode, table);
    
    parser.close();    

    table = dynamoDB.getTable("picture");

    parser = new JsonFactory().createParser(new File("./src/main/resources/pictures.json"));
    
    rootNode = new ObjectMapper().readTree(parser);

    loadTable (rootNode, table);
    
    parser.close();
  }

  private void loadTable (JsonNode rootNode, Table table) {
    Iterator iter = rootNode.iterator();

    ObjectNode currentNode;

    while (iter.hasNext()) {
      currentNode = (ObjectNode) iter.next();

      String id = currentNode.path("id").asText();

      try {
        table.putItem(Item.fromJSON(currentNode.toString()).withPrimaryKey("id", id));
        System.out.println("PutItem succeeded [" + id + "] into table [" + table.getTableName() + "]");

      } catch (Exception e) {
        System.err.println("Unable to add data set [" + id + "] into table [" + table.getTableName() + "]");
        System.err.println(e.getMessage());
        break;
      }
    }
  }
}

Autor: Oliver Wronka

Oliver Wronka befasst sich mit Java seit der Version 1.0. Schwerpunkt sind javabasierte Backendsysteme in seiner Funktion als Principal Softwarearchitekt bei der axxessio GmbH mit Sitz in Bonn.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.