Notificaciones de ejecución de BigQuery Data Transfer Service

En esta página se ofrece una descripción general de las notificaciones de ejecución de BigQuery Data Transfer Service.

Puede configurar dos tipos de notificaciones de ejecución en BigQuery Data Transfer Service:

  • Notificaciones de Pub/Sub: notificaciones legibles por máquina que se envían cuando una transferencia se completa correctamente o no
  • Notificaciones por correo electrónico: notificaciones legibles por humanos que se envían cuando falla una transferencia

Puedes configurar cada tipo por separado o usar las notificaciones de ejecución de Pub/Sub y por correo electrónico.

Notificaciones de Pub/Sub

Las notificaciones de Pub/Sub envían información sobre las ejecuciones de transferencias a un tema de Pub/Sub. Las notificaciones de Pub/Sub se activan cuando se completan las transferencias en los siguientes estados:

  • SUCCEEDED
  • FAILED
  • CANCELLED

Puedes enviar notificaciones a cualquier tema de Pub/Sub de cualquier proyecto para el que tengas permisos suficientes. Una vez que el tema de Pub/Sub reciba el mensaje, se podrá enviar a todos los suscriptores del tema que quieras.

Antes de empezar

Antes de configurar las notificaciones de Pub/Sub sobre las transferencias, debe hacer lo siguiente:

  1. Habilita la API Pub/Sub en el proyecto que recibirá las notificaciones.

    Habilitar la API

  2. Tener permisos suficientes en el proyecto que recibirá las notificaciones:

    • Si eres el propietario del proyecto que recibirá las notificaciones, lo más probable es que tengas el permiso necesario.

    • Si tienes previsto crear temas para recibir notificaciones, debes tener permisos de pubsub.topics.create.

    • Tanto si tienes pensado usar temas nuevos como si vas a usar temas que ya tengas, debes tener los permisos pubsub.topics.getIamPolicy y pubsub.topics.setIamPolicy. Si creas un tema, normalmente ya tienes permiso para él. El siguiente rol de gestión de identidades y accesos predefinido tiene los permisos pubsub.topics.getIamPolicy y pubsub.topics.setIamPolicy: pubsub.admin. Para obtener más información, consulta el artículo Control de acceso de Pub/Sub.

  3. Tener un tema de Pub/Sub al que quieras enviar notificaciones.

Formato de las notificaciones

Las notificaciones enviadas al tema de Pub/Sub constan de dos partes:

  • Atributos: un conjunto de pares clave/valor que describen el evento.
  • Carga útil: cadena que contiene los metadatos del objeto modificado.

Atributos

Los atributos son pares clave-valor que se incluyen en todas las notificaciones que envía BigQuery Data Transfer Service a tu tema de Pub/Sub. Las notificaciones siempre contienen el siguiente conjunto de pares clave-valor, independientemente de la carga útil de la notificación:

Nombre del atributo Ejemplo Descripción
eventType TRANSFER_RUN_FINISHED El tipo de evento que acaba de producirse TRANSFER_RUN_FINISHED es el único valor posible.
payloadFormat JSON_API_V1 El formato de la carga útil del objeto. JSON_API_V1 es el único valor posible.

Carga útil

La carga útil es una cadena que contiene los metadatos de la ejecución de la transferencia. El tipo de carga útil no se puede configurar en este momento y se proporciona para adaptarse a los futuros cambios en la versión de la API.

Tipo de carga útil Descripción
JSON_API_V1 La carga útil será una cadena serializada en JSON UTF-8 que contenga la representación de recurso de un TransferRun.

Notificaciones por correo electrónico

Las notificaciones por correo electrónico envían mensajes legibles por humanos cuando falla una ejecución de transferencia. Estos mensajes se envían al correo del administrador de la transferencia, es decir, la cuenta que configuró la transferencia. No puedes configurar el contenido del mensaje ni el destinatario.

Si has usado una cuenta de servicio para autenticar una configuración de transferencia, es posible que no tengas acceso al correo para recibir notificaciones sobre las ejecuciones de la transferencia. En estos casos, te recomendamos que configures las notificaciones de Pub/Sub para recibir notificaciones de las ejecuciones de transferencias.

Si quieres enviar notificaciones por correo electrónico de las transferencias a más usuarios, configura reglas de reenvío de correo para distribuir los mensajes. Si usas Gmail, puedes reenviar mensajes de Gmail automáticamente a otra cuenta.

BigQuery Data Transfer Service envía la notificación por correo electrónico, que contiene detalles sobre la configuración de la transferencia, la ejecución de la transferencia y un enlace al historial de ejecuciones de la ejecución fallida. Por ejemplo:

From: bigquery-data-transfer-service-noreply@google.com
To: TRANSFER_ADMIN
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.

Activar o editar notificaciones

Para activar las notificaciones o editar una que ya tengas, elige una de las siguientes opciones:

Consola

  1. Ve a la página de BigQuery en la Google Cloud consola.

    Ir a la página de BigQuery

  2. En el menú de navegación, haga clic en Transferencias de datos.

  3. Para activar las notificaciones de una nueva transferencia, haz clic en Crear transferencia. Para ajustar las notificaciones de una transferencia, haz clic en el nombre de la transferencia y, a continuación, en Editar.

  4. En la sección Opciones de notificación, haz clic en los interruptores situados junto a los tipos de notificación que quieras habilitar.

    • Notificaciones por correo electrónico: si habilitas esta opción, el administrador de la transferencia recibirá una notificación por correo cuando falle una ejecución de transferencia.
    • Notificaciones Pub/Sub: si habilitas esta opción, elige el nombre de tu tema o haz clic en Crear un tema. Esta opción configura las notificaciones de Pub/Sub sobre la transferencia.

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

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

Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

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}'")

Precios de las notificaciones de ejecución

Si configura las notificaciones de Pub/Sub sobre la transferencia, se le cobrarán cargos de Pub/Sub. Para obtener más información, consulta la página Precios de Pub/Sub.

Siguientes pasos