2017-02-23 133 views
2

Мы создали вид на двух таблицах в наборе данных. Мы можем запросить представление из веб-интерфейса консоли. Но когда мы пытаемся запросить представление из кода клиента Python с помощью ключа учетной записи службы, мы получаем код ошибки: 200, Bad Request, Invalid tablename. Мы можем запросить базовую таблицу с использованием того же кода. Когда мы попытались заменить имя таблицы именем вида, код перестает работать.Bigquery view get error from code 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 с скобками вместо backticks, если вы используете устаревший 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 и используя #standard sql-тег в запросе вида, вы помогли использовать стандартный язык запросов. Код python начал работать –