keyspace1.tableA で更新または削除が行われると、トリガーが keyspace1.tableB に行を追加するように、Cassandra トリガーを実装しようとしています。
tableB の列の名前は、tableA の列とはまったく異なります。
私は Cassandra 2.1 を使用しています。より新しいバージョンに移行するオプションはありません。https://github.com/apache/cassandra/blob/cassandra-2.1/examples/triggers/src/org/apache/cassandra/triggers/InvertedIndex.javaで InvertedIndex トリガーの例を見ると、突然変異:
InvertedIndex の例から:
for (Cell cell : update)
{
// Skip the row marker and other empty values, since they lead to an empty key.
if (cell.value().remaining() > 0)
{
Mutation mutation = new Mutation(properties.getProperty("keyspace"), cell.value());
mutation.add(properties.getProperty("columnfamily"), cell.name(), key, System.currentTimeMillis());
mutations.add(mutation);
}
}
問題は、この例では、mutation.add に渡されるセル名が cell.name() であることです。これは、その関数を使用して名前を取得できる既存のオブジェクトです。
今のところ、tableA に変更が加えられた時刻を保存しようとしているだけなので、tableB には 2 つの列があります。
- changetime timeuuid
- 操作テキスト
changetime と操作を実行して tableB に行を追加するミューテーションを追加する必要があります。Cassandra 2.1.12 でこのような行の変更を追加するにはどうすればよいですか?
私はこれを試しましたが、トリガーでヌルポインター例外が発生しています:
...
String keycol = "changetime";
ByteBuffer uuidKey = ByteBuffer.wrap(UUIDGen.getTimeUUIDBytes());
ColumnIdentifier ci = new ColumnIdentifier(keycol, false);
CellName cn = CellNames.simpleSparse(ci);
mutation = new Mutation(keyspace, uuidKey);
mutation.add(tableName,cn, uuidKey, System.currentTimeMillis());
...
どんな支援も大歓迎です-私はCassandraの内部についての知識がないので、詳細は多すぎる情報ではありません.