Фон
Я хотел бы обновить схему таблицы в BigQuery, чтобы она соответствовала схеме другой таблицы, которая содержит расширенный набор исходных столбцов. Я хотел бы сделать это через клиент BigQuery Python.
Задача
На практике я хочу добавить несколько столбцов, содержащих NULL
, к уже существующей таблице BigQuery в произвольной позиции, которая не обязательно является началом или концом.
Я знаю, как добавлять новые столбцы в конец таблицы 1015 *, следуя этому фрагменту 1017 *, но я хотел бы добавить столбцы в произвольной позиции. Более того, я хотел бы сделать это через обновление схемы, не запрашивая всю таблицу.
Поскольку схема на самом деле представляет собой список SchemaField
объектов, я подумал, что замены метода append
методом insert
было бы достаточно. Но этот фрагмент не делает то, что я хотел бы:
from google.cloud import bigquery
client = bigquery.Client()
dataset_id = 'my_dataset'
table_id = 'my_table'
table_ref = client.dataset(dataset_id).table(table_id)
table = client.get_table(table_ref) # API request
original_schema = table.schema
new_schema = original_schema[:] # creates a copy of the schema
# insert new_col at position 2, instead of appending
new_schema.insert(2, bigquery.SchemaField('new_col', 'STRING'))
table.schema = new_schema
table = client.update_table(table, ['schema']) # API request
Этот код приводит к обновлению схемы в точности так, как если бы вызванный метод был append
, т. Е. new_col
помещается в конец схемы.
Вопрос
Знаете ли вы, можно ли изменить схему таблицы BigQuery, чтобы новые (NULL
) столбцы вставлялись в в произвольной позиции ?