Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
3.0.0-alpha-1, 2.0.0
-
None
-
Reviewed
-
This change will enable users to perform append and increment operation with null qualifier via hbase-shell.
Description
Running the example commands specified in shell docs for "append" and "incr" throw following error:
ERROR: Failed to provide both column family and column qualifier for append
ERROR: Failed to provide both column family and column qualifier for incr
While running the same command via java does not require the user to provide both column and qualifier and works smoothly.
Steps to reproduce:
1) APPEND
hbase(main):002:0> create 't1', 'c1', 'c2' Created table t1 Took 0.8151 seconds hbase(main):003:0> append 't1', 'r1', 'c1', 'value' ERROR: Failed to provide both column family and column qualifier for append Appends a cell 'value' at specified table/row/column coordinates. hbase> append 't1', 'r1', 'c1', 'value', ATTRIBUTES=>{'mykey'=>'myvalue'} hbase> append 't1', 'r1', 'c1', 'value', {VISIBILITY=>'PRIVATE|SECRET'} The same commands also can be run on a table reference. Suppose you had a reference t to table 't1', the corresponding command would be: hbase> t.append 'r1', 'c1', 'value', ATTRIBUTES=>{'mykey'=>'myvalue'} hbase> t.append 'r1', 'c1', 'value', {VISIBILITY=>'PRIVATE|SECRET'} Took 0.0326 seconds hbase(main):004:0> scan 't1' ROW COLUMN+CELL 0 row(s) Took 0.1273 seconds
While the same command would run if we run the following java code:
try (Connection connection = ConnectionFactory.createConnection(config); Admin admin = connection.getAdmin();) { Table table = connection.getTable(TableName.valueOf("t1")); Append a = new Append(Bytes.toBytes("r1")); a.addColumn(Bytes.toBytes("c1"), null, Bytes.toBytes("value")); table.append(a); }
Scan result after executing java code:
hbase(main):005:0> scan 't1'
ROW COLUMN+CELL
r1 column=c1:, timestamp=1522649623090, value=value
1 row(s)
Took 0.0188 seconds
2) INCREMENT:
Similarly in case of increment, we get the following error (shell):
hbase(main):006:0> incr 't1', 'r2', 'c1', 111 ERROR: Failed to provide both column family and column qualifier for incr Increments a cell 'value' at specified table/row/column coordinates. To increment a cell value in table 'ns1:t1' or 't1' at row 'r1' under column 'c1' by 1 (can be omitted) or 10 do: hbase> incr 'ns1:t1', 'r1', 'c1' hbase> incr 't1', 'r1', 'c1' hbase> incr 't1', 'r1', 'c1', 1 hbase> incr 't1', 'r1', 'c1', 10 hbase> incr 't1', 'r1', 'c1', 10, {ATTRIBUTES=>{'mykey'=>'myvalue'}} hbase> incr 't1', 'r1', 'c1', {ATTRIBUTES=>{'mykey'=>'myvalue'}} hbase> incr 't1', 'r1', 'c1', 10, {VISIBILITY=>'PRIVATE|SECRET'} The same commands also can be run on a table reference. Suppose you had a reference t to table 't1', the corresponding command would be: hbase> t.incr 'r1', 'c1' hbase> t.incr 'r1', 'c1', 1 hbase> t.incr 'r1', 'c1', 10, {ATTRIBUTES=>{'mykey'=>'myvalue'}} hbase> t.incr 'r1', 'c1', 10, {VISIBILITY=>'PRIVATE|SECRET'} Took 0.0103 seconds hbase(main):007:0> scan 't1' ROW COLUMN+CELL r1 column=c1:, timestamp=1522649623090, value=value 1 row(s) Took 0.0062 seconds
While the same command would run, if we run the following java code:
try (Connection connection = ConnectionFactory.createConnection(config); Admin admin = connection.getAdmin();) { Table table = connection.getTable(TableName.valueOf("t1")); Increment incr = new Increment(Bytes.toBytes("r2")); incr.addColumn(Bytes.toBytes("c1"), null, 111); table.increment(incr); scan(table); }
Scan result after executing java code:
hbase(main):008:0> scan 't1'
ROW COLUMN+CELL
r1 column=c1:, timestamp=1522649623090, value=value
r2 column=c1:, timestamp=1522649933949, value=\x00\x00\x00\x00\x00\x00\x00o
2 row(s)
Took 0.0133 seconds
Attachments
Attachments
Issue Links
- is related to
-
HBASE-15616 Allow null qualifier for all table operations
- Resolved