Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BigQuery:使用PythonBQAPI向现有表添加新列_Python_Google Bigquery - Fatal编程技术网

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

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

相关问题:

我想向现有表添加一个新列,并使用BigQuery更新BigQuery中现有表的模式

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

这是我的密码:

    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在修补程序与更新中重试,因为它适用于架构更新:更多关于修补程序与更新,因为它适用于架构更新: