Notifiche di esecuzione di BigQuery Data Transfer Service

Questa pagina fornisce una panoramica delle notifiche di esecuzione per BigQuery Data Transfer Service.

Panoramica

Esistono due tipi di notifiche di esecuzione che puoi configurare per BigQuery Data Transfer Service:

  • Notifiche Pub/Sub: notifiche leggibili dalla macchina inviate quando un'esecuzione di trasferimento va a buon fine o meno
  • Notifiche email: notifiche leggibili inviate quando un trasferimento non va a buon fine

Puoi configurare ogni tipo singolarmente oppure puoi utilizzare sia le notifiche di esecuzione via Pub/Sub sia quelle via email.

Notifiche Pub/Sub

Le notifiche Pub/Sub inviano informazioni sulle esecuzioni di trasferimento in un argomento Pub/Sub. Le notifiche Pub/Sub vengono attivate dalle esecuzioni del trasferimento completate nei seguenti stati:

  • SUCCEEDED
  • FAILED
  • CANCELLED

Puoi inviare notifiche a qualsiasi argomento Pub/Sub in qualsiasi progetto per il quale disponi di autorizzazioni sufficienti. Una volta ricevuto dall'argomento Pub/Sub, il messaggio risultante può essere inviato a un numero qualsiasi di sottoscrittori all'argomento.

Prima di iniziare

Prima di configurare le notifiche di esecuzione del trasferimento Pub/Sub, devi:

  1. Abilita l'API Pub/Sub per il progetto che riceverà le notifiche.

    Abilita l'API

  2. Disporre di autorizzazioni sufficienti per il progetto che riceverà le notifiche:

    • Se sei il proprietario del progetto che riceverà le notifiche, molto probabilmente disponi dell'autorizzazione necessaria.

    • Se prevedi di creare argomenti per la ricezione delle notifiche, devi disporre delle autorizzazioni pubsub.topics.create.

    • Che tu intenda utilizzare argomenti nuovi o esistenti, devi disporre delle autorizzazioni pubsub.topics.getIamPolicy e pubsub.topics.setIamPolicy. Se crei un argomento, in genere hai già l'autorizzazione per crearlo. Il seguente ruolo IAM predefinito ha le autorizzazioni pubsub.topics.getIamPolicy e pubsub.topics.setIamPolicy: pubsub.admin. Per ulteriori informazioni, vedi Controllo dell'accesso Pub/Sub.

  3. Avere un argomento Pub/Sub esistente a cui inviare le notifiche.

Formato delle notifiche

Le notifiche inviate all'argomento Pub/Sub sono composte da due parti:

  • Attributi: un set di coppie chiave:valore che descrivono l'evento.
  • Payload: una stringa contenente i metadati dell'oggetto modificato.

Attributi

Gli attributi sono coppie chiave:valore contenute in tutte le notifiche inviate da BigQuery Data Transfer Service all'argomento Pub/Sub. Le notifiche contengono sempre il seguente set di coppie chiave-valore, indipendentemente dal payload della notifica:

Nome attributo Esempio Descrizione
eventType TRANSFER_RUN_FINISHED Il tipo di evento che si è appena verificato. TRANSFER_RUN_FINISHED è l'unico valore possibile.
payloadFormat JSON_API_V1 Il formato del payload dell'oggetto. JSON_API_V1 è l'unico valore possibile.

Payload

Il payload è una stringa che contiene i metadati dell'esecuzione del trasferimento. Il tipo di payload non è al momento configurabile, ma viene fornito per adeguarsi alle future modifiche della versione dell'API.

Tipo di payload Descrizione
JSON_API_V1 Il payload sarà una stringa con serie JSON UTF-8 contenente la rappresentazione della risorsa di un TransferRun.

Notifiche via email

Le notifiche via email inviano messaggi email leggibili quando un trasferimento non va a buon fine. Questi messaggi vengono inviati all'utente che ha configurato il trasferimento. I messaggi non sono configurabili.

