2017-05-18 6 views
0

: Ich bin zu Cassandra und verwenden Cassandra 3.10 und haben Tisch wieCassandra Auslöser

create table db1.table1 (id text, trip_id text, event_time timestamp, mileage double, primary key(id, event_time)); 
create table db1.table2 (id text, trip_id text, start_time timestamp, mileage double, primary key(id, start_time)); 

Ich muss die Daten von table1 übertragen, indem trip_id und Summe auf Kilometer und Aktualisierungsdaten in table2 aggregiert table2

ich habe eine Triggerfunktion geschrieben Spaltennamen zu erhalten und den Wert

public Collection<Mutation> augment(Partition partition) { 
    HashMap map = new HashMap(); 
    CFMetaData cfm = partition.metadata(); 
    String tableName = cfm.cfName; 
    try { 
     UnfilteredRowIterator it = partition.unfilteredIterator(); 
     while (it.hasNext()) { 
      Unfiltered un = it.next(); 
      Clustering clt = (Clustering) un.clustering(); 
      Iterator<Cell> cells = partition.getRow(clt).cells().iterator();    
      while(cells.hasNext()){ 
       Cell cell = cells.next(); 
       map.put(cell.column().name.toString(), cell.value().array()); 
       ... 
      } 
     } 
    } catch (Exception e) { 

    } 


    ... 
} 

Aber wie kann ich Primärschlüssel und den Wert des Primärschlüssels bekommen? Wenn diese nicht getable sein können, wie kann ich Trigger-Funktion verwenden, um die Aufgabe zu erledigen?

Antwort

0

Ja, es ist möglich, Primärschlüssel und Wert zu erhalten

Um Partition Schlüssel Spalte und Wert Verwendung zu erhalten:

List<ColumnDefinition> partitionKeyColumns = cfm.partitionKeyColumns(); 
ByteBuffer partitionKeyValues = partition.partitionKey().getKey(); 

Clustering Schlüssel Spalte und Wert zu erhalten:

List<ColumnDefinition> clusteringKeyColumns = cfm.clusteringColumns(); 
ByteBuffer[] clusteringKeyValues = clt.getRawValues();