如何在 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 服务器?

Big-data:Linux基础(04)--快捷键

如何在不退出远程服务器上的 R 的情况下恢复 X11 连接

如何释放崩溃 R 会话的 big.matrix 对象使用的内存

如何修复在 Linux/Fedora 31 上的 R 中未正确显示的度数符号

在 Spark 中过滤 Big number 上的数据