我试图删除桌子上的Accumulo行。该表如下所示:
Key: id0001 hero:alias [secretId] 1525804166026 false Value: Batman
Key: id0001 hero:name [secretId] 1525804166026 false Value: Bruce Wayne
Key: id0001 hero:wearsCape? [secretId] 1525804166026 false Value: true
Key: id0002 hero:alias [] 1525804166026 false Value: Robin
Key: id0002 hero:name [secretId] 1525804166026 false Value: Dick Grayson
Key: id0002 hero:wearsCape? [secretId] 1525804166026 false Value: true
Key: id0003 hero:alias [] 1525804166026 false Value: Joker
Key: id0003 hero:name [] 1525804166026 false Value: Unknown
Key: id0003 hero:wearsCape? [] 1525804166026 false Value: false
我试图删除ID为ID" id0001",ColFam" hero",ColQual" name"。我的代码是这样的:
Mutation mut = new Mutation("id0001");
mut.putDelete(new Text("hero"), new Text("name"));
try (Scanner scanner1 = commishConn.createScanner("GothamPD", new Authorizations("secretId"))) {
//scanner1.setRange(Range.exact("id0001"));
for (Entry<Key,Value> entry : scanner1) {
mut.putDelete(entry.getKey().getColumnFamily(), entry.getKey().getColumnQualifier());
}
}
BatchWriter batchwriter = conn.createBatchWriter("GothamPD",1000000, 60000, 2);
batchwriter.addMutation(mut);
batchwriter.flush();
即使我没有删除,我已经指定了授权。
答案 0 :(得分:0)
ColumnVisibility
是该列的一部分。如果要删除具有非空可见性的条目,则需要包含它。
Mutation.putDelete
方法has a variation接受ColumnVisibility
的第三个参数。
例如,替换:
for (Entry<Key,Value> entry : scanner1) {
mut.putDelete(entry.getKey().getColumnFamily(), entry.getKey().getColumnQualifier());
}
以下内容:
for (Entry<Key,Value> entry : scanner1) {
Key k = entry.getKey();
mut.putDelete(k.getColumnFamily(), k.getColumnQualifier(), k.getColumnVisibilityParsed());
}
警告:小心这个;此扫描和删除循环将删除扫描仪找到的所有数据。
注意:扫描仪循环前的putDelete
是多余的;它将在循环中被删除(如果存在)。