Hbase: IllegalArgumentException: No columns to insert

时间:2021-02-16 22:23:02

最近在做hbase数据插入测试时,遇见了此异常,通过跟断点调试发现:

在执行put操作的时候,如果只是实例化了一个Put,却没有给Put添加family(column)。执行就会出现此标题异常。


以下附上调试过程:

HTable在作doPut(Put put)操作时,会验证validatePut(put)

private void doPut(Put put) throws InterruptedIOException, RetriesExhaustedWithDetailsException {
    ...
    this.validatePut(put);
    ...

}
继续跟断点至validatePut(put),发现isEmpty()的判断

public void validatePut(Put put) throws IllegalArgumentException {
    validatePut(put, this.maxKeyValueSize);
}

public static void validatePut(Put put, int maxKeyValueSize) throws IllegalArgumentException {
    if(put.isEmpty()) {
      throw new IllegalArgumentException("No columns to insert");
    } else {
      ...
    }
}
继续查看put.isEmpty(),如下:

public boolean isEmpty() {
    return this.familyMap.isEmpty();
}


跟断点到这里就已经很明确了,htable在doPut执行时,会验证当前put的familyMap是否为空。如果为空,就会抛出‘No columns to insert’ 异常

附:以上引用到源码部分源自hbase client源代码