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_cell
s 中可能是相同的。因为 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
,因此工作正常。
我尝试将 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_cell
s 中可能是相同的。因为 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
,因此工作正常。