Hi, John, Thanks for the reply. I did retrieve the min and the max hits. But 
the return values is 0 for the getMinNumHits and 100 for the getMaxNumHits. 100 
is the total number of records. 
I am expecting the returned min hits at least  is  8 and max hits at least is 
15 for the query which has where clause ( data < 15 ) and data which has 
following  distribution of each bin. 
      Records distribution for each bin: > > value range | # of element locates 
in this range 
> > [0 - 10) | 8
> > [10 - 20) | 7                                // our query touches these two 
> > bins
> > [20 - 30) | 12
> > [30 - 40) | 11
> > [40 - 50) | 10
> > [50 - 60) | 9
> > [60 - 70) | 15
> > [70 - 80) | 10
> > [80 - 90) | 7
> > [90 - 100) | 11


Please see below for the codes I am using:estimate_query.setWhereClause ("data 
< 15");
estimate_query.getHitRows (RIDs);

uint64_t min_hits = estimate_query.getMinNumHits ();
uint64_t max_hits = estimate_query.getMaxNumHits ();
uint32_t estimate_size = RIDs.size ();

Output:
>>> where data < 15: estimate() returned 0 records between minimum 0 and 
>>> maximum 100 hits.
Thanks, 
Nan

> Date: Tue, 11 Jun 2013 23:05:09 -0700
> From: [email protected]
> To: [email protected]
> CC: [email protected]
> Subject: Re: [FastBit-users] How to enable fastbit to answer the query 
> without touching raw data
> 
> The documentation of ibis::query::estimate states that
> 
> Returns 0 for success, a negative value for error.
> 
> Since the function call was completed correctly, it should have
> returned 0.  To find out the minimum and maximum number of hits
> determined by ibis::query::estimate, you need to call
> ibis::query::getMinNumHits and ibis::query::getMaxNumHits.  You can
> see an example of how they are used in examples/ibis.cpp line 3549 and
> 3550.
> 
> John
> 
> 
> On 6/11/13 2:50 PM, nan zhou wrote:
> > Hello, 
> > 
> >    Sorry to send this email again, I realized that the email is not
> > sent to fastbit user mailing list.  Following is my problem.   
> > 
> >   I tried the estimate function as you instructed before, however I
> > got a wrong answer from estimate function (FastBit version is 1.3.6).   
> >   Could you  help me ? 
> > 
> >   I have data which has following distribution: 
> >     value range           |            # of element locates in this range 
> >    [0 - 10)                     |                   8
> >    [10 - 20)                   |                   7
> >    [20 - 30)                   |                   12
> >    [30 - 40)                   |                   11
> >    [40 - 50)                   |                   10
> >    [50 - 60)                   |                   9
> >    [60 - 70)                   |                   15
> >    [70 - 80)                   |                   10
> >    [80 - 90)                   |                   7
> >    [90 - 100)                 |                   11
> >   Above data  was binned into 4 bins, whose boundaries are "10, 40,
> > 70, 100". 
> > 
> >   I applied estimate function when the query is " xxx  where data
> > value < 15 ", the estimate function return 0, which is not right.
> >    If i use evaluate function given by same query, the results number
> > is 15 which is correct.
> > 
> >   Here is my code : 
> > 
> >    vector <uint32_t> RIDs;
> > 
> >     ibis::part table ("test", static_cast<const char*>(0));
> > 
> >     // create a query object with the current user name.
> >     ibis::query estimate_query (ibis::util::userName(), &table);
> >     ibis::query evaluate_query (ibis::util::userName(), &table);
> > 
> >     evaluate_query.setWhereClause ("data < 15");
> >     assert (evaluate_query.evaluate () >= 0); 
> >     evaluate_query.getHitRows (RIDs);
> >     
> >     uint32_t evaluate_size = RIDs.size ();
> > 
> >     cout << "number of records where data < 15: evaluate() = " <<
> > evaluate_size << " records." << endl; *// here it returns 15*
> > 
> >     RIDs.clear ();
> > 
> >     estimate_query.setWhereClause ("data < 15");
> >     estimate_query.getHitRows (RIDs);
> >     
> >     uint64_t min_hits = estimate_query.getMinNumHits ();
> >     uint64_t max_hits = estimate_query.getMaxNumHits ();
> >     uint32_t estimate_size = RIDs.size ();
> > 
> >     cout << "number of records where data < 15: estimate() = " <<
> > estimate_size << " records between " << min_hits << " and " <<
> > max_hits << " hits." << endl;   *// value of variable estimate_size
> >  is 0 , and min_hits = 0, and max_hits = 100*
> > 
> >   Any clue why it is not returning the right value?  Thanks
> > 
> > Nan
> > 
> > 
> > ----------------------------------------------------------------------
> > From: [email protected]
> > To: [email protected]
> > Subject: RE: [FastBit-users] How to enable fastbit to answer the query
> > without touching raw data
> > Date: Thu, 9 May 2013 22:35:58 +0800
> > 
> > Thank you very much.
> > 
> > nan
> > 
> >> Date: Wed, 8 May 2013 14:52:31 -0700
> >> From: [email protected]
> >> To: [email protected]
> >> CC: [email protected]
> >> Subject: Re: [FastBit-users] How to enable fastbit to answer the
> > query without touching raw data
> >>
> >> Yes, your understanding is correct.
> >>
> >> John
> >>
> >>
> >> On 5/8/13 1:38 PM, nan zhou wrote:
> >> > Hi, John,
> >> >
> >> > Further question would be how the `estimate` function works. For
> >> > example, if I have bin boundaries, such as: 0, 10 , 20, 30, 40, and
> >> > 50 , six bin boundaries for column A( bin 1: [0, 10), bin 2: [10, 20),
> >> > bin 3: [20, 30), bin 4 [30, 40), bin 5 [40, 50) ) . The where clause
> >> > has 21<= A <= 35. In such as, all bit positions/RIDs in bin 3 and bin
> >> > 4 are retrieved, no matter whether the actual value is in the query
> >> > range or not. Do I understand it correctly?
> >> >
> >> > Thanks.
> >> >
> >> > nan
> >> >
                                          
_______________________________________________
FastBit-users mailing list
[email protected]
https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users

Reply via email to