BigQuery:使用PythonBQAPI向现有表添加新列
相关问题: 我想向现有表添加一个新列,并使用BigQuery更新BigQuery中现有表的模式 然而,我的代码似乎不起作用 这是我的密码:BigQuery:使用PythonBQAPI向现有表添加新列,python,google-bigquery,Python,Google Bigquery,相关问题: 我想向现有表添加一个新列,并使用BigQuery更新BigQuery中现有表的模式 然而,我的代码似乎不起作用 这是我的密码: flow = flow_from_clientsecrets('secret_key_path', scope='my_scope') storage = Storage('CREDENTIAL_PATH') credentials = storage.get() if credentials is None or crede
flow = flow_from_clientsecrets('secret_key_path', scope='my_scope')
storage = Storage('CREDENTIAL_PATH')
credentials = storage.get()
if credentials is None or credentials.invalid:
credentials = tools.run_flow(flow, storage, tools.argparser.parse_args([]))
http = httplib2.Http()
http = credentials.authorize(http)
bigquery_service = build('bigquery', 'v2', http=http)
tbObject = bigquery_service.tables()
query_body = {'schema': {'name':'new_column_name', 'type':'STRING'}}
tbObject.update(projectId='projectId', datasetId='datasetId', tableId='tableId', body=query_body).execute()
它返回提供的架构与现有表的架构错误不匹配。
有人能给我一个Python的工作示例吗?
非常感谢 基于Mikhail Berlyant注释,我必须将现有表的模式和新字段列传递给update方法,以更新现有表的模式
下面给出了python代码示例:
...
tbObject = bigquery_service.tables()
# get current table schema
table_data = tbObject.get(projectId=projectId, datasetId=datasetId, tableId=tableId).execute()
schema = table_data.get('schema')
new_column = {'name': 'new_column_name', 'type': 'STRING'}
# append new field to current table's schema
schema.get('fields').append(new_column)
query_body = {'schema': schema}
tbObject.update(projectId='projectId', datasetId='datasetId', tableId='tableId', body=query_body).execute()
而且,也无法为现有行表设置新列的值。感谢Mikhail Berlyant的建议,为现有行设置值的方法是为具有值的新列创建一个单独的表,并使用该表连接现有表,以替换基于Mikhail Berlyant注释的旧架构表,我必须将现有表的schema和newfield列传递给update方法,以更新现有表的schema
下面给出了python代码示例:
...
tbObject = bigquery_service.tables()
# get current table schema
table_data = tbObject.get(projectId=projectId, datasetId=datasetId, tableId=tableId).execute()
schema = table_data.get('schema')
new_column = {'name': 'new_column_name', 'type': 'STRING'}
# append new field to current table's schema
schema.get('fields').append(new_column)
query_body = {'schema': schema}
tbObject.update(projectId='projectId', datasetId='datasetId', tableId='tableId', body=query_body).execute()
而且,也无法为现有行表设置新列的值。感谢Mikhail Berlyant的建议,为现有行设置值的方法是为具有值的新列创建一个单独的表,并用该表连接现有表以替换旧的模式表,因为我现在有几分钟的时间来完成此操作: 整个模式以及新字段需要提供给api 对于现有行,新字段将添加空值。没办法 价值 您可以在将要运行的查询中使用一些逻辑 这张桌子是用来补偿的。或者你可以和我单独坐一张桌子 只是这个新的领域和一些关键,你将加入你的团队 使用新表获取此字段的现有表
我的评论摘要,因为我现在有几分钟的时间: 整个模式以及新字段需要提供给api 对于现有行,新字段将添加空值。没办法 价值 您可以在将要运行的查询中使用一些逻辑 这张桌子是用来补偿的。或者你可以和我单独坐一张桌子 只是这个新的领域和一些关键,你将加入你的团队 使用新表获取此字段的现有表
您应该提供整个模式,而不仅仅是新字段Hi Mikhail,您是指现有表的整个模式吗?是的,使用新字段。所以api将负责添加新的。但是为了实现这一点,需要呈现整个模式Hi Mikhail,我还有一个问题,我知道BQ没有设置和更新方法,只是想知道如果我向现有表添加一个新列,我如何为现有表设置新列的值?或者我必须删除现有表并创建一个具有列值的新表?啊,我明白了,我将使用整个模式重试。您应该提供整个模式,而不仅仅是新字段。Hi Mikhail,您是指现有表的整个模式吗?是的,使用新字段。所以api将负责添加新的。但是为了实现这一点,需要呈现整个模式Hi Mikhail,我还有一个问题,我知道BQ没有设置和更新方法,只是想知道如果我向现有表添加一个新列,我如何为现有表设置新列的值?或者我必须删除现有表并创建一个具有列值的新表?啊,我明白了,我将使用整个schemaMore在修补程序与更新中重试,因为它适用于架构更新:更多关于修补程序与更新,因为它适用于架构更新: