You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "takeshi.miao (JIRA)" <ji...@apache.org> on 2014/01/07 18:13:50 UTC
[jira] [Created] (HBASE-10290) The results are not expected by
using QualifierFilter combined with SingleColumnValueFilter
takeshi.miao created HBASE-10290:
------------------------------------
Summary: The results are not expected by using QualifierFilter combined with SingleColumnValueFilter
Key: HBASE-10290
URL: https://issues.apache.org/jira/browse/HBASE-10290
Project: HBase
Issue Type: Bug
Components: Filters
Affects Versions: 0.99.0
Reporter: takeshi.miao
I suffering an issue is, I only get one _KeyValue_ object (five expected) from one row if I use _FilterList_ with _Operator.MUST_PASS_ALL_ to add both _QualifierFiter_ and _Operator.MUST_PASS_ALL_, the details as follows
h4.Test for Operator.MUST_PASS_ALL
1. I generate 10 rows of test data, two column familys and five column qualifiers for each row.
{code:title=Test Data}
r=keyvalues={row001/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row001/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row001/cf1:port-10/1389104461530/Put/vlen=5/mvcc=0, row001/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row001/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row002/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row002/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row002/cf1:port-20/1389104461530/Put/vlen=5/mvcc=0, row002/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row002/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row003/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row003/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row003/cf1:port-30/1389104461530/Put/vlen=5/mvcc=0, row003/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row003/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row004/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row004/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row004/cf1:port-40/1389104461530/Put/vlen=5/mvcc=0, row004/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row004/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row005/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row005/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row005/cf1:port-50/1389104461530/Put/vlen=5/mvcc=0, row005/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row005/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row006/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row006/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row006/cf1:port-60/1389104461530/Put/vlen=5/mvcc=0, row006/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row006/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row007/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row007/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row007/cf1:port-70/1389104461530/Put/vlen=5/mvcc=0, row007/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row007/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row008/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row008/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row008/cf1:port-80/1389104461530/Put/vlen=5/mvcc=0, row008/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row008/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row009/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row009/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row009/cf1:port-80/1389104461530/Put/vlen=5/mvcc=0, row009/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row009/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
r=keyvalues={row010/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row010/cf1:ip/1389104461530/Put/vlen=11/mvcc=0, row010/cf1:port-80/1389104461530/Put/vlen=5/mvcc=0, row010/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row010/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
{code}
2. Then I use following code to try to filter out only one row I want
{code:title=FilterList codes}
//...
fl = new FilterList(Operator.MUST_PASS_ALL);
filter =
new SingleColumnValueFilter(CF_1_NAME_B, Bytes.toBytes("ip"), CompareOp.EQUAL,
Bytes.toBytes("127.0.0.80"));
fl.addFilter(filter);
filter = new QualifierFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("port-80")));
fl.addFilter(filter);
scan.setFilter(fl);
rs = table.getScanner(scan);
for (Result r : rs) {
//...
}
{code}
3. I get the right and only one row returned, but not get whole data (_KeyValue_s) of this row.
{code:title=Results not expected}
r=keyvalues={row008/cf1:port-80/1389104629712/Put/vlen=5/mvcc=0}
{code}
Actually, I expect following data would return, whole record data, two column families and five column qualifiers.
{code:tittle=Results I expected}
r=keyvalues={row008/cf1:dummy/1389104461530/Put/vlen=5/mvcc=0, row008/cf1:ip/1389104461530/Put/vlen=10/mvcc=0, row008/cf1:port-80/1389104461530/Put/vlen=5/mvcc=0, row008/cf2:dummy1/1389104461530/Put/vlen=6/mvcc=0, row008/cf2:dummy2/1389104461530/Put/vlen=6/mvcc=0}
{code}
h4.Test for Operator.MUST_PASS_ONE
then I test the same code except to change the _Operator.MUST_PASS_ALL_ to _Operator.MUST_PASS_ONE_, and things getting more worse...
{code:title=Result not expected}
r=keyvalues={row001/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0}
r=keyvalues={row002/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0}
r=keyvalues={row003/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0}
r=keyvalues={row004/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0}
r=keyvalues={row005/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0}
r=keyvalues={row006/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0}
r=keyvalues={row007/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0, row007/cf1:ip/1389113376745/Put/vlen=10/mvcc=0, row007/cf1:port-70/1389113376745/Put/vlen=5/mvcc=0, row007/cf2:dummy1/1389113376745/Put/vlen=6/mvcc=0, row007/cf2:dummy2/1389113376745/Put/vlen=6/mvcc=0}
r=keyvalues={row008/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0, row008/cf1:ip/1389113376745/Put/vlen=10/mvcc=0, row008/cf1:port-80/1389113376745/Put/vlen=5/mvcc=0, row008/cf2:dummy1/1389113376745/Put/vlen=6/mvcc=0, row008/cf2:dummy2/1389113376745/Put/vlen=6/mvcc=0}
r=keyvalues={row009/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0, row009/cf1:port-80/1389113376745/Put/vlen=5/mvcc=0}
r=keyvalues={row010/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0, row010/cf1:port-80/1389113376745/Put/vlen=5/mvcc=0}
{code}
But I only expected following two row got returned
{code:title=Results I expected}
r=keyvalues={row007/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0, row007/cf1:ip/1389113376745/Put/vlen=10/mvcc=0, row007/cf1:port-70/1389113376745/Put/vlen=5/mvcc=0, row007/cf2:dummy1/1389113376745/Put/vlen=6/mvcc=0, row007/cf2:dummy2/1389113376745/Put/vlen=6/mvcc=0}
r=keyvalues={row008/cf1:dummy/1389113376745/Put/vlen=5/mvcc=0, row008/cf1:ip/1389113376745/Put/vlen=10/mvcc=0, row008/cf1:port-80/1389113376745/Put/vlen=5/mvcc=0, row008/cf2:dummy1/1389113376745/Put/vlen=6/mvcc=0, row008/cf2:dummy2/1389113376745/Put/vlen=6/mvcc=0}
{code}
Test code attached to demo this issue.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)