You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kudu.apache.org by "Ricardo Gaspar (JIRA)" <ji...@apache.org> on 2018/07/10 12:36:00 UTC

[jira] [Updated] (KUDU-2494) KuduScannerBuilder OR operator for predicates

     [ 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)