bigquery 嵌套对象:没有这样的字段

Posted

技术标签:

【中文标题】bigquery 嵌套对象:没有这样的字段【英文标题】:bigquery nested object : No such field 【发布时间】:2018-05-23 10:09:02 【问题描述】:

我有一个具有此架构的表:

我正在尝试使用 python 客户端从 Google Coud Storage 上传一些数据。该文件以 JSON 换行符分隔。我的大多数行都没有“passenger_origin.accuracy”字段,但是当该字段存在时,我有以下错误:

阅读时出错 数据,错误消息:从位置开始的行中的 JSON 解析错误 2122510:没有这样的字段:driver_origin.accuracy。 (错误代码:无效)

阅读时出错 数据,错误消息:从位置开始的行中的 JSON 解析错误 2126317:没有这样的字段:passenger_origin.accuracy。 (错误代码: 无效)

无效行示例:


    "id": 1479443,
    "is_obsolete": 0,
    "seat_count": 1,
    "is_ticket_checked": 0,
    "score": 0.3709318902,
    "is_multimodal": 0,
    "fake_paths": 0,
    "passenger_origin": 
        "id": 2204,
        "poi_uuid": "15b4e52c-7c58-442c-98df-1eb06079f6bb",
        "user_id": 1987,
        "accuracy": 250.0,
        "disabled": 0,
        "last_update": "2017-03-10T15:15:39",
        "created": "2016-02-05T17:06:26",
        "modified_by_user": 1,
        "is_recurrent": 0,
        "source": 1,
        "hidden_by_user": 0,
        "kind": 2,
    ,
    "driver_origin": 
        "id": 412491,
        "poi_uuid": "47e90b6d-e178-4e02-9f02-f4ea5f8beaa1",
        "user_id": 71471,
        "disabled": 0,
        "last_update": "2017-11-02T10:09:09",
        "created": "2017-11-02T10:09:09",
        "modified_by_user": 0,
        "is_recurrent": 0,
        "source": 1,
        "hidden_by_user": 0,
        "kind": 2,
    ,
    "passenger_destination": 
        "id": 2203,
        "poi_uuid": "c531c3ca-47f0-4003-8098-1272fee8d018",
        "user_id": 1987,
        "accuracy": 250.0,
        "disabled": 0,
        "last_update": "2017-03-10T15:12:42",
        "created": "2016-02-05T17:06:19",
        "modified_by_user": 1,
        "is_recurrent": 0,
        "source": 1,
        "hidden_by_user": 0,
        "kind": 1,
    

该表是在上传数据之前创建的,之后就没有修改过。我不明白为什么在这些字段上上传失败? RECORD 字段是否必须重复?

【问题讨论】:

【参考方案1】:

要忽略架构中不存在的字段,请使用以下组合:

configuration.load.ignoreUnknownValues configuration.load.maxBadRecords

将第一个设置为true,将第二个设置为任意高的数字,例如100000,即使有多余的字段也会使加载成功。

【讨论】:

感谢您的回复,但在我的情况下,即使错误表明相反,这些字段也存在于架构中。我的大多数条目都没有字段 driver_origin.accuracypassenger_origin.accuracy 但是当它们出现时发生错误 这些配置在哪里设置【参考方案2】:

问题是 configuration.load.autodetect 设置为 True。我将它设置为 False,问题就解决了

【讨论】:

以上是关于bigquery 嵌套对象:没有这样的字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在存储为字符串的 bigquery 字段中取消嵌套多个数组?

如何关联多个 BigQuery 数组字段?

如何在 BigQuery 中取消嵌套多个数组?

bigquery 嵌套和重复字段查询

在 BigQuery 中取消嵌套多个嵌套字段

更新 BigQuery 表中的嵌套字段