【问题标题】:pubsub <-> bigquery with protobuf: bool is getting converted to null or true, not false or truepubsub <-> 使用 protobuf 的 bigquery:bool 正在转换为 null 或 true,而不是 false 或 true
【发布时间】:2022-12-08 08:51:07
【问题描述】:

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

在 protobuf 中,我有一个像这样的字段:

bool foo = 1;

在 bigquery 模式中,这变为:

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

在我的 python 代码中,我调用带有字典(编码为字节)的主题发布,它具有:

foo: false

这在输出 bigquery 表中变为 foo: null

如果我让如果

foo: true

它在 bigquery 表中变为 foo: true

这发生在我所有的布尔人身上。例如false 变为 null,true 保持为 true。

关于在哪里看的建议?

【问题讨论】:

  • 您使用的是 proto2 还是 proto3?
  • 这是使用 proto3

标签: google-bigquery protocol-buffers google-cloud-pubsub


【解决方案1】:

这是一个已知的 proto3 支持错误,目前正在积极处理。您可以在public issue tracker 中跟踪进度。目前,解决方法是使用 proto2 而不是 proto3。

【讨论】:

    【解决方案2】:

    Protocol Buffer 文档中的 JSON Mapping 部分说:

    . . .如果一个字段在协议缓冲区中有default value,它会在 JSON 编码数据中默认被省略以节省空间。

    由于false是protocol Buffer的bools的默认值,上面似乎暗示foo: false默认变成了foo: null以节省空间。

    我认为这是一个错误,因为float value 0.0 is also being converted to null in BigQuery

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多