从 GCS 加载 Google BigQuery 失败并出现错误 Unsupported empty struct type for field

Posted

技术标签:

【中文标题】从 GCS 加载 Google BigQuery 失败并出现错误 Unsupported empty struct type for field【英文标题】:Google BigQuery load from GCS fails with error Unsupported empty struct type for field 【发布时间】:2019-07-12 20:37:34 【问题描述】:

过去几个月,我们一直在运行将 json 数据从 GCS 加载到 BigQuery 的作业。 2019 年 6 月 29 日,它开始失败并显示错误消息

'reason': 'invalid', 'message': "字段 'field_2' 不​​支持空结构类型"

作业参数或json的结构没有变化。 数据确实包含带有像这样的空对象的json


"field_1":"value_1",
"field_2":,
"field_3":"field_3_1":"value_3_1",
"field_4":"value_4"

但是数据总是有这个空对象并且加载好几个月。 通过谷歌搜索,我找不到任何带有该错误消息的结果。

显示我正在使用的加载选项的编辑输出。

    'createDisposition': 'CREATE_IF_NEEDED',
    'writeDisposition': 'WRITE_APPEND',
    'sourceFormat': 'NEWLINE_DELIMITED_JSON',
    'ignoreUnknownValues': True,
    'autodetect': True,
    'schemaUpdateOptions': ['ALLOW_FIELD_ADDITION', 'ALLOW_FIELD_RELAXATION']
, 'jobType': 'LOAD'
, 'status': 
    'errorResult': 
        'reason': 'invalid',
        'message': "Unsupported empty struct type for field 'field_2'"
    ,
    'errors': [
            'reason': 'invalid',
            'message': "Unsupported empty struct type for field 'field_2'"
        
    ],
    'state': 'DONE'

```

【问题讨论】:

【参考方案1】:

您的 field2 的现有架构是什么?它有字段名还是可以为空?

在BQ界面运行这个查询:

select 123 as field1, STRUCT(NULL) as field2

查看 JSON 输出或保存表并查看架构。 field2 内部有一个结构。

现在运行:

select 123 as field1, STRUCT() as field2

您似乎不太可能允许空结构。结构类似于表中的普通行(尽管在这种情况下是嵌套的)。空行是什么样的?如果您将我的第一个示例想象为可以查询的行,您将获得 1 列具有空值。对于第二个查询,该行将不存在……没有值或列名。该结构没有结构!

【讨论】:

以上是关于从 GCS 加载 Google BigQuery 失败并出现错误 Unsupported empty struct type for field的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 Google 永久磁盘加载到 BigQuery?

BigQuery 加载作业失败 - 无法访问 GCS 文件

BigQuery:如何使用传输 API 将文件从 GCS 加载到现有表?

无法将 csv 文件从 GCS 加载到 bigquery

安排定期将数据从 GCS 加载到 BigQuery

使用 Dataflow 管道 (python) 将多个 Json zip 文件从 GCS 加载到 BigQuery