Hi Ted,
I tried using only productIdFilter without FilterList but still no output.
public void executeOrdersQuery() {
/*
* SELECT ORDER_ID,CUSTOMER_ID,PRODUCT_ID,QUANTITY FROM ORDERS
WHERE
* QUANTITY >=16 and PRODUCT_ID='P60337998'
*/
String tableName = "ORDERS";
String family = "ORDER_DETAILS";
int quantity = 16;
String productId = "P60337998";
SingleColumnValueFilter quantityFilter = new
SingleColumnValueFilter(
Bytes.toBytes(family),
Bytes.toBytes("PRODUCT_QUANTITY"),
CompareFilter.CompareOp.GREATER_OR_EQUAL,
Bytes.toBytes(quantity));
SingleColumnValueFilter productIdFilter = new
SingleColumnValueFilter(
Bytes.toBytes(family),
Bytes.toBytes("PRODUCT_ID"),
CompareFilter.CompareOp.EQUAL,
Bytes.toBytes(productId));
FilterList filterList = new FilterList(
FilterList.Operator.MUST_PASS_ALL);
// filterList.addFilter(quantityFilter);
filterList.addFilter(productIdFilter);
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(family),
Bytes.toBytes("ORDER_ID"));
scan.addColumn(Bytes.toBytes(family),
Bytes.toBytes("CUSTOMER_ID"));
scan.addColumn(Bytes.toBytes(family),
Bytes.toBytes("PRODUCT_ID"));
scan.addColumn(Bytes.toBytes(family),
Bytes.toBytes("QUANTITY"));
// scan.setFilter(filterList);
scan.setFilter(productIdFilter);
HTableInterface tbl =
hTablePool.getTable(Bytes.toBytes(tableName));
ResultScanner scanResults = null;
try {
scanResults = tbl.getScanner(scan);
System.out.println("scanResults : ");
for (Result result : scanResults) {
System.out.println("The result is " + result);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
tbl.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Regards,
Omkar Joshi
-----Original Message-----
From: Ted Yu [mailto:[email protected]]
Sent: Wednesday, April 17, 2013 6:46 PM
To: [email protected]
Cc: [email protected]
Subject: Re: Problem in filters
If you specify producIdFilter without using FilterList, what would you get ?
Thanks
On Apr 17, 2013, at 4:51 AM, Omkar Joshi <[email protected]> wrote:
> Hi,
>
> I'm having the a table named ORDERS with 1000851 rows:
>
> rowkey : ORDER_ID
>
> column family : ORDER_DETAILS
> columns : CUSTOMER_ID
> PRODUCT_ID
> REQUEST_DATE
> PRODUCT_QUANTITY
> PRICE
> PAYMENT_MODE
>
> I'm using the following code to access the data :
>
> public void executeOrdersQuery() {
> /*
> * SELECT ORDER_ID,CUSTOMER_ID,PRODUCT_ID,QUANTITY FROM ORDERS WHERE
> * QUANTITY >=16 and PRODUCT_ID='P60337998'
> */
> String tableName = "ORDERS";
>
> String family = "ORDER_DETAILS";
> int quantity = 16;
> String productId = "P60337998";
>
> SingleColumnValueFilter quantityFilter = new
> SingleColumnValueFilter(
> Bytes.toBytes(family),
> Bytes.toBytes("PRODUCT_QUANTITY"),
> CompareFilter.CompareOp.GREATER_OR_EQUAL,
> Bytes.toBytes(quantity));
>
> SingleColumnValueFilter productIdFilter = new
> SingleColumnValueFilter(
> Bytes.toBytes(family), Bytes.toBytes("PRODUCT_ID"),
> CompareFilter.CompareOp.EQUAL,
> Bytes.toBytes(productId));
>
> FilterList filterList = new FilterList(
> FilterList.Operator.MUST_PASS_ALL);
> // filterList.addFilter(quantityFilter);
> filterList.addFilter(productIdFilter);
>
> Scan scan = new Scan();
> scan.addColumn(Bytes.toBytes(family), Bytes.toBytes("ORDER_ID"));
> scan.addColumn(Bytes.toBytes(family),
> Bytes.toBytes("CUSTOMER_ID"));
> scan.addColumn(Bytes.toBytes(family), Bytes.toBytes("PRODUCT_ID"));
> scan.addColumn(Bytes.toBytes(family), Bytes.toBytes("QUANTITY"));
>
> scan.setFilter(filterList);
>
> HTableInterface tbl =
> hTablePool.getTable(Bytes.toBytes(tableName));
> ResultScanner scanResults = null;
> try {
> scanResults = tbl.getScanner(scan);
>
> System.out.println("scanResults : ");
>
> for (Result result : scanResults) {
> System.out.println("The result is " + result);
> }
>
> } catch (IOException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } finally {
> try {
> tbl.close();
> } catch (IOException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> }
>
> }
>
> First few records of the table are :
>
> O12004457;C110;P60337998;2000-5-17;16;19184.0;cash;Customer is the new
> emperor. Either you give him what he desires or you are
> banished from his kingdom.;Before you place your order, we reserve the right
> to change these terms and conditions at any time
> .Any such changes will take effect when posted on this website and it is your
> responsibility to read these terms and condition
> s on each occasion you use this website. We will never supply you with
> substitute goods.Our VAT registration number is 875 505
> 5 01.;
>
> O12004458;C425;P50478434;2008-4-30;3;831825.0;debit;In times of change, the
> learners will inherit the earth, while the knowers
> will find themselves beautifully equipped to deal with a world that no longer
> exists;Before you place your order, we reserve
> the right to change these terms and conditions at any time.Any such changes
> will take effect when posted on this website and i
> t is your responsibility to read these terms and conditions on each occasion
> you use this website. We will never supply you wi
> th substitute goods.Our VAT registration number is 875 5055 01.;
>
>
>
> If I don't use any filter, the row that I'm trying to fetch is returned along
> with the 1000s of others but as soon as I use even a single filter(the other
> is commented), no results are returned.
>
> Is there some problem with my code?
>
> Regards,
> Omkar Joshi
>
>
> ________________________________
> The contents of this e-mail and any attachment(s) may contain confidential or
> privileged information for the intended recipient(s). Unintended recipients
> are prohibited from taking action on the basis of information in this e-mail
> and using or disseminating the information, and must notify the sender and
> delete it from their system. L&T Infotech will not accept responsibility or
> liability for the accuracy or completeness of, or the presence of any virus
> or disabling code in this e-mail"