我们的作业每 30 分钟运行一段时间,没有任何问题,但是,今天世界标准时间 12:30 左右,我们开始在将数据从 Google Cloud 存储桶加载到 bigquery 表时遇到错误。
运行它的过程没有任何变化,当我们尝试使用旧数据重新运行它时它也失败了,即使它之前已经成功,所以这可能是由 BQ 端的一些最近更新引起的?
我们遇到 2 个错误:
我们检查了旧数据,之前有空结构,第一个问题很奇怪,因为每个 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”