【发布时间】:2020-04-03 15:16:39
【问题描述】:
我在 Google BigQuery 中有一个表,其中包含几个字段,然后是一个 REPEATED 记录,其中可能包含一个或多个对象。我想在 REPEATED 数据中创建一个带有额外字段的新表,并将我的原始数据复制到新表中,用 GENERATE_UUID() 的输出填充新字段,以便每个 REPEATED 数据行有一个唯一标识符。
我在How do I copy from one BigQuery Table to another when the target contains REPEATED fields? 有一个类似的问题,但我不知道如何调整它以适应我当前的用例。
这是我的“新”架构 1(即上述链接中的架构 2)
[
{"name": "id", "type": "NUMERIC", "mode": "REQUIRED"},
{"name": "name", "type": "STRING", "mode": "REQUIRED"},
{"name": "created", "type": "TIMESTAMP", "mode": "REQUIRED"},
{"name": "valid", "type": "BOOLEAN", "mode": "REQUIRED"},
{"name": "parameters", "type": "RECORD", "mode": "REPEATED", "fields":
[
{"name": "parameter1", "type": "STRING", "mode": "REQUIRED"},
{"name": "parameter2", "type": "FLOAT", "mode": "REQUIRED"},
{"name": "parameter3", "type": "BOOLEAN", "mode": "REQUIRED"}
]
}
]
我希望它以这样的方式结束,架构 2:
[
{"name": "id", "type": "NUMERIC", "mode": "REQUIRED"},
{"name": "name", "type": "STRING", "mode": "REQUIRED"},
{"name": "created", "type": "TIMESTAMP", "mode": "REQUIRED"},
{"name": "valid", "type": "BOOLEAN", "mode": "REQUIRED"},
{"name": "parameters", "type": "RECORD", "mode": "REPEATED", "fields":
[
{"name": "uuid", "type": "STRING", "mode": "REQUIRED"},
{"name": "parameter1", "type": "STRING", "mode": "REQUIRED"},
{"name": "parameter2", "type": "FLOAT", "mode": "REQUIRED"},
{"name": "parameter3", "type": "BOOLEAN", "mode": "REQUIRED"}
]
}
]
所以我已经用这个模式创建了我的新表(表 2)。我想从表 1 中复制,我正在尝试这样的事情:
insert into table2_with_uuid(id, name, created, valid, parameters)
select id, name, created, valid,
[(
GENERATE_UUID(), parameters.parameter1, parameters.parameter2, parameters.parameter3
)]
from table1_no_guid;
这给了我一个错误说:
Cannot access field ceId on a value with type ARRAY<STRUCT<parameter1(等)
有人对如何进行有任何建议吗?谢谢!
【问题讨论】:
标签: google-bigquery