[ https://issues.apache.org/jira/browse/HBASE-20327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16432018#comment-16432018 ]
Chia-Ping Tsai commented on HBASE-20327: ---------------------------------------- +1. [~nihaljain.cs] Could you please update the release note? [~stack] This patch enables hbase shell to accept the null-qualifier increment/append. It should warrant to be merged to 2.0. If no objections, I will commit it to branch-2.0+ tomorrow. > When qualifier is not specified, append and incr operation do not work (shell) > ------------------------------------------------------------------------------ > > Key: HBASE-20327 > URL: https://issues.apache.org/jira/browse/HBASE-20327 > Project: HBase > Issue Type: Bug > Components: shell > Affects Versions: 3.0.0, 2.0.0 > Reporter: Nihal Jain > Assignee: Nihal Jain > Priority: Minor > Fix For: 3.0.0 > > Attachments: HBASE-20327.master.001.patch > > > Running the example commands specified in shell docs for "append" and "incr" > throw following error: > {code:java} > ERROR: Failed to provide both column family and column qualifier for > append{code} > {code:java} > ERROR: Failed to provide both column family and column qualifier for > incr{code} > 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 > {code:java} > 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 > {code} > While the same command would run if we run the following java code: > {code:java} > 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); > }{code} > Scan result after executing java code: > {code:java} > hbase(main):005:0> scan 't1' > ROW COLUMN+CELL > > r1 column=c1:, timestamp=1522649623090, > value=value > 1 row(s) > Took 0.0188 seconds > {code} > > 2) INCREMENT: > Similarly in case of increment, we get the following error (shell): > {code:java} > 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 > {code} > While the same command would run, if we run the following java code: > {code:java} > 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); > } > {code} > Scan result after executing java code: > {code:java} > 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 > {code} > -- This message was sent by Atlassian JIRA (v7.6.3#76005)