Google Cloud Bigtable读取多行

问题描述 投票:0回答:1

我有一组这样的已知行键h1-r1-enh1-r1-esh1-r1-frh1-r1-pth1-r2-enh1-r2-esh1-r2-frh1-r2-pt

我的问题是,我应该执行范围扫描以检索h1-r *范围内的所有行,还是最好对每个行键执行一次读取查询?

rows google-cloud-bigtable
1个回答
0
投票

选择进行范围扫描还是对特定查询进行扫描,实际上取决于您为该数据计划了什么。如果您进行了范围扫描,则该前缀“ 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());
}
© www.soinside.com 2019 - 2024. All rights reserved.