Hbase-在diff env-Java中将一行从一个表复制到另一个表

Hbase-在diff env-Java中将一行从一个表复制到另一个表,java,hbase,Java,Hbase,我为这两个环境创建了HBaseConfiguration Get g = new Get(Bytes.toByte("rowKey")); Result r = envATable.get(g); Put p = new Put(Bytes.toByte("sameRowKey")); p.add("Need a way to add that result"); envBTable.put(p); 我发现的解决方案: 迭代结果,将每个KeyValue添加到p中 有其他方法可以做到这一点吗

我为这两个环境创建了
HBaseConfiguration

Get g =  new Get(Bytes.toByte("rowKey"));
Result r = envATable.get(g);

Put p = new Put(Bytes.toByte("sameRowKey"));
p.add("Need a way to add that result");
envBTable.put(p);
我发现的解决方案:

迭代结果,将每个
KeyValue
添加到
p


有其他方法可以做到这一点吗?

您是否考虑过将复制作为替代方法?您可以在HBase中为特定列族启用复制。

因为您使用的是get,所以结果应该包含一行。对于put,您只需要一个行键,然后是列族、限定符和值的列表

String rowId = new String(result.getRow());
Put put = new Put(Bytes.toBytes(rowId));
for(Cell cell : result.rawCells()) {
    put.add(CellUtil.cloneFamily(cell), 
    CellUtil.cloneQualifier(cell), CellUtil.cloneQualifier(cell));
}
envBTable.put(put);
CellUtil是提取单元格详细信息的方法。我希望您知道每个单元格都有关于行键、族、限定符、时间戳和值的详细信息。您也可以从每个单元格中获取行键,但获取整行的行键是合乎逻辑的。我希望这有帮助

只要您设置了envBTable,我想任何服务器都是相同的,只要您对用户有权限


若您使用的是shell,那个么方法可能会有所不同。但最终你可能也需要一个脚本,因为你必须自定义,而且没有标准的方法来实现这一点,我想这是一个不错的方法。我对所有这些概念都不熟悉。但复制需要对现有集群进行更多更改。所以我现在不想这样。由于我只需要一行,所以无法使用Cellutil,Eclipse建议使用CellSet.My Hbase版本0.95.10