如何在 Linux 服务器上的 R 中验证 BigQuery (bigrquery)
Posted
技术标签:
【中文标题】如何在 Linux 服务器上的 R 中验证 BigQuery (bigrquery)【英文标题】:How to authenticate BigQuery in R on Linux Server (bigrquery) 【发布时间】:2021-10-15 02:23:50 【问题描述】:我们正在尝试在计划在 linux 服务器上运行的 R 脚本中对 BigQuery 进行身份验证。我们有:
bigrquery::bq_auth(path = '~/path-to/credentials/our-creds.json')
当我在 R 中本地运行时,我得到了这个提示
The bigrquery package is requesting access to your Google account.
Select a pre-authorised account or enter '0' to obtain a new token.
Press Esc/Ctrl + C to cancel.
1: myemail@gmail.com
Selection:
当我们通过Rscript our_script.R
在我们的linux服务器上运行它时,我们得到以下错误:
Error: Can't get Google credentials.
Are you running bigrquery in a non-interactive session? Consider:
* Call `bq_auth()` directly with all necessary specifics.
Execution halted
当我们通过R
在我们的linux服务器上运行这个来打开R,然后手动运行这行代码,我们得到:
> bigrquery::bq_auth(path = '~/path-to/credentials/our-creds.json')
Waiting for authentication in browser...
Press Esc/Ctrl + C to abort
并且因为我们没有浏览器进行身份验证(我们通过 SSH 连接到位于 GCP 上的 linux 服务器),所以终端挂在这里...
我们怎样才能在服务器上成功认证,让Rscript out_script.R
能够成功运行?
编辑:我们服务器上的信息:
如果我可以分享其他信息来帮助解决这个问题,请告诉我。我们还尝试将myemail@gmail.com
添加到bigrquery 的email
参数中,但这并没有解决问题。我看到有一个token
参数,也许我们可以在某个地方手动添加一个令牌?这一切都非常令人沮丧,因为我认为使用服务帐户密钥应该可以解决此问题,但我们指向具有 bigquery 权限的有效服务帐户密钥,但仍然无法在服务器上进行身份验证。
【问题讨论】:
你安装的R版本是多少?我使用 R 版本 3.5.2 执行了sample script,并且能够成功查询 BigQuery 中的表。当服务帐户密钥的路径未正确传递给bq_auth()
函数时,我收到错误Can't get Google credentials
。
所以,请考虑检查 Linux 服务器上的服务帐户密钥路径。如果这没有帮助,请在运行 sudo R
以调用解释器后使用命令 update.packages(ask=FALSE)
更新安装在 Linux 服务器上的所有 R 包。
【参考方案1】:
在 RStudio 社区论坛中询问了相同的 question。在此处发布discussion 以供后代使用。
一些故障排除思路:
... R 脚本计划在 linux 服务器上运行....
每当我听到“scheduled”时,我会想到“cron”,而当我听到“cron”时,我会想到 想想“路径问题”。所以在服务器/调度上下文中,我 建议您进行非常迂腐的检查,以确保您真正了解什么 工作目录是,用户是谁,以及路径是否正在解析 达到你的意图。
然而,这个服务帐户令牌似乎并不 在本地交互式会话中为您工作表明有些事情是 文件有问题。历史上,人们曾尝试使用其他 JSON 文件,例如 OAuth 客户端的 JSON,就好像它是 JSON 出于明显的原因,服务帐户无法正常工作。
您可以更深入地了解这是如何失败和失败的 使用描述的 gargle verbosity 选项进行交互式身份验证 这里:
gargle.r-lib.org - Troubleshooting gargle auth - 漱口
如果您还没有找到它(为了 其他读者)这里是如何设置的一般概述 非交互式身份验证:
gargle.r-lib.org - Non-interactive auth - 漱口
@Canovic 在同一论坛thread 中承认,问题是由于bq_auth()
函数中使用的服务帐户密钥错误造成的。
【讨论】:
以上是关于如何在 Linux 服务器上的 R 中验证 BigQuery (bigrquery)的主要内容,如果未能解决你的问题,请参考以下文章
如何以 CSV 表格格式将原始数据源从 Google Big Query 导出到 R 服务器?
如何释放崩溃 R 会话的 big.matrix 对象使用的内存