1

我正在尝试使用 bq cli 使用大查询将数据导出到 GCS。目前有两个项目,每个项目都有自己的服务帐户。我已经通过传递密钥 json 文件使用 gcloud auth active-service-account 对服务帐户进行了身份验证。在运行我的工作时,我使用以下命令明确设置项目和帐户

在JOB1内

gcloud 配置设置账户 account1

gcloud 配置设置项目 project1

bq 提取 --destination_format NEWLINE_DELIMITED_JSON table1 gs://path1

在JOB2内

gcloud 配置设置帐户 account2

gcloud 配置设置项目 project2

bq 提取 --destination_format NEWLINE_DELIMITED_JSON table2 gs://path2

当 job1 和 job2 并行运行时,JOB1 失败,错误 account2 无法访问 project1,类似地,在某些情况下,JOB2 失败,错误 account1 is not have access to project2。我们已经确定它正在发生,因为当我们设置帐户时,它会更改服务器内(而不是会话内)的默认帐户,因此并行运行的另一个作业失败。您能否帮助我们如何在同一服务器中并行使用多个服务帐户执行 bq 命令

4

1 回答 1

0

在深入研究解决方案之前,让我解释一下这个过程。在 BigQuery 上执行操作时,大多数情况下是异步操作。cli 让您认为它是同步的,但不是。

cli 执行此操作

  • 启动作业并获取jobId
  • 循环定期拉取jobId状态
  • 最后打印作业结果(状态完成,错误)

如果您更改凭据,CLI 将无法完成循环拉取,因为它不再有权检查项目上的此 JobId。

现在,您有 2 个解决方案:

  • 作业结果在 cli 中对您很重要,您无法更改凭证。提取必须是连续的
  • 作业结果不是导入,您更喜欢并行性,您可以--nosynchronous_mode在执行提取时使用参数

注意:我很确定如果您使用多个用户和 SUDO 命令,您可以在同步模式下实现您想要的。但是,我不是 linux 专家,对此我无能为力。

于 2020-04-14T22:01:09.197 回答