HBase:如何确定您的删除调用是否实际删除了一行?

HBase:如何确定您的删除调用是否实际删除了一行?,hbase,delete-row,Hbase,Delete Row,在HBase 1.x中,表对象上有一个delete方法,允许您删除整行。但是,无论该行是否实际在表中(没有返回值),它都会“成功”。是否有方法确定某行是否已被HBase中对Table.delete的特定调用删除 我认为checkAndDelete可能适用于此,例如,首先检查行是否存在。大概是这样的: boolean deleted = false; try (Table table = getTable(TABLE_NAME)) { byte[] rowKey = Bytes.toBytes

在HBase 1.x中,表对象上有一个delete方法,允许您删除整行。但是,无论该行是否实际在表中(没有返回值),它都会“成功”。是否有方法确定某行是否已被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(exists,然后delete):

一个原子呼叫会更好。肯定有其他人做过类似的事情

有没有办法确定某一行是否已被特定用户删除 在HBase中调用Table.delete

我们在Splice Machine(开源)上使用了更高级别的SQL层,但如果您想一想什么是删除,那么它是一个扫描,然后是一个删除(批量放置用于逻辑删除,批量删除用于物理删除)

支票支付解释如下

/**
   * 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
   */

您可以随时启动协处理器调用来覆盖现有功能。你可以作为观察者或终点来做。

Hmmm。。。如果它实现为一个扫描,然后是一个删除,那么既然扫描结果是空的,为什么当行不存在时它不抛出一个异常呢?我们在其他地方使用checkAndPut,这就是使用checkAndDelete的灵感所在。当我尝试检查是否存在我知道不存在的列时,检查失败(不确定为什么…列不存在)。我没有尝试添加一个伪列并检查它的值(这似乎是一个非常粗糙的解决方案)。我很惊讶这个用例(知道删除是否真的有效)如此罕见。
/**
   * 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
   */