Details
-
Sub-task
-
Status: Open
-
Major
-
Resolution: Unresolved
-
1.7.1
-
None
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:
WHERE p1 AND p2;
In Java code:
kc = new KuduClient.KuduClientBuilder(kuduMasters).build();
session = kc.newSession();
KuduScanner ks = kc.newScannerBuilder(table).addPredicate(p1).addPredicate(p2).build();
There is no possibility to specify a OR operation that applies an disjunction between all/some predicates. E.g.
WHERE p1 OR p2;
The only way to do this using the current API (1.7.1) is to use two (or more) scanners and iterate them separately:
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 } }
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.
Attachments
Issue Links
- is duplicated by
-
KUDU-2863 Support OR predicates
- Resolved
- links to