如何在 Linux 服务器上的 R 中验证 BigQuery (bigrquery)

How to authenticate BigQuery in R on Linux Server (bigrquery)

我们正在尝试在计划到 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

当我们在 linux 服务器上 运行 通过 R 打开 R,然后手动 运行ning 代码行时,我们得到:

> 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 权限的有效服务帐户密钥,但仍然无法在服务器上进行身份验证。

同样question was asked in the RStudio community forum. Posting the discussion这里留给后代。

A few troubleshooting ideas:

... R script scheduled to run on a linux server....

每当我听到“scheduled”时,我就会想到“cron”,而当我听到“cron”时,我就会想到 想想“路径问题”。所以在服务器/调度上下文中,我 建议做非常迂腐的检查,你真正了解什么 工作目录是,用户是谁,以及路径是否正在解析 随心所欲。

但是,这个服务帐户令牌似乎并没有 在本地互动会话中为您工作表明某事是 文件错误。从历史上看,人们曾尝试使用其他 JSON 文件,例如 OAuth 客户端的 JSON,就好像它是 JSON 对于服务帐户,由于显而易见的原因,它不起作用。

您可以更深入地了解这是如何失败和失败的 通过使用 gargle verbosity 选项进行交互式身份验证 这里:

gargle.r-lib.org - Troubleshooting gargle auth - gargle

如果您还没有找到它(并且为了 其他读者)这里是如何设置的一般概述 非交互式身份验证:

gargle.r-lib.org - Non-interactive auth - gargle

@Canovice 在同一论坛 thread 中承认,问题是由于 bq_auth() 函数中使用的错误服务帐户密钥造成的。