首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BigQuery :使用python向现有表添加新列

BigQuery :使用python向现有表添加新列
EN

Stack Overflow用户
提问于 2016-03-29 21:33:05
回答 2查看 4.6K关注 0票数 2

相关问题:Bigquery使用BQ命令行工具将列添加到表模式

我想在BigQuery中使用BigQuery Python向现有表添加一个新列(更新现有表的模式)。

然而,我的代码似乎不起作用。

这是我的密码:

代码语言:javascript
运行
复制
    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()

它返回Provided schema doesn't match existing table's schema错误。有人能给我举个Python例子吗?非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-29 22:27:45

我的评论摘要(因为我现在有几分钟的时间):

  • 整个模式(连同新字段)都需要提供给api。
  • 对于现有行,将添加带有null的新字段。没有设定价值的方法
  • 您可以在针对此表运行的查询中有一些逻辑来弥补这一点。或者,您可以使用这个新字段和一些键将现有表与新表连接起来,以获得此字段。
票数 2
EN

Stack Overflow用户

发布于 2016-03-29 21:57:09

基于Mikhail Berlyant注释,我必须将带有新字段(列)的现有表的模式传递给update()方法,以更新现有表的模式。

下面给出了python代码示例:

代码语言:javascript
运行
复制
...
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建议,为现有行设置值的方法是为具有值的新列创建一个单独的表,并将现有表与该表连接起来,以替换旧的模式表。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36295488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档