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

时间:2016-08-10 00:09:23

标签: hbase delete-row

在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
  }

一个原子调用会更好。当然其他人也做过类似的事情。

1 个答案:

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

您可以随时调出协处理器调用以覆盖现有功能。您可以将其作为观察者或端点进行。