我正在使用Go库写入BigTable。我使用ApplyBulk
方法原子地进行多个插入。但是,当我使用ReadRows
函数查询BigTable时,我看到具有相同行键的多个副本/版本。
例如:在下面提到的示例中,我看到同一个RowKey的多个副本以及部分数据,最后一次出现的所有列都包含所有字段。
如何确保每个行键只存储一个数据副本?以及如何仅获取插入的行的最新版本?
代码:
row_range := bigtable.PrefixRange("")
err = tbl.ReadRows(ctx,row_range, func(row bigtable.Row) bool {
// logic goes here
}, bigtable.RowFilter(bigtable.LatestNFilter(1)))
最佳答案
据我所知,这很正常。 CBT存储该行键的历史记录,您需要通过一个过滤器以获取最新的。
bigtable.RowFilter(bigtable.LatestNFilter(1))
更新:,这就是我使用该过滤器的方式
rowName := "myrow#key#id"
row, err := bt.Table.ReadRow(ctx, rowName, bigtable.RowFilter(bigtable.LatestNFilter(1)))
if err != nil {
// handle error...
}
if row == nil {
// check for 0 result...
}
更新2:
根据您的代码,改用
ReadRows
,看起来您正在尝试获取多个行键。因此您的代码应为每个行键提取最新行。如果您只想在图像中显示一个键,那么我将使用
ReadRow
方法代替。err = tbl.ReadRow(ctx,"1564:u2Sng4xbtG", bigtable.RowFilter(bigtable.LatestNFilter(1)))
否则,我想它在CBT中的存储方式可能会出现问题,但这有点超出我的CBT技能范围。希望CBT专家能为您服务。
关于go - Cloud BigTable存储同一行键的多个副本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57363210/