如何通过 Datalab 查询 BigQuery 视图?

Posted

技术标签:

【中文标题】如何通过 Datalab 查询 BigQuery 视图?【英文标题】:How to query BigQuery view through Datalab? 【发布时间】:2018-05-10 10:46:39 【问题描述】:

我的 BigQuery 中保存了一个 SQL 视图。我想在这个视图上运行 SQL 查询。我们可以对表运行 SQL 查询,如下所示:

%%bq query
SELECT * 
FROM tablename
WHERE condition

但是我在运行 View 时遇到错误:

%%bq query
SELECT * FROM viewname

错误:

invalidQuery:无法在标准 SQL 查询中引用旧版 SQL 视图。

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

错误:

NameErrorTraceback(最近一次调用最后一次) 在 () 1 导入 google.datalab.bigquery 作为 bq ----> 2 c = View.query(sql='SELECT * From viewname').execute().result().to_dataframe() TypeError: 'property' 对象不可调用

【问题讨论】:

【参考方案1】:

正如您已经确定的那样,在 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 查询创建的。正如这篇文章中所解释的那样,Datalab is moving to Standard SQL,因此它对 Legacy SQL 的支持将停止。这就是为什么 %%bqgoogle.datalab.bigquery 都不支持 Legacy SQL,而只能使用 Standard SQL 的原因。

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

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

但是,我强烈建议您开始 migrating to Standard SQL,因为它是 BigQuery 的首选查询语言,并且它具有多个优点,其中您可以算上 Datalab 中的官方支持。

【讨论】:

它对我有用。感谢您的回答 dsesto。真的很有帮助。 很高兴能帮上忙!

以上是关于如何通过 Datalab 查询 BigQuery 视图?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Datalab,如何在 Google BigQuery 中使用 UDF 从复杂查询创建表?

Google Cloud datalab 查询 BIgQuery 表时出错

Google Cloud Datalab 中的 BigQuery - 获取查询文本?

如何使用 R 将 Google Cloud Datalab 输出保存到 BigQuery

如何使用R将Google Cloud Datalab输出保存到BigQuery中

我无法在 datalab 中查阅 bigquery 表?