Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 是否可以使用服务帐户在BigQuery中安排查询;计划查询";特征?_Google Bigquery_Service Accounts - Fatal编程技术网

Google bigquery 是否可以使用服务帐户在BigQuery中安排查询;计划查询";特征?

Google bigquery 是否可以使用服务帐户在BigQuery中安排查询;计划查询";特征?,google-bigquery,service-accounts,Google Bigquery,Service Accounts,我们正在使用BigQuery的Beta定时查询功能。 详情: 我们很少有ETL计划查询一夜之间运行,以优化聚合并降低查询成本。它运行良好,没有太多问题 当使用自己的凭据计划查询的人员离开组织时,会出现问题。我知道在这种情况下我们可以“更新凭证” 我通读了文档,也做了一些尝试,但没有找到是否可以使用服务帐户而不是个人帐户来安排查询 服务帐户更干净,与IAM框架的其余部分紧密相连,不依赖于单个用户 因此,如果您有任何关于预定查询和服务帐户的其他信息,请与我们分享 感谢您抽出时间阅读并回答问题 就我所

我们正在使用BigQuery的Beta定时查询功能。 详情:

我们很少有ETL计划查询一夜之间运行,以优化聚合并降低查询成本。它运行良好,没有太多问题

当使用自己的凭据计划查询的人员离开组织时,会出现问题。我知道在这种情况下我们可以“更新凭证”

我通读了文档,也做了一些尝试,但没有找到是否可以使用服务帐户而不是个人帐户来安排查询

服务帐户更干净,与IAM框架的其余部分紧密相连,不依赖于单个用户

因此,如果您有任何关于预定查询和服务帐户的其他信息,请与我们分享

感谢您抽出时间阅读并回答问题


就我所知,不幸的是,您还不能使用服务帐户直接安排查询。也许谷歌会纠正我的错误,但BigQuery文档隐式地指出:

使用创建者的凭据和 项目,就像您自己执行查询一样


如果您需要使用服务帐户(顺便说一句,这是一个很好的实践),那么下面列出了一些解决方法。我为后代提出了一个FR。

虽然BigQuery UI不支持它,但可以使用python GCP SDK for DTS或从BQ CLI创建传输(包括计划查询)

以下是使用Python SDK的示例:

r"""Example of creating TransferConfig using service account.

Usage Example:
1. Install GCP BQ python client library.
2. If it has not been done, please grant p4 service account with
iam.serviceAccout.GetAccessTokens permission on your project.
  $ gcloud projects add-iam-policy-binding {user_project_id} \
   --member='serviceAccount:service-{user_project_number}@'\
   'gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com' \
   --role='roles/iam.serviceAccountTokenCreator'

   where {user_project_id} and {user_project_number} are the user project's
   project id and project number, respectively. E.g.,
  $ gcloud projects add-iam-policy-binding my-test-proj \
  --member='serviceAccount:service-123456789@'\
  'gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com'\
  --role='roles/iam.serviceAccountTokenCreator'

3. Set environment var PROJECT to your user project, and
GOOGLE_APPLICATION_CREDENTIALS to the service account key path. E.g.,
   $ export PROJECT_ID='my_project_id'
   $ export GOOGLE_APPLICATION_CREDENTIALS=./serviceacct-creds.json'
4. $ python3 ./create_transfer_config.py
"""

import os
from google.cloud import bigquery_datatransfer
from google.oauth2 import service_account
from google.protobuf.struct_pb2 import Struct

PROJECT = os.environ["PROJECT_ID"]
SA_KEY_PATH = os.environ["GOOGLE_APPLICATION_CREDENTIALS"]

credentials = (
    service_account.Credentials.from_service_account_file(SA_KEY_PATH))

client = bigquery_datatransfer.DataTransferServiceClient(
    credentials=credentials)
# Get full path to project
parent_base = client.project_path(PROJECT)

params = Struct()
params["query"] = "SELECT CURRENT_DATE() as date, RAND() as val"
transfer_config = {
    "destination_dataset_id": "my_data_set",
    "display_name": "scheduled_query_test",
    "data_source_id": "scheduled_query",
    "params": params,
}

parent = parent_base + "/locations/us"

response = client.create_transfer_config(parent, transfer_config)
print response

BigQuery Scheduled Query不支持带有服务帐户的计划查询和带有服务帐户的计划查询。这些对你有用吗?

这个问题很老了,在我搜索时出现在这个帖子上。 是的,可以使用服务帐户安排大型查询作业

在创建计划查询作业时,单击“高级选项”,您将获得选择服务帐户的选项

默认情况下,使用请求用户的凭据。
来自bigquery“创建计划查询”的图像

我正在尝试向传输配置添加“计划”属性。我可以创建一个调度查询,例如“每天02:00”。但我遇到了一个问题-它总是在创建后立即运行,无论指定的计划如何。此操作失败,原因是
google.api_core.exceptions.failedPremission:400 P4服务帐户需要iam.serviceAccounts.getAccessToken权限
,尽管将服务帐户令牌创建者角色添加到BigQuery数据传输服务代理中。还有什么需要的吗?问题追踪器上有更新,解决方法不再有用。问题类型已从bug更改为feature request,正在考虑中。
bq mk--transfer\u config
命令现在接受
--service\u account\u name=abcdef测试-sa@abcdef-test.iam.gserviceaccount.com
选项,用于将计划查询作为服务帐户运行。现在可以在web控制台中为计划查询设置服务帐户。在创建(或更新)时展开“高级选项”,将有一个服务帐户下拉列表(仅来自当前项目)可供选择。