【问题标题】:Load a nullable repeated field in BigQuery在 BigQuery 中加载可为空的重复字段
【发布时间】:2020-02-07 11:56:45
【问题描述】:

我有一个像这样的 JSON 有效负载,我想将插入流式传输到我正在管理的表中:

{ “字段1”:“值1”, “字段2”:[“value1”,“value2”], }

有时字段 2 在 JSON 中根本不存在。我认为类型为“STRING”的重复字段可能为空,但我从 API 收到插入错误,说它不能为空。

我正在从 python 加载,因此可以在必要时进行转换,我只是不确定设置架构和 JSON 有效负载的最佳方式。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    我想我已经能够使用方法 insert_rows 重现您的问题,我将假设您使用的是该方法。该方法返回的错误是 [1]。如果您以不同的方式访问 API 或遇到不同的错误,请告诉我。

    该库的方法似乎存在问题,因为 REPEATED 字段未按我们预期的方式处理。

    我已经填写了关于这个问题 [2] 的问题。

    作为一种解决方法,我建议使用方法 insert_rows_json [3]。此方法具有与 insert_rows 相同的功能,但没有它的问题。

    [1] {'index': 0, 'errors': [{u'debugInfo': u'', u'reason': u'invalid', u'message': u'字段值不能为空.', u'location': u'field2'}]}

    [2]https://github.com/googleapis/google-cloud-python/issues/9602

    [3]https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.client.Client.html#google.cloud.bigquery.client.Client.insert_rows_json

    【讨论】:

    • 我应该提到我正在使用 python google-cloud-bigquery 包来插入行(来自使用 google-api-python-client 库的 Drive files:list 方法) .我学到的是,如果重复记录在我的行中没有键,那么 BigQuery 会为该行返回错误。为了解决这个问题,我开始解析我的行以查看键是否存在,如果不存在,则添加带有 [] 作为值的键。这让 API 很高兴。
    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 2021-10-09
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多