[ 
https://issues.apache.org/jira/browse/KUDU-2494?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ricardo Gaspar updated KUDU-2494:
---------------------------------
    Description: 
KuduScannerBuild API only supports the build of a scan using predicates in a 
conjuctive operation.
 Meaning that when using more than one predicate (p1,p2), the scan will be done 
using a statement similar to:
{code:java}
WHERE p1 AND p2;{code}
 

In Java code:
  
{code:java}
kc = new KuduClient.KuduClientBuilder(kuduMasters).build();
session = kc.newSession();
KuduScanner ks = 
kc.newScannerBuilder(table).addPredicate(p1).addPredicate(p2).build();
{code}
  

*There is no possibility to specify a OR operation that applies an disjunction 
between all/some predicates*. E.g.
{code:java}
WHERE p1 OR p2;{code}
 

 

The only way to do this using the current API (1.7.1) is to use two (or more) 
scanners and iterate them separately:

 
{code:java}
KuduScanner scanner1 = kc.newScannerBuilder(table).addPredicate(p1).build();
KuduScanner scanner2 = kc.newScannerBuilder(table).addPredicate(p2).build();

while (scanner1.hasMoreRows()) {
    RowResultIterator results = scanner1.nextRows();
    while (results.hasNext()) {
        RowResult rowData = results.next();
        
        //Do stuff with rowData

    }
}

while (scanner2.hasMoreRows()) {
    RowResultIterator results = scanner2.nextRows();
    while (results.hasNext()) {
        RowResult rowData = results.next();
        //Do stuff with rowData

    }
}
{code}
 

Kudu API should provide "almost" the same query processing power as IMPALA or 
an SQL engine.
Programmers should rely on Kudu API to operations like these and others like: 
sorting, table joins, etc.

  was:
KuduScannerBuild API only supports the build of a scan using predicates in a 
conjuctive operation.
 Meaning that when using more than one predicate (p1,p2), the scan will be done 
using a statement similar to:
{code:java}
WHERE p1 AND p2;{code}
 

In Java code:
  
{code:java}
kc = new KuduClient.KuduClientBuilder(kuduMasters).build();
session = kc.newSession();
KuduScanner ks = 
kc.newScannerBuilder(table).addPredicate(p1).addPredicate(p2).build();
{code}
   

*There is no possibility to specify a OR operation that applies an disjunction 
between all/some predicates*. E.g.
{code:java}
WHERE p1 OR p2;{code}
 


> KuduScannerBuilder OR operator for predicates
> ---------------------------------------------
>
>                 Key: KUDU-2494
>                 URL: https://issues.apache.org/jira/browse/KUDU-2494
>             Project: Kudu
>          Issue Type: Improvement
>          Components: api
>    Affects Versions: 1.7.1
>            Reporter: Ricardo Gaspar
>            Priority: Major
>             Fix For: 1.8.0
>
>
> KuduScannerBuild API only supports the build of a scan using predicates in a 
> conjuctive operation.
>  Meaning that when using more than one predicate (p1,p2), the scan will be 
> done using a statement similar to:
> {code:java}
> WHERE p1 AND p2;{code}
>  
> In Java code:
>   
> {code:java}
> kc = new KuduClient.KuduClientBuilder(kuduMasters).build();
> session = kc.newSession();
> KuduScanner ks = 
> kc.newScannerBuilder(table).addPredicate(p1).addPredicate(p2).build();
> {code}
>   
> *There is no possibility to specify a OR operation that applies an 
> disjunction between all/some predicates*. E.g.
> {code:java}
> WHERE p1 OR p2;{code}
>  
>  
> The only way to do this using the current API (1.7.1) is to use two (or more) 
> scanners and iterate them separately:
>  
> {code:java}
> KuduScanner scanner1 = kc.newScannerBuilder(table).addPredicate(p1).build();
> KuduScanner scanner2 = kc.newScannerBuilder(table).addPredicate(p2).build();
> while (scanner1.hasMoreRows()) {
>     RowResultIterator results = scanner1.nextRows();
>     while (results.hasNext()) {
>         RowResult rowData = results.next();
>         
>         //Do stuff with rowData
>     }
> }
> while (scanner2.hasMoreRows()) {
>     RowResultIterator results = scanner2.nextRows();
>     while (results.hasNext()) {
>         RowResult rowData = results.next();
>         //Do stuff with rowData
>     }
> }
> {code}
>  
> Kudu API should provide "almost" the same query processing power as IMPALA or 
> an SQL engine.
> Programmers should rely on Kudu API to operations like these and others like: 
> sorting, table joins, etc.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to