You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将BigQuery SQL表导入R时报错:strsplit非字符参数

bigrquery + dplyr: Error in strsplit(name, ".", fixed = TRUE) : non-character argument when calling tbl()

环境信息

  • R版本:4.3.0 (2023-04-21 ucrt)
  • 相关包版本:DBI 1.1.3, bigrquery 1.4.2, dplyr 2.4.0

问题重现代码

install.packages(c("DBI", "dbplyr", "bigrquery"))  
library(bigrquery)
library(DBI)
library(dbplyr)

con <- dbConnect(
    bigrquery::bigquery(),
    project = "sunny-effort-399008",
    dataset = "Daily_tables",
    billing = "My_First_Project"
)
                    
dbListTables(con)
dbIsValid(con)

# METs table
met <- as.character("Mets")
METs <- tbl(con, "Mets")

报错信息

执行tbl(con, "Mets")时触发以下错误:

Error in strsplit(name, ".", fixed = TRUE) : non-character argument

完整调用栈:

14. strsplit(name, ".", fixed = TRUE)
13. as_bq_table.BigQueryConnection(con, sql)
12. as_bq_table(con, sql)
11. db_query_fields.BigQueryConnection(con, ...)
10. dplyr::db_query_fields(con, ...)
9. eval_bare(expr((!!fun)(con, ...)))
8. dbplyr_fallback(con, "db_query_fields", ...)
7. dbplyr_query_fields(src$con, from)
6. vars %||% dbplyr_query_fields(src$con, from)
5. tbl_sql(c(subclass, "dbi"), src = src, from = from, ...)
4. tbl.src_dbi(dbplyr::src_dbi(src, auto_disconnect = FALSE), from = from, ...)
3. tbl(dbplyr::src_dbi(src, auto_disconnect = FALSE), from = from, ...)
2. tbl.DBIConnection(con, "Mets")
1. tbl(con, "Mets")

已尝试的排查步骤

  • 确认BigQuery中目标表名(含大小写)无误
  • 通过dbIsValid(con)验证连接有效(返回TRUE)
  • 尝试将表名转为显式字符型后传入tbl()
  • 确认BigQuery项目中存在目标表且权限正常
  • 更换3个不同表名测试,均触发相同报错

解决方案

1. 使用bigrquery原生函数替代dbplyr的tbl()

绕过dbplyr接口,直接用bigrquery内置函数获取数据,避免版本兼容问题:

# 直接下载整张表
bq_tbl <- bq_table(project = "sunny-effort-399008", dataset = "Daily_tables", table = "Mets")
METs <- bq_table_download(bq_tbl)

# 或通过SQL查询获取数据
query <- "SELECT * FROM `sunny-effort-399008.Daily_tables.Mets`"
METs <- bq_project_query("My_First_Project", query) %>% bq_table_download()

2. 降级dbplyr至兼容版本

报错源于dplyr 2.4.0与bigrquery 1.4.2的适配问题,可降级dbplyr到稳定兼容版本:

# 卸载当前版本
remove.packages("dbplyr")
# 安装兼容版本(如2.3.4)
install.packages("dbplyr", version = "2.3.4")

重启R会话,重新加载包后测试连接。

3. 显式使用src_dbi与in_schema()

尝试用in_schema()明确指定数据集和表名:

src <- src_dbi(con, auto_disconnect = FALSE)
METs <- tbl(src, in_schema("Daily_tables", "Mets"))

说明

该错误是因为dplyr 2.4.0更新了db_query_fields接口,而bigrquery 1.4.2尚未完全适配,导致as_bq_table函数接收到非字符型参数,触发strsplit报错。优先推荐方案1(使用bigrquery原生函数),若需保留dbplyr链式操作,可尝试方案2或3。

内容的提问来源于stack exchange,提问作者Goik Dominika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:55:34