Причиной моего вопроса стал тот факт, что модель данных BigTable поддерживает несколько версий каждой ячейки. Упрощенно: каждая ячейка - это многомерный массив различных версий одного и того же фрагмента данных.
![BigTable data model](https://dpzbhybb2pdcj.cloudfront.net/geewax2/Figures/07fig03_alt.jpg)
В Python SDK это реализовано в очень простой форме: каждая ячейка представлена в виде списка элементов (список возможных версий).
>>> row = table.read_row(ROW_KEY)
>>> data = row.to_dict()
>>> cell = data[<COLUMN_FAMILY:COLUMN_QUALIFIER>]
[<Cell value=b'bla1' timestamp=2020-01-16 21:45:39.921000>, <Cell value=b'bla2' timestamp=2020-01-16 21:57:31>...]
Однако в Golang SDK все версии всех ячеек находятся в тот же массив. Следовательно, если вам нужен массив со всеми версиями одной и той же ячейки, вам нужно сгруппировать его вручную.
row, _ := r.table.ReadRow(ctx, ROW_KEY)
columns, ok := row[<COLUMN_FAMILY>]
values := make(map[string][]bigtable.ReadItem, 0)
for _, cell := range columns {
_, ok := values[cell.Column]
if !ok {
values[cell.Column] = make([]bigtable.ReadItem, 0)
}
values[cell.Column] = append(values[cell.Column], cell)
}
Теперь мы можем получить доступ к списку различных версий одной и той же ячейки:
cell := values[<COLUMN_FAMILY:COLUMN_QUALIFIER>]
for _, cellVersion := range cell{
...
}