繁体   English   中英

BigQuery LOAD_JOB 的字段有时是 ARRAY,有时是单个 STRING 值

[英]BigQuery LOAD_JOB with field that is sometimes an ARRAY and sometimes a single STRING value

附件是导致问题的实际 json 的屏幕截图。 字段子类别有时是单个字符串值“compulsory”,有时是数组 ["compulsory", "court_order"]

因此,我已将模式“模式”设置为 REPEATABLE,但这不允许捕获两种类型的数据。

我的问题只是我是否必须直接编辑 JSON 以使“强制”变得明确 [“强制”] 或者是否有内置选项允许这样做?

这感觉像是一个普遍的问题。

截屏

您还可以在将文件加载到 BigQuery 之前使用您首选的编程语言对其进行预处理。 下面的 Python 代码将"subcategory"的非列表值转换为列表,因此您的数据类型将是统一的。

import json

# {
#   "data": [
#     {
#       "subcategory": "compulsory",
#       "type": "WU04"
#     },
#     {
#       "subcategory": [
#         "compulsory",
#         "court-order"
#       ],
#       "type": "WU04"
#     }
#   ]
# }

f = open("sample.json")

data_dict = json.load(f)

for entry in data_dict["data"]:
    if not(isinstance(entry["subcategory"],list)):
        entry["subcategory"] = [entry["subcategory"]]

with open("new_sample.json", "w") as outfile:
    json.dump(data_dict, outfile,indent=2)

Output:

{
  "data": [
    {
      "subcategory": [
        "compulsory"
      ],
      "type": "WU04"
    },
    {
      "subcategory": [
        "compulsory",
        "court-order"
      ],
      "type": "WU04"
    }
  ]
}

注意:我创建了一个简单的示例数据,只是为了说明上述方法背后的逻辑。 如果您的 JSON 结构不同,请相应地调整代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM