我正在尝试使用RowDeletingIterator删除我的Accumulo表中的条目,但之后扫描表时不会删除这些条目。假设表row_id
中有一个tableName
条目,这就是我正在做的事情:
Connection connection = new ZooKeeperInstance(instance, zookeepers).getConnector(username, new PasswordToken(password));
String tableName = "tableName";
connection.tableOperations().create(tableName);
connection.tableOperations().attachIterator(tableName, new IteratorSetting(1, RowDeletingIterator.class));
// Write record with row key "row_id"
String row_id = "row_id";
Text colf = new Text("");
Text colq = new Text("data");
ColumnVisibility colv = new ColumnVisibility("");
BatchWriter writer = connection.createBatchWriter(tableName, new BatchWriterConfig()
.setMaxMemory(memBuf)
.setMaxLatency(timeout, TimeUnit.MILLISECONDS)
.setMaxWriteThreads(numThreads));
Mutation mutation = new Mutation(row_id);
mutation.put(colf, colq, colv, System.nanoTime(), new Value("stuff".getBytes()));
writer.addMutation(mutation);
writer.close();
... //More work takes place
// Delete the record with row key "row_id"
BatchWriter batchWriter = connection.createBatchWriter(tableName, new BatchWriterConfig()
.setMaxMemory(memBuf)
.setMaxLatency(timeout, TimeUnit.MILLISECONDS)
.setMaxWriteThreads(numThreads));
Mutation mutation = new Mutation(row_id);
mutation.put(new Text(), new Text(), new ColumnVisibility(), RowDeletingIterator.DELETE_ROW_VALUE);
batchWriter.addMutation(mutation);
batchWriter.close();
答案 0 :(得分:0)
原来问题出在第一个插入的System.nanoTime()
部分。删除它并使初始插入为:
mutation.put(colf, colq, colv, new Value("stuff".getBytes()));
RowDeletingIterator
的工作方式应该如此。