В Google BigQuery есть таблица, которая состоит из нескольких полей, а затем - ПОВТОРНОЙ записи, которая может содержать один или несколько объектов. Я хочу создать новую таблицу с дополнительным полем в данных REPEATED и скопировать мои исходные данные в новую таблицу, заполнив новое поле выводом GENERATE_UUID (), чтобы в каждой строке данных REPEATED был один уникальный идентификатор.
У меня был похожий вопрос на Как мне скопировать из одной таблицы BigQuery в другую, когда цель содержит поля REPEATED? , но я не знаю, как адаптировать это для моего текущего варианта использования .
Вот моя "новая" Схема 1 (ie Схема 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
(et c)
Кто-нибудь есть какие-либо предложения относительно того, как действовать? Спасибо!