3 回答
TA贡献2011条经验 获得超2个赞
据我所知,这是正常的。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 专家能为您提供帮助。
TA贡献1815条经验 获得超12个赞
这里似乎有点混乱:
在任何情况下,ReadRows 都不应该返回重复的行键。假设电子表格中的行对应于客户端库在 func 回调中返回的行,那么这是客户端库中的错误。
Bigtable 确实允许单元格值的多个版本。它提供像LatestNFilter()这样的过滤器来隐藏旧的单元格值,并提供gc规则来定期删除它们。但是,这仅限于单元格值,与行键无关。换句话说,Bigtable 提供单元版本而不是行版本。
ApplyBulk 不是原子的,而且它不提供有关突变排序的任何保证。
- 3 回答
- 0 关注
- 116 浏览
添加回答
举报