无法使用 R dplyr 在旧版 SQL 查询中引用 SQL 视图

Posted

技术标签:

【中文标题】无法使用 R dplyr 在旧版 SQL 查询中引用 SQL 视图【英文标题】:Cannot reference a SQL view in a Legacy SQL query using R dplyr 【发布时间】:2017-03-23 19:52:23 【问题描述】:

我正在尝试使用 dplyr 访问/操作 Google BigQuery 中的表格视图。但是,当我尝试使用 dplyr 函数(选择、过滤器等)聚合表时,出现此错误:

错误:无法在旧版 SQL 查询中引用 SQL 视图

下面的代码是为了说明我想要做什么。

#source the table
pd = src_bigquery(project, dataset) %>%
 tbl(table)

#get a aggregated view of the table that is filtered on a specific date
pdSelect = pd %>%
 select(id, date) %>%
 filter(date =="2017-03-15") %>%
 collect()
   

有没有办法在使用 dplyr 时不使用旧版 SQL?例如,在 Google Bigquery Web UI 中,它显示“默认情况下,BigQuery 使用旧版 SQL 运行查询。取消选中此选项可使用 BigQuery 的更新后的 SQL 方言运行查询,并提高标准合规性。”当我在那个环境中工作时,我通常只是取消选择它,因此它停止使用旧版 SQL。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

编辑:应该可以通过将#standardSQL shebang 放在查询顶部来使用标准 SQL。

原始回复: source for the BigQuery connector with dplyr 中似乎没有使用标准 SQL 的选项,并且 #standardSQL shebang 不起作用。有一个issue submitted in relation to useLegacySql,你可以投票或评论,或者你可以考虑submitting a pull request。

【讨论】:

看起来有人创建了这个code 可能会解决问题。这是代码devtools::install_github("backlin/bigrquery", ref='feature/useLegacySqlOption') 应该可以做到这一点。但是,它尚未添加到 bigrquery 的最新 CRAN 版本中。我也不确定它是否适用于 dplyr。 如果您确实找到了可行的方法,请发布答案,以便其他用户也能找到解决方案:) 这有 since been fixed 和 #standardSQL should now be working。【参考方案2】:

除了传入shebangs,您还可以将use_legacy_sql 标志设置为bigrquerydplyr 连接器。如果您正在访问使用标准 SQL 构建的视图,这会很有用。

大查询

将 use_legacy_sql 标志传递给query_exec

bigrquery::query_exec("SELECT * FROM `datasetName.standardSQLView`", 
                      project ='bQProjectName',
                      use_legacy_sql = FALSE)

dplyr

将 use_legacy_sql 标志传递给dbConnect

bQCon = DBI::dbConnect(bigrquery::dbi_driver(),
                       project = 'bQProjectName',
                       dataset = 'datasetName',
                       use_legacy_sql = FALSE)
dplyr::tbl(bQCon, 'standardSQLView') 

【讨论】:

以上是关于无法使用 R dplyr 在旧版 SQL 查询中引用 SQL 视图的主要内容,如果未能解决你的问题,请参考以下文章

无法将 BigQuery 旧版 SQL 转换为 HAVING LEFT(...) 的标准 SQL

如何在旧版 IOS/旧版浏览器上使用 Graphql Vue Apollo?

旧版 sql 和标准 sql 之间的 BigQuery 表分区差异

在旧版应用程序中混合现代数据访问

用R进行数据库查询,这3种方法最常用

无法在 Google BigQuery 中将此旧版 SQL 转换为标准 SQL