在目标中使用 JSON 列时 Bigquery LOAD 作业失败

问题描述 投票:0回答:0

我们的作业每 30 分钟运行一段时间,没有任何问题,但是,今天世界标准时间 12:30 左右,我们开始在将数据从 Google Cloud 存储桶加载到 bigquery 表时遇到错误。

运行它的过程没有任何变化,当我们尝试使用旧数据重新运行它时它也失败了,即使它之前已经成功,所以这可能是由 BQ 端的一些最近更新引起的?

我们遇到 2 个错误:

  • “无效的架构更新。字段 EventData 已将类型从 JSON 更改为 RECORD”
  • “无法存储没有字段的结构‘EventData.OriginInfo’”

我们检查了旧数据,之前有空结构,第一个问题很奇怪,因为每个 STRUCT 也应该是 JSON,所以当我们的目标列有 JSON 数据类型时,它应该使用它而不是记录,我认为.

重现步骤: 使用此示例数据将文件上传到谷歌存储桶中。

json_debug_example.json {"Timestamp":"2023-03-15 13:35:48.0000000","EventData":{"Timestamp":"2023-03-15 13:35:48.0000000", "RandomColumn": "随机值", " OriginInfo":{}}}

json_debug_example2.json {"Timestamp":"2023-03-15 13:35:48.0000000","EventData":{"Timestamp":"2023-03-15 13:35:48.0000000", "RandomColumn": "随机值"}}

创建 BigQuery 表

CREATE TABLE dataset.test (Timestamp TIMESTAMP, EventData JSON);

尝试从第一个文件加载数据

LOAD DATA into dataset.test FROM FILES ( format = 'JSON', uris = ['gs://bucket_name/json_debug_example.json']);

这会导致错误:“无法存储没有字段的结构‘EventData.OriginInfo’”

LOAD DATA into dataset.test FROM FILES ( format = 'JSON', uris = ['gs://bucket_name/json_debug_example2.json']);

这会导致错误:“无效的架构更新。字段事件数据已将类型从 JSON 更改为 RECORD” 知道会发生什么吗?

编辑: 更好的复制示例是从表中导出数据并将其加载回同一个表:

create table dataset.test2 (
  ts TIMESTAMP,
  Even JSON
);

insert into dataset.test2
values (
"2023-03-15 13:35:48",
PARSE_JSON('{"Timestamp":"2023-03-15 13:35:48.0000000", "RandomColumn": "Random value"}')
);

EXPORT DATA
  OPTIONS (
    uri = 'gs://bucket_name/json_debug_example4*.json',
    format = 'JSON',
    overwrite = true
  )
AS (
  select * from dataset.test2
);

LOAD DATA into dataset.test2 FROM FILES ( format = 'JSON', uris = ['gs://bucket_name/json_debug_example4*.json']);

这会导致错误:“无效的架构更新。字段 Even 已将类型从 JSON 更改为 RECORD”

json google-bigquery load google-bucket
© www.soinside.com 2019 - 2024. All rights reserved.