在HBase 1.x中,Table对象上有一个删除方法,允许您删除整行。然而,它成功了#34;该行是否实际存在于表中(没有返回值)。有没有办法确定HBase中对Table.delete的特定调用是否删除了一行?
我认为checkAndDelete可能适用于此,例如,检查行是否首先出现。像这样:
boolean deleted = false;
try (Table table = getTable(TABLE_NAME)) {
byte[] rowKey = Bytes.toBytes(rowId);
deleted = table.checkAndDelete(???, new Delete(rowKey));
} catch (Exception e) {
// handle exceptions here
}
// here I know if the row was deleted or not
我不确定在' ???'部分。我已经尝试检查列值(我知道存在的列)是不是空的,但是没有用。为了达到同样的效果,我不得不用两个调用替换checkAndDelete(存在,然后删除):
if (table.exists(new Get(rowKey))) {
table.delete(new Delete(rowKey));
deleted = true; // row deleted
}
一个原子调用会更好。当然其他人也做过类似的事情。
答案 0 :(得分:1)
是否有办法确定特定行是否删除了某行 在HBase中调用Table.delete?
我们在Splice Machine(开源)使用更高级别的SQL层,但是如果你想到删除是什么,那就是扫描然后删除(批量放置用于逻辑删除和批量删除以进行物理删除)。
checkAndPut说明如下......
/**
* Atomically checks if a row/family/qualifier value matches the expected
* value. If it does, it adds the put. If the passed value is null, the check
* is for the lack of column (ie: non-existance)
*
* @param row to check
* @param family column family to check
* @param qualifier column qualifier to check
* @param value the expected value
* @param put data to put if check succeeds
* @throws IOException e
* @return true if the new put was executed, false otherwise
*/
您可以随时调出协处理器调用以覆盖现有功能。您可以将其作为观察者或端点进行。