Почему клиент HBase помещает объект, ожидая добавления хотя бы столбца, перед отправкой? - PullRequest
0 голосов
/ 10 мая 2019

Поскольку гибкая схема поддержки hbase и мой сценарий использования нуждаются в квалификаторе, это динамическое значение, доступное только для некоторой логики (если true добавить столбец, иначе пропустить), в этом случае мы ожидаем, что выполнение пут должно быть в порядке, даже без добавления в него каких-либо столбцов..

Но мы в итоге получаем эту ошибку:

java.lang.IllegalArgumentException: Нет столбцов для вставки в org.apache.hadoop.hbase.client.HTable.validatePut(HTable.java:1500) в org.apache.hadoop.hbase.client.BufferedMutatorImpl.validatePut (BufferedMutatorImpl.java:152) в org.apache.hadoop.hbase.client.BufferedMutatorImpl.mutate (BufferedMutator:ut7: 127):org.apache.hadoop.hbase.client.HTable.put (HTable.java:1028)


Put p = new Put(Bytes.toBytes("rowkey"))
if(condition1){
p.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("Q1")
}
table.put(p)

1 Ответ

0 голосов
/ 10 мая 2019

Все данные HBase должны быть связаны с семейством столбцов, даже если больше ничего не заполняется. В вашем случае, если !condition1, то вы просто не должны ничего писать:

if(condition1){
    Put p = new Put(Bytes.toBytes("rowkey"))
    p.addColumn(Bytes.toBytes("cf1"),Bytes.toBytes("Q1")
    table.put(p)
 }
...