java - 根据值 [Accumulo] 从表中删除行

标签 java accumulo

我有一个当前设置如下的表:

rowId : colFam: colQual -> value

in001 : user : name -> erp
in001 : user : age -> 23
in001 : group : name -> employee
in001 : group : name -> developer

我似乎想不出一种方法来删除其中一个组条目,或更改它。假设我想删除与员工的行,因为我现在是一名经理。添加是显而易见的,但我似乎不知道如何访问 employee,因为这两个组具有相同的 colFamcolQual

我知道 mutation.putDelete(colFam,colQual) 但这并不适用于此,因为其结果将删除两者。或者,如果我只是扫描每一行并获取键值对,如

for(Entry<Key,Value> e: scanner){
    e.getValue().toString() // atleast I can access it here
}

但即便如此,如何知道要删除什么?这只是我的表格设计中的一个缺陷吗?

最佳答案

虽然 Accumulo 的键值模式确实允许您执行此操作,但正如您所发现的那样,这是有问题的。该值的最初意图是它可以随着时间的推移而改变,该值的版本由 key 的时间戳部分唯一标识(假设 key 的所有其他部分都是等效的)。通过关闭 VersioningIterator,您可以保留键值的历史记录。

解决此问题的最常见方法是使用某种序列化数据结构将所有“组名称”存储在一个值中。一种简单的方法是 CSV“员工、开发人员”,然后您的更新将是“员工、开发人员、经理”。您可以使用 Hadoop Writable、Google Protocol Buffers 或 Apache Thrift(或许多其他工具)等工具来获得更紧凑的表示、更轻松的编程访问和向后兼容性。

关于java - 根据值 [Accumulo] 从表中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31796603/

相关文章:

java - AWS中的Kubernetes集群-哪些实例类型?

geoserver - GeoMesa - 支持的数据存储之间的差异?

hadoop - 运行 accumulo init 时出错

java - 测试错误 :test(org. apache.accumulo.examples.simple.filedata.ChunkInputFormatTest)

java - Nutch 2.4 注入(inject)出现运行时异常

java - Accumulo - 将值而不是 CharSequences 传递给突变的好处

java - Android X 中的透明导航栏

java - primefaces 中调整窗口大小的事件

java - 为什么不鼓励使用 sun.misc?

java - GetWindowTextA,GetWindowText 在编辑控件上返回空值