我有一组这样的已知行键h1-r1-enh1-r1-esh1-r1-frh1-r1-pth1-r2-enh1-r2-esh1-r2-frh1-r2-pt
我的问题是,我应该执行范围扫描以检索h1-r *范围内的所有行,还是最好对每个行键执行一次读取查询?
选择进行范围扫描还是对特定查询进行扫描,实际上取决于您为该数据计划了什么。如果您进行了范围扫描,则该前缀“ h1-r *”内的任何其他数据都将被包括在内,而不是有效的。但是,如果仅以“ h1-r”开头的行是这些特定行,则其执行方式相同,我建议使用前缀扫描来简化代码。
这里是每种方法的代码片段,我们正在努力将它们集成到我们的文档中,但是您可以在GitHub中找到更多信息。
前缀扫描:
try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
Query query = Query.create(tableId).prefix("h1-r");
ServerStream<Row> rows = dataClient.readRows(query);
for (Row row : rows) {
// do something
}
} catch (IOException e) {
System.out.println(
"Unable to initialize service client, as a network error occurred: \n" + e.toString());
}
添加单个行:
try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
Query query = Query.create(tableId)
.rowKey("h1-r1-en")
.rowKey("h1-r1-es")
.rowKey("h1-r1-fr"); // Continue adding all your rows this way.
ServerStream<Row> rows = dataClient.readRows(query);
for (Row row : rows) {
// do something
}
} catch (IOException e) {
System.out.println(
"Unable to initialize service client, as a network error occurred: \n" + e.toString());
}