Как запросить представление BigQuery через Datalab?

У меня есть представление SQL, сохраненное в моем BigQuery. Я хотел запускать SQL-запросы в этом представлении. МЫ можем запустить SQL-запрос к таблицам следующим образом:

%%bq query
SELECT * 
FROM tablename
WHERE condition

Но я получаю сообщение об ошибке при запуске того же для View:

%%bq query
SELECT * FROM viewname

Ошибка:

invalidQuery: нельзя ссылаться на устаревшее представление SQL в стандартном запросе SQL.

OR

import google.datalab.bigquery as bq
c = bq.View.query(sql='SELECT * From viewname').execute().result().to_dataframe()    

Ошибка:

NameErrorTraceback (последний последний вызов) в () 1 import google.datalab.bigquery as bq ----> 2 c = View.query(sql='SELECT * From viewname').execute().result().to_dataframe ()
TypeError: объект 'property' не может быть вызван


person Syed Afsahul    schedule 10.05.2018    source источник


Ответы (1)


Как вы уже поняли, существует два способа работы с BigQuery в Datalab:

  • Использование %%bq, как описано в этот образец блокнота.
  • Использование библиотек Datalab BigQuery API (образец блокнота). В настоящее время поддерживается и обновляется версия google.datalab.bigquery, однако устаревшая версия datalab.bigquery по-прежнему доступна для обеспечения обратной совместимости.

Согласно сообщению об ошибке, которое вы получаете ( Cannot reference a legacy SQL view in a standard SQL query ), я понимаю, что представление, которое вы запрашиваете, было создано с помощью устаревшего SQL-запроса. Как объясняется в этом сообщении, Datalab переходит на стандартный SQL, поэтому поддержка Legacy SQL прекращается. По этой причине и %%bq, и google.datalab.bigquery не поддерживают Legacy SQL, а работают только со Standard SQL.

Если вам действительно нужно представление, как оно есть прямо сейчас (т. е. созданное с помощью Legacy SQL), в качестве временного обходного пути вы можете вместо этого использовать старую библиотеку (которая все еще доступна), datalab.bigquery, как показано ниже:

import datalab.bigquery as bq
bq.Query("SELECT * FROM dataset.legacy_sql_view;").results()

Однако я настоятельно рекомендую вам начать перенос на стандартный SQL, учитывая, что это предпочтительный язык запросов для BigQuery, и он имеет множество преимуществ, среди которых можно отметить официальную поддержку в Datalab.

person dsesto    schedule 10.05.2018
comment
Это сработало для меня. Спасибо за ответ, dsesto. Был действительно полезен. - person Syed Afsahul; 11.05.2018
comment
Я рад, что смог помочь! - person dsesto; 11.05.2018