2017-02-23 4 views
2

データセット内の2つのテーブルにビューを作成しました。コンソールWeb UIからビューを照会することができます。しかし、サービスアカウントキーを使用してPythonクライアントコードからビューを照会しようとすると、エラーコード:200、不正リクエスト、無効なtablenameが表示されます。同じコードを使用して基礎となるテーブルを照会することができます。テーブル名をビュー名に置き換えようとすると、コードは機能しなくなります。我々はquery_results.use_legacy_sql = False設定した場合もPythonコードからBigqueryビューのエラーが発生する

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() 

、我々はエラーの下に取得する:

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

答えて

0

脱出してみてください。

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

我々はquery_results.use_legacy_sql = Trueを設定し、我々は別のエラーを取得しますレガシーSQLを使用している場合は、バックスティックではなく、大括弧でdataset.viewnameを指定します。

ので、クエリは次のようになります。標準とレガシーSQL間の脱出違いの

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

ドキュメント: はhttps://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql#escaping_reserved_keywords_and_invalid_identifiers

我々はしかし、標準SQLへの移動をお勧めします。

+0

ありがとうございます。標準SQLに移動し、ビュークエリで#standard sqlタグを使用すると、標準のクエリ言語が使用できました。それはPythonコードが動作を開始した –

関連する問題