Как отформатировать байтовую строку, чтобы установить значение с помощью cbt set (инструмент командной строки cloud bigtable)? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть поле в 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 ?

Из документов мы получаем команду

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, чтобы выяснить это оттуда.

1 Ответ

1 голос
/ 17 июля 2019

Согласно этой проблеме , вы не можете передавать произвольные байты с помощью cbt.Указанная вами временная метка обрабатывается cbt как строка, поэтому она экранируется.

...