2017-02-23 51 views
2

我們已經在數據集的兩個表上創建了一個視圖。我們能夠從控制檯Web UI查詢視圖。但是,當我們嘗試使用服務帳戶密鑰查詢來自Python客戶端代碼的視圖時,我們得到一個錯誤 - 錯誤代碼:200,錯誤的請求,無效的表名。我們可以使用相同的代碼查詢底層表。當我們試圖用視圖名替換表名時,代碼停止工作。Bigquery視圖從python代碼獲取錯誤

from google.cloud import bigquery 


def test(): 
    client = bigquery.Client(project='project-name') 
    query_results = client.run_sync_query(""" 
     SELECT column-names 
     FROM `dataset.viewname` 
     WHERE conditions 
     ;""") 

    query_results.use_legacy_sql = False 
    query_results.run() 
    page_token = None 

    while True: 
     rows, total_rows, page_token = query_results.fetch_data(
      max_results=1, 
      page_token=page_token) 

     for row in rows: 
      print row 
     if not page_token: 
      break 

if __name__ == '__main__': 
    test() 

而且,當我們設置query_results.use_legacy_sql = False,我們得到以下錯誤:

BadRequest: 400 Cannot reference a Legacy SQL view in a SQL query

當我們建立query_results.use_legacy_sql = True,我們得到一個不同的錯誤:

BadRequest: 400 Invalid table name: 'dataset.viewname'

回答

0

嘗試逃脫dataset.viewname與括號,而不是反引號如果您使用舊版的SQL。

因此,查詢將是:

query_results = client.run_sync_query(""" 
SELECT column-names 
FROM [dataset.viewname] 
WHERE conditions 
;""") 

的標準和傳統SQL之間的差異逃逸文件: https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql#escaping_reserved_keywords_and_invalid_identifiers

我們建議遷移到標準的SQL,雖然。

+0

謝謝..移動到標準SQL並在視圖查詢中使用#標準sql標記有助於使用標準查詢語言。 python代碼開始工作 –