Pubsub <-> BigQuery with Protobuf:bool 正在转换为 null 或 true,而不是 false 或 true



我有一个protobuf-pubsub模式正在发布到bigquery(直接发布,没有数据流(。

在protobuf中,我有一个类似于的字段

bool foo = 1;

在bigquery模式中,它变为:

"name": "foo",
"type": "BOOLEAN",
"mode": "NULLABLE"
},

从我的python代码中,我调用主题发布w/一个dict(编码为字节(,该dict具有:

foo: false

这在输出bigquery表中变为CCD_ 3。

如果我做了如果

foo: true

它在bigquery表中变为CCD_ 5。

这一切都发生在我所有的孩子身上。例如false变为null,true保持true。

建议去哪里看?

这是一个已知的支持proto3的bug,目前正在积极处理中。您可以在公共问题跟踪器中跟踪进度。目前,解决方法是使用proto2而不是proto3。

协议缓冲区文档中的JSON映射部分说:

如果某个字段在协议缓冲区中具有默认值,则在JSON编码的数据中默认会省略该字段以节省空间

由于false是协议缓冲区的bools的默认值,以上似乎表明foo: false默认为foo: null以节省空间。

我认为这是一个错误,因为在BigQuery中,浮点值0.0也被转换为null。

最新更新