如何通过 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 的支持将停止。这就是为什么 %%bq
和 google.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