背景
我想更新BigQuery中一个表的模式以匹配另一个包含原始列超集的表的模式。我想通过BigQuery Python客户端来实现。
问题
在实践中,我想将包含NULL
的某些列添加到已经存在的BigQuery表中的任意位置,而不必是开头或结尾。
我知道如何在此snippet之后在表的 end 处添加新列,但是我想在任意位置添加列。而且,我想通过架构更新来做到这一点,而不必查询整个表。
由于该架构实际上是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
)列插入到任意位置?
答案 0 :(得分:0)
根据答案in this question,我建议您可以复制半个表,添加所需的列,然后添加旧表的join,这实际上比在表中仅添加一个新列要昂贵得多。结束,但仍有可能。
答案 1 :(得分:0)
如on this post所述,此类功能在任何SQL Server中都不存在,因为列顺序无关紧要。可以做的是附加新列,然后例如扰乱列顺序,并以随机列顺序重新创建表。您对此有什么业务需求?