我有一个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。