Bigtable:将多个值突变为单个列族中的单个列

Bigtable: mutating multiple values into single column in a single column family

我尝试将 100 个值插入行键 test-123

的列族 test_cf 的列 test_col

问题是我成功将 100 个值插入 Bigtable。

但是,test_cf中的test_col列的值个数小于100,看起来是随机插入的。

下面是我写的代码

rows = []
values = ['123-123124-325324', '543-123-45324-123123', '292-123124-54324-234', '292-213123-123123123-3213']
 # ...  100 values in the list

row_key = 'test-123'.encode()
direct_row = table.direct_row(row_key)
for val in values:
    row.set_cell("test_cf",
                 "test_col".encode('utf-8'),
                 val,
                 datetime.utcnow())
     
    rows.append(row)

rtn = table.mutate_rows(rows)

for i, status in enumerate(rtn):
    if status.code != 0:
        print('ERROR')

奇怪的是,对于 100 个值的突变,响应状态始终为 0。

此代码未按预期执行。每个 set_cell 调用都写入同一行(“test-123”)、相同的列族(“test_cf”)和相同的列限定符(“test_col”)。值每次都不同,但与每个值相关联的时间戳是当前时间,在多个 set_cells 中可能是相同的。因为 Bigtable 中的单个单元格由 (row, family, column, timestamp) 元组索引,所以这段代码可以覆盖它在循环之前写入的数据。

因此,前 3 set_cell 完全有可能是这样的:

row:       "test-123"
family:    "test_cf"
column:    "test_col"
value:     "123-123124-325324"
timestamp: t0

row:       "test-123"
family:    "test_cf"
column:    "test_col"
value:     "543-123-45324-123123"
timestamp: t0

row:       "test-123"
family:    "test_cf"
column:    "test_col"
value:     "292-123124-54324-234"
timestamp: t1

在这种情况下,第二个条目会覆盖第一个条目,因为(行、族、列、时间戳)是相同的。

成功调用的状态代码将为 0,因此工作正常。