You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Nihal Jain (JIRA)" <ji...@apache.org> on 2018/04/02 06:34:00 UTC
[jira] [Updated] (HBASE-20327) When qualifier is not specified,
append and incr operation do not work (shell)
[ https://issues.apache.org/jira/browse/HBASE-20327?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Nihal Jain updated HBASE-20327:
-------------------------------
Description:
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 {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}
was:
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 {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}
> 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, 1.3.1, 2.0.0
> Reporter: Nihal Jain
> Priority: Minor
>
> 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 {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)