You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kudu.apache.org by "Adar Dembo (Jira)" <ji...@apache.org> on 2019/10/11 04:55:00 UTC
[jira] [Assigned] (KUDU-2494) KuduScannerBuilder OR operator for
predicates
[ https://issues.apache.org/jira/browse/KUDU-2494?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Adar Dembo reassigned KUDU-2494:
--------------------------------
Assignee: ZhangYao
[~ZhangYao] and [~oclarms] are working on this.
> KuduScannerBuilder OR operator for predicates
> ---------------------------------------------
>
> Key: KUDU-2494
> URL: https://issues.apache.org/jira/browse/KUDU-2494
> Project: Kudu
> Issue Type: Sub-task
> Components: api
> Affects Versions: 1.7.1
> Reporter: Ricardo Gaspar
> Assignee: ZhangYao
> Priority: Major
>
> 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
(v8.3.4#803005)