Можно ли использовать служебные учетные записи для планирования запросов в функции BigQuery «Запланировать запрос»? - PullRequest
0 голосов
/ 05 ноября 2018

Мы используем функцию бета-запроса по расписанию BigQuery. Подробности: https://cloud.google.com/bigquery/docs/scheduling-queries

У нас есть несколько запланированных ETL-запросов, выполняемых в одночасье для оптимизации агрегации и снижения стоимости запросов. Это работает хорошо, и не было много проблем.

Проблема возникает, когда человек, который запланировал запрос, используя свои собственные учетные данные, покидает организацию. Я знаю, что мы можем сделать "обновить учетные данные" в таких случаях.

Я прочитал документ и также попробовал, но не смог найти, можно ли использовать служебную учетную запись вместо отдельных учетных записей для планирования запросов.

Сервисные учетные записи более чистые и связаны с остальной частью инфраструктуры IAM и не зависят от одного пользователя.

Так что, если у вас есть какая-либо дополнительная информация относительно запланированных запросов и учетной записи службы, пожалуйста, поделитесь.

Спасибо, что нашли время, чтобы прочитать вопрос и ответить на него.

Привет

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Хотя это не поддерживается в пользовательском интерфейсе BigQuery, можно создать передачу (включая запланированный запрос) с помощью Python GCP SDK для 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
0 голосов
/ 05 ноября 2018

Насколько я знаю, к сожалению, вы еще не можете использовать служебную учетную запись для непосредственного планирования запросов. Возможно, Googler исправит меня, но документы BigQuery неявно утверждают это:

https://cloud.google.com/bigquery/docs/scheduling-queries#quotas

Запланированный запрос выполняется с учетными данными создателя и проект, как если бы вы выполняли запрос самостоятельно

Если вам нужно использовать служебную учетную запись (кстати, это отличная практика), то здесь есть несколько обходных путей здесь . Я поднял FR здесь для потомков.

...