如何通过 Datalab 查询 BigQuery 视图?

How to query BigQuery view through Datalab?

我的 BigQuery 中保存了一个 SQL 视图。我想 运行 SQL 查询此视图。我们可以 运行 SQL 查询表如下:

%%bq query
SELECT * 
FROM tablename
WHERE condition

但是我在 运行为视图设置相同时出现错误:

%%bq query
SELECT * FROM viewname

错误:

invalidQuery: Cannot reference a legacy SQL view in a standard SQL query.

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

错误:

NameErrorTraceback (most recent call last) in () 1 import google.datalab.bigquery as bq ----> 2 c = View.query(sql='SELECT * From viewname').execute().result().to_dataframe()
TypeError: 'property' object is not callable

正如您已经确定的,有两种在 Datalab 中使用 BigQuery 的方法:

  • 使用 %%bq,如 this sample notebook.
  • 中所示
  • 使用 Datalab 的 BigQuery API 库 (sample notebook)。目前,支持和更新的版本是 google.datalab.bigquery,但是出于向后兼容的原因,旧版本 datalab.bigquery 仍然可用。

根据您收到的错误消息 (Cannot reference a legacy SQL view in a standard SQL query),我了解到您查询的视图是使用旧版 SQL 查询创建的。正如本 post、Datalab is moving to Standard SQL 中所解释的,因此它对 Legacy SQL 的支持正在停止。这就是为什么 %%bqgoogle.datalab.bigquery 都不支持 Legacy SQL,只支持 Standard SQL.

如果您确实需要现在的视图(即使用 Legacy SQL 创建),作为临时解决方法,您可以改用旧库(仍然可用),datalab.bigquery 如下:

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

不过,我强烈建议您入手migrating to Standard SQL,因为它是 BigQuery 的首选查询语言,而且它有很多优点,其中可以算上 Datalab 中的官方支持。