我正在使用 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 存储同一个 rowkey 的多个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363210/