我们正在使用BigQuery的Beta计划查询功能。 详细信息:https://cloud.google.com/bigquery/docs/scheduling-queries
我们很少有隔夜运行的ETL计划查询,以优化聚合并降低查询成本。它运作良好,并且没有太多问题。
使用自己的凭据计划查询的人员离开组织时,就会出现问题。我知道在这种情况下我们可以做“更新凭证”。
我通读了文档,也尝试了一下,但是找不到我们是否可以使用服务帐户而不是单个帐户来安排查询。
服务帐户更干净,并且可以与IAM框架的其余部分联系在一起,并且不依赖于单个用户。
因此,如果您有有关计划查询和服务帐户的其他信息,请共享。
感谢您抽出时间阅读并回答问题。
致谢
答案 0 :(得分:4)
答案 1 :(得分:2)
据我所知,很遗憾,您还不能使用服务帐户直接安排查询。也许一个Google员工会纠正我,但是BigQuery文档中隐含了这一点:
https://cloud.google.com/bigquery/docs/scheduling-queries#quotas
使用创建者的凭据执行计划的查询,并 项目,就好像您自己在执行查询一样
答案 2 :(得分:2)
尽管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
答案 3 :(得分:1)
这个问题很老了,在我搜索时出现在这个线程上。 是的,可以使用服务帐户来安排大型查询作业。
在创建计划查询作业时,点击“高级选项”,您将获得选择服务帐户的选项。
默认使用请求用户的凭据。 来自 bigquery“创建计划查询”的图片1