【发布时间】:2026-01-26 04:25:05
【问题描述】:
我想创建一个 BigTable DeleteFromRow 突变。 Mutation 和 DeleteFromRow 的原型如下所示:
oneof mutation {
// Set a cell's value.
SetCell set_cell = 1;
// Deletes cells from a column.
DeleteFromColumn delete_from_column = 2;
// Deletes cells from a column family.
DeleteFromFamily delete_from_family = 3;
// Deletes cells from the entire row.
DeleteFromRow delete_from_row = 4;
}
}
message DeleteFromRow {
}
在 Python 中,您不能直接实例化 DeleteFromRow 对象并将 Mutation 的 delete_from_row 字段设置为该对象。
所以这行不通:
request = bigtable_pb2.MutateRowRequest(table_name='tablename', row_key=row_key)
mutation = request.mutations.add()
mutation.delete_from_row = data_pb2.Mutation.DeleteFromRow()
正如其他 SO 用户提出的(请参阅 this question),这会导致
AttributeError: Assignment not allowed to composite field "delete_from_row" in protocol message object.
根据protobuf docs,您应该通过设置一个子字段来设置一个oneof字段。所以应该这样创建一个DeleteFromFamily 突变:
mutation.delete_from_family.family_name = 'some_family'
但是,对于没有字段的DeleteFromRow 消息,我该如何处理?
【问题讨论】:
-
出于好奇,你为什么不用官方客户端?
-
因为它不完整。它是这个 grpc 实现之上的抽象。特别是,当我想根据一组行键或一组行键前缀读取行时,我切换到允许您在单个请求中执行此操作的底层 grpc 客户端。
-
知道了。 FWIW,我们现在正在开发该功能。