更新时间:2024-06-27 GMT+08:00
读Kudu数据
功能简介
通过KuduClient.newScannerBuilder(KuduTable table)方法生成一个KuduScanner对象,然后再通过设置谓词条件从Kudu表里过滤读取数据。
代码样例
如下是读取数据的代码片段:
KuduTable table = client.openTable(tableName); Schema schema = table.getSchema(); // Scan with a predicate on the 'key' column, returning the 'value' and "added" columns. List<String> projectColumns = new ArrayList<>(2); projectColumns.add("key"); projectColumns.add("value"); projectColumns.add("added"); int lowerBound = 0; KuduPredicate lowerPred = KuduPredicate.newComparisonPredicate( schema.getColumn("key"), ComparisonOp.GREATER_EQUAL, lowerBound); int upperBound = numRows / 2; KuduPredicate upperPred = KuduPredicate.newComparisonPredicate( schema.getColumn("key"), ComparisonOp.LESS, upperBound); KuduScanner scanner = client.newScannerBuilder(table) .setProjectedColumnNames(projectColumns) .addPredicate(lowerPred) .addPredicate(upperPred) .build(); // Check the correct number of values and null values are returned, and // that the default value was set for the new column on each row. // Note: scanning a hash-partitioned table will not return results in primary key order. int resultCount = 0; int nullCount = 0; while (scanner.hasMoreRows()) { RowResultIterator results = scanner.nextRows(); while (results.hasNext()) { RowResult result = results.next(); if (result.isNull("value")) { nullCount++; } double added = result.getDouble("added"); if (added != DEFAULT_DOUBLE) { throw new RuntimeException("expected added=" + DEFAULT_DOUBLE + " but got added= " + added); } resultCount++; } }
示例代码中:
- projectColumns表示要返回的列信息。
- lowerPred和upperBound表示作用在主键key上的谓词。
父主题: 开发Kudu应用