Se altri utenti devono ricevere notifiche email per l'esecuzione del trasferimento, configura le regole di inoltro email per distribuire i messaggi. Se utilizzi Gmail, puoi Inoltrare automaticamente i messaggi di Gmail a un altro account.

La notifica via email viene inviata da BigQuery Data Transfer Service e contiene dettagli sulla configurazione del trasferimento, l'esecuzione del trasferimento e un link alla cronologia delle esecuzioni per l'esecuzione non riuscita. Ad esempio:

From: bigquery-data-transfer-service-noreply@google.com
To: user_who_set_up_transfer
Title: BigQuery Data Transfer Service — Transfer Run Failure —
display_name

Transfer Configuration
Display Name: display_name
Source: data_source
Destination: project_id

Run Summary
Run: run_name
Schedule Time: schedule_time
Run Time: run_time
View Run History


Google LLC 1600 Amphitheatre Parkway, Mountain View, CA 94043

This email was sent because you indicated you are willing to receive Run
Notifications from the BigQuery Data Transfer Service. If you do not wish to
receive such emails in the future, click View Transfer Configuration and
un-check the "Send E-mail Notifications" option.

Attiva le notifiche

Puoi attivare le notifiche in uno dei seguenti modi:

Console

  1. Vai alla pagina BigQuery nella console Google Cloud.

    Vai alla pagina di BigQuery

  2. Fai clic su Trasferimenti di dati nel menu di navigazione.

  3. Per attivare le notifiche per un nuovo trasferimento, fai clic su Crea trasferimento. Per modificare le notifiche per un trasferimento esistente, fai clic sul nome del trasferimento e poi su Modifica.

  4. Nella sezione Opzioni di notifica, fai clic sui pulsanti di attivazione/disattivazione accanto ai tipi di notifica da attivare.

    • Notifiche email: quando attivi questa opzione, l'amministratore dei trasferimenti riceve una notifica via email quando un trasferimento non riesce.
    • Notifiche Pub/Sub: quando abiliti questa opzione, scegli il nome dell'argomento o fai clic su Crea un argomento. Questa opzione configura le notifiche di Pub/Sub per il trasferimento.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to get run notification
public class RunNotification {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    final String datasetId = "MY_DATASET_ID";
    final String pubsubTopicName = "MY_TOPIC_NAME";
    final String query =
        "SELECT CURRENT_TIMESTAMP() as current_time, @run_time as intended_run_time, "
            + "@run_date as intended_run_date, 17 as some_integer";
    Map<String, Value> params = new HashMap<>();
    params.put("query", Value.newBuilder().setStringValue(query).build());
    params.put(
        "destination_table_name_template",
        Value.newBuilder().setStringValue("my_destination_table_{run_date}").build());
    params.put("write_disposition", Value.newBuilder().setStringValue("WRITE_TRUNCATE").build());
    params.put("partitioning_field", Value.newBuilder().build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Scheduled Query Name")
            .setDataSourceId("scheduled_query")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .setNotificationPubsubTopic(pubsubTopicName)
            .build();
    runNotification(projectId, transferConfig);
  }

  public static void runNotification(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println(
          "\nScheduled query with run notification created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("\nScheduled query with run notification was not created." + ex.toString());
    }
  }
}

Python

Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
pubsub_topic = "projects/PROJECT-ID/topics/TOPIC-ID"
from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)
transfer_config.notification_pubsub_topic = pubsub_topic
update_mask = field_mask_pb2.FieldMask(paths=["notification_pubsub_topic"])

transfer_config = transfer_client.update_transfer_config(
    {"transfer_config": transfer_config, "update_mask": update_mask}
)

print(f"Updated config: '{transfer_config.name}'")
print(f"Notification Pub/Sub topic: '{transfer_config.notification_pubsub_topic}'")

Esegui prezzi delle notifiche

Se configuri le notifiche di esecuzione di Pub/Sub, ti saranno addebitati i costi di Pub/Sub. Per ulteriori informazioni, consulta la pagina Prezzi di Pub/Sub.

Passaggi successivi