BigQuery - обновить схему, добавив столбец NULL в произвольную позицию из клиента Python - PullRequest
0 голосов
/ 11 января 2019

Фон

Я хотел бы обновить схему таблицы в 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) столбцы вставлялись в в произвольной позиции ?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

как объяснено в этом посте , такая функциональность не существует ни на одном сервере SQL, так как порядок столбцов не имеет значения. что можно сделать, это добавить новый столбец, а затем, например, скремблировать порядок столбцов и воссоздать таблицу со случайным порядком столбцов. Что для этого нужно вашему бизнесу?

0 голосов
/ 24 января 2019

согласно ответу в этом вопросе Я бы предложил, чтобы скопировать половину таблицы, добавить необходимый столбец, а затем добавить объединение старой таблицы, было бы действительно дороже, чем просто добавить новый столбец в конце, но все еще возможно.

...