无法使用 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
标志设置为bigrquery
和dplyr
连接器。如果您正在访问使用标准 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?