Я пытаюсь удалить столбец из таблицы BigQuery, и я следовал инструкциям, указанным здесь:
https://cloud.google.com/bigquery/docs/manually-changing-schemas#deleting_a_column_from_a_table_schema
Это не сработало напрямую как столбец I 'Я пытаюсь удалить вложенный дважды в структуре.Следующие вопросы SO актуальны, но ни один из них не решает этот конкретный случай.
Одно вложенное поле: Выбор BigQuery *, кроме вложенного столбца
Двойное вложенное поле (решение имеет все поля в перечисленной схеме, что для меня бесполезно, поскольку моя схема огромна): BigQuery: выберите * заменить из нескольких вложенных столбцов
Я пытался адаптировать вышеупомянутые решения, и я думаю, что я близок, но не могу заставить его работать.
Это удалит поле, но возвращает тольковложенное поле, а не вся таблица (примеры, которые я хочу удалить a.b.field_name
. См. пример схемы в конце):
SELECT AS STRUCT * EXCEPT(a), a.* REPLACE (
(SELECT AS STRUCT a.b.* EXCEPT (field_name)) AS b
)
FROM `table`
Следующая попытка выдает ошибку: Scalar subquery produced more than one element
:
WITH a_tmp AS (
SELECT AS STRUCT a.* REPLACE (
(SELECT AS STRUCT a.b.* EXCEPT (field_name)) AS b
)
FROM `table`
)
SELECT * REPLACE (
(SELECT AS STRUCT a.* FROM a_tmp) AS a
)
FROM `table`
Есть ли обобщенный способ решения этой проблемы?Или я вынужден использовать перечисленное решение во 2-й ссылке?
Пример схемы:
[
{
"name": "a",
"type": "RECORD",
"fields": [
{
"name": "b",
"type": "RECORD"
"fields": [
{
"name": "field_name",
"type": "STRING"
},
{
"name": "other_field_name".
"type": "STRING"
}
]
},
]
}
]
Я бы хотел, чтобы окончательная схема была такой же, но без field_name
.