Передача данных BigQuery : Недопустимый ввод конструктора для запроса startmanualtransferruns

# #python #google-bigquery #google-cloud-functions #google-cloud-data-transfer

Вопрос:

Я пытаюсь запустить запланированный запрос через облачную функцию в GCP. Я попытался следовать нескольким учебным пособиям и примерам, а также просмотрел документацию, но с новой версией API google-cloud-bigquery-datatransfer==3.1.1 я не могу найти ничего, показывающего правильную процедуру.

Вы найдете ниже мой текущий код :

 from google.cloud import bigquery_datatransfer_v1

def triggerQuery (parent, requested_run_time):
    client = bigquery_datatransfer_v1.DataTransferServiceClient()
    project_id = '###' # Enter your projectID here
    location_id = 'europe' # Enter your locationID here
    transfer_id = '###'  # Enter your transferId here
    transfer_config = {...}
    path = f"projects/{project_id}/locations/{location_id}/transferConfigs/{transfer_id}"
    parent = client.transfer_config_path(project_id, transfer_id)
    response = client.start_manual_transfer_runs(path)
    print(response)
 

Я пытался перейти на client.start_manual_transfer_runs » или path » или parent «или», но я получаю :

 TypeError: Invalid constructor input for StartManualTransferRunsRequest: 'projects/###/locations/europe/transferConfigs/###'
 

Мне также нужно указать, что Облачная функция связана с соответствующей учетной записью службы, которая имеет права на выполнение запросов в BigQuery.

Помощь была бы очень признательна !

Комментарии:

1. Можете ли вы попробовать ввести формат location_id в регионе? Например, europe-west1

Ответ №1:

Вам необходимо ввести параметры ручной передачи, выполняемой в формате словаря. Приведенный ниже код работает для меня:

 import time
from google.cloud import bigquery_datatransfer_v1
from google.protobuf.timestamp_pb2 import Timestamp


client = bigquery_datatransfer_v1.DataTransferServiceClient()

project_id = 'your-project-id'
transfer_config_id = 'config-id-can-be-found-in-ui' 
location = 'location-of-your-transfer-config'

start_time = Timestamp(seconds=int(time.time() 20))
parent = f'projects/{project_id}/locations/{location}/transferConfigs/{transfer_config_id}'

response = client.start_manual_transfer_runs({"parent": parent, "requested_run_time": start_time})
print(response)