1

Ich benutze Dynamo DB Streams + lamdba als Auslöser, um Kinesis aufzurufen, die meine Dynamo DB Daten zu Redshift bringt. Könnte jemand vorschlagen, Dynamo DB-Daten in verschiedenen Regionen mit Dynamo-Streams in Redshift zu laden.Dynamo DB Daten zu Redhisft

+1

verwenden Sie Kinesis Firehose? –

Antwort

0

Ich hatte ein Programm geschrieben, das die Daten von Dynamo db nach Redshift verschieben kann, aber das funktioniert nicht ohne Streams. Sie können einen Blick auf den Code werfen und sehen, ob das Ihrem Fall hilft oder Sie irgendeine Idee dazu bekommen.

1.Erstellen der Verbindung mit Redshift. 2. Erstellen Sie die Prepeared-Anweisung zum Einfügen in Redshift. 3.Die Daten von Dynamo in Stapeln mithilfe der Paginierung zuschneiden. 4.Die Chargendaten in Resdhift in Chargen einfügen.

public void createConnectionWithRedshift() { 
     final String DB_URL = "jdbc:redshift://ao.cepuhmobd.us-west-2.redshift.amazonaws.com:5439/events"; 
     // final String DB_URL = args[0]; 
     // Database credentials 
     final String USER = "abc"; 
     final String PASS = "abc"; 
     Connection conn = null; 
     try { 
      // STEP 3: Open a connection 
      System.out.println("Connecting to database..."); 
      conn = DriverManager.getConnection(DB_URL, USER, PASS); 
      // createNewTable(conn); 
      // STEP 4: Execute a query 
      preparedStatement = conn.prepareStatement("insert into Events " + "(Vin,timestamp,eventtype,source,data)" + "VALUES (?,?,?,?,?)"); 
     } catch (SQLException se) { 
      se.printStackTrace(); 
     } 
    }// end main 


    public void replicateDynamoToRedshidt(int pages, int batchSize, int scanSize) 
      throws TableNeverTransitionedToStateException, InterruptedException { 
createConnectionWithRedshift();//Redshift Connection 
for (int i = 0; i < pages; i = i + 1) { 
      List<EventLogEntity> results = findAll(new PageRequest(i, batchSize));//Fetching the data from Dynamo in batches 
      List<HeadUnitData> headUnitDataList = headUnitEvents(results); 
      for (int j = 0; j < headUnitDataList.size(); j++) { 
       HeadUnitData headUnitData = headUnitDataList.get(j); 
       insertData(headUnitData.getVin(), headUnitData.getType(), headUnitData.getSource(), headUnitData.getData());//Inserting the data into Redshidt in batches 
      } 
      try { 
       preparedStatement.executeBatch(); 
       System.out.println("Inserted in Database : " + results.size()); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
Verwandte Themen