2016-03-29 31 views
1

相關問題現有的表:Bigquery add columns to table schema using BQ command line tools的BigQuery:添加新列使用python BQ API

我要添加使用的BigQuery Python API 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() 

返回Provided schema doesn't match existing table's schema錯誤。 任何人都可以給我一個可用的Python示例嗎? 非常感謝!

+0

你應該提供完整的架構,不只是新的領域 –

+0

米哈伊爾·你好,你是指現有表格的整個模式嗎? –

+1

是的,有了新的領域。所以API將負責添加新的。但爲此發生整個架構需要呈現 –

回答

2

我的評論摘要(as我有一些現在分鐘本):

  • 整個架構(連同新的領域)需要被提供給API
  • 新的領域將與空添加現有行。無法設置 值
  • 您可以在查詢中使用某些邏輯,您將針對此表運行 以彌補此問題。或者您也可以有單獨的表 只是這個新領域和一些關鍵的,你將與新表中要加入你的 現有的表來獲得這個領域
+0

有關修補程序與更新的更多信息,因爲它適用於模式更新:http://stackoverflow.com/a/17113985/1375400 –

4

基於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建議,設置現有行值的方法是爲具有值的新列創建單獨的表,並將該現有表與該表聯合以替換舊的模式表。

相關問題