如何格式化字节字符串以使用cbt set(云bigtable命令行工具)设置值?

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

我在 Bigtable 中有一个字段存储时间戳。使用

cbt lookup
,该字段显示如下
"\x00\x00\x01d\x865W\x00"

此字节串转换为整数,例如通过 Python。

int.from_bytes(b"\x00\x00\x01d\x865W\x00",'big')
1531260000000

1531260000000
是一个以微秒为单位的unix时间戳。 转换为人类可读的格式给出
2018-07-10T22:00:00+00:00

我们如何使用 cbt 将此字段更新为不同的时间戳?

docs我们得到命令

cbt set <table> <row> family:column=val

但是应该如何格式化该值才能正确存储它?

我尝试过

cbt set mytable row1 family:timestamp=1531260000000
,但随后
cbt lookup
将其显示为
1531260000000
,而不是字节串,并且 BigQuery 根本不显示它,因为格式错误而失败。

我也尝试过

cbt set mytable row1 family:timestamp="\x00\x00\x01d\x865W\x00"
,但随后
cbt lookup
显示带有转义反斜杠的字节串,这也不起作用:
"\\x00\\x00\\x01d\\x865W\\x00"

我查看了 cbt 的源代码,但我对 Go 不够熟悉,无法从那里找出答案。

command-line bigtable google-cloud-bigtable
2个回答
2
投票

从当前文档来看,这可以使用

$’\’
来完成。

我从文档中添加了一个用于查找的示例:

cbt -project my-project -instance my-instance lookup \
               my-table $'\224\257\312W\365:\205d\333\2471\315\'

请参阅

cbt
参考资料了解更多信息: https://cloud.google.com/bigtable/docs/cbt-reference


1
投票

根据此 issue,您无法使用 cbt 传递任意字节。您提供的时间戳被 cbt 像字符串一样处理,这就是它被转义的原因。

© www.soinside.com 2019 - 2024. All rights reserved.