Crea suscripciones a BigQuery

En este documento, se describe cómo crear una suscripción a BigQuery. Puedes usar la consola de Google Cloud, Google Cloud CLI, la biblioteca cliente o la API de Pub/Sub para crear una suscripción a BigQuery.

Antes de comenzar

Antes de leer este documento, asegúrate de estar familiarizado con lo siguiente:

Además de estar familiarizado con Pub/Sub y BigQuery, asegúrate de cumplir con los siguientes requisitos previos antes de crear una suscripción a BigQuery:

  • Existe una tabla de BigQuery. Como alternativa, puedes crear una cuando crees la suscripción a BigQuery como se describe en las secciones posteriores de este documento.

  • Compatibilidad entre el esquema del tema de Pub/Sub y la tabla de BigQuery. Si agregas una tabla de BigQuery no compatible, recibirás un mensaje de error relacionado con la compatibilidad. Para obtener más información, consulta Compatibilidad con esquemas.

Roles y permisos requeridos

La siguiente es una lista de lineamientos sobre funciones y permisos:

  • Para crear una suscripción, debes configurar el control de acceso a nivel del proyecto.

  • También necesitas permisos a nivel de recursos si tus suscripciones y temas están en proyectos diferentes, como se explica más adelante en esta sección.

  • Si quieres crear una suscripción a BigQuery, la cuenta de servicio de Pub/Sub debe tener permiso para escribir en la tabla de BigQuery específica. Para obtener más información sobre cómo otorgar estos permisos, consulta la siguiente sección de este documento.

  • Puedes configurar una suscripción a BigQuery en un proyecto para escribir en una tabla de BigQuery de un proyecto diferente.

Si quieres obtener los permisos que necesitas para crear suscripciones a BigQuery, pídele a tu administrador que te otorgue el rol de IAM Editor de Pub/Sub (roles/pubsub.editor) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para crear suscripciones a BigQuery. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear suscripciones a BigQuery:

  • Extraer de una suscripción: pubsub.subscriptions.consume
  • Crea una suscripción: pubsub.subscriptions.create
  • Borrar una suscripción: pubsub.subscriptions.delete
  • Obtener una suscripción: pubsub.subscriptions.get
  • Muestra una suscripción: pubsub.subscriptions.list
  • Actualiza una suscripción: pubsub.subscriptions.update
  • Adjuntar una suscripción a un tema: pubsub.topics.attachSubscription
  • Obtén la política de IAM de una suscripción: pubsub.subscriptions.getIamPolicy
  • Configura la política de IAM para una suscripción: pubsub.subscriptions.setIamPolicy

Es posible que también puedas obtener estos permisos con funciones personalizadas o con otras funciones predefinidas.

Si necesitas crear suscripciones de BigQuery en un proyecto que estén asociados con un tema de otro proyecto, pídele al administrador de temas que también te otorgue el rol de IAM (roles/pubsub.editor) del editor de Pub/Sub en el tema.

Asigna roles de BigQuery a la cuenta de servicio de Pub/Sub

Algunos servicios de Google Cloud tienen cuentas de servicio administradas por Google Cloud que permiten que los servicios accedan a tus recursos. Estas cuentas de servicio se conocen como agentes de servicio. Pub/Sub crea y mantiene una cuenta de servicio para cada proyecto en el formato service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com.

Para crear una suscripción a BigQuery, la cuenta de servicio de Pub/Sub debe tener permiso para escribir en la tabla específica de BigQuery y leer los metadatos de la tabla.

Otorga la función de editor de datos de BigQuery (roles/bigquery.dataEditor) a la cuenta de servicio de Pub/Sub.

  1. En la consola de Google Cloud, ve a la página IAM.

    Ir a IAM

  2. Haz clic en Otorgar acceso.

  3. En la sección Agregar principales, ingresa el nombre de tu cuenta de servicio de Pub/Sub. El formato de la cuenta de servicio es service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com. Por ejemplo, para un proyecto con project-number=112233445566, la cuenta de servicio tiene el formato service-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com.

  4. En la sección Asignar roles, haz clic en Agregar otro rol.

  5. En el menú desplegable Selecciona un rol, ingresa BigQuery y selecciona el rol de editor de datos de BigQuery.

  6. Haz clic en Guardar.

Si deseas obtener más información sobre IAM de BigQuery, consulta Funciones y permisos de BigQuery.

Propiedades de suscripción a BigQuery

Cuando configuras una suscripción a BigQuery, puedes especificar las siguientes propiedades.

Propiedades comunes

Obtén información sobre las propiedades de suscripción comunes que puedes configurar en todas las suscripciones.

Usar el esquema de tema

Esta opción permite que Pub/Sub use el esquema del tema de Pub/Sub al que se adjunta la suscripción. Además, Pub/Sub escribe los campos de los mensajes en las columnas correspondientes de la tabla de BigQuery.

Cuando utilice esta opción, recuerde verificar los siguientes requisitos adicionales:

  • Los campos del esquema de tema y el esquema de BigQuery deben tener los mismos nombres y sus tipos deben ser compatibles entre sí.

  • Cualquier campo opcional en el esquema de tema también debe ser opcional en el esquema de BigQuery.

  • No es necesario que los campos obligatorios en el esquema de tema sean obligatorios en el esquema de BigQuery.

  • Si hay campos de BigQuery que no están presentes en el esquema del tema, estos campos de BigQuery deben estar en modo NULLABLE.

  • Si el esquema de tema tiene campos adicionales que no están presentes en el esquema de BigQuery y estos campos se pueden descartar, selecciona la opción Descartar campos desconocidos.

  • Puedes seleccionar solo una de las propiedades de suscripción, Use topic schema o Use table schema.

Si no seleccionas la opción Usar el esquema de tema o Usar el esquema de la tabla, asegúrate de que la tabla de BigQuery tenga una columna llamada data de tipo BYTES, STRING o JSON. Pub/Sub escribe el mensaje en esta columna de BigQuery.

Es posible que no veas que los cambios en el esquema de temas de Pub/Sub o en el esquema de la tabla de BigQuery se apliquen de inmediato con los mensajes escritos en la tabla de BigQuery. Por ejemplo, si la opción Descartar campos desconocidos está habilitada y un campo está presente en el esquema de Pub/Sub, pero no en el esquema de BigQuery, es posible que los mensajes escritos en la tabla de BigQuery aún no contengan el campo después de agregarlo al esquema de BigQuery. Finalmente, los esquemas se sincronizan y los mensajes posteriores incluyen el campo.

Cuando usas la opción Usar el esquema de tema para tu suscripción a BigQuery, también puedes aprovechar la captura de datos modificados (CDC) de BigQuery. La CDC actualiza las tablas de BigQuery a través del procesamiento y la aplicación de cambios en las filas existentes.

Si deseas obtener más información sobre esta función, consulta Cómo transmitir actualizaciones de tablas con la captura de datos modificados.

Para aprender a usar esta función con las suscripciones a BigQuery, consulta Captura de datos modificados de BigQuery.

Usar el esquema de tabla

Esta opción permite que Pub/Sub use el esquema de la tabla de BigQuery para escribir los campos de un mensaje JSON en las columnas correspondientes. Cuando uses esta opción, recuerda verificar los siguientes requisitos adicionales:

  • Los mensajes publicados deben estar en formato JSON.

  • Si el tema de la suscripción tiene un esquema asociado, la propiedad de codificación de mensajes debe establecerse en JSON.

  • Si hay campos de BigQuery que no están presentes en los mensajes, estos campos de BigQuery deben estar en modo NULLABLE.

  • Si los mensajes tienen campos adicionales que no están presentes en el esquema de BigQuery y estos campos se pueden descartar, selecciona la opción Descartar campos desconocidos.

  • En el mensaje JSON, los valores DATE, DATETIME, TIME y TIMESTAMP deben ser números enteros que cumplan con las representaciones admitidas.

  • En el mensaje JSON, los valores NUMERIC y BIGNUMERIC deben ser bytes codificados con BigDecimalByteStringEncoder.

  • Puedes seleccionar solo una de las propiedades de suscripción, Use topic schema o Use table schema.

Si no seleccionas la opción Usar el esquema de tema o Usar el esquema de la tabla, asegúrate de que la tabla de BigQuery tenga una columna llamada data de tipo BYTES, STRING o JSON. Pub/Sub escribe el mensaje en esta columna de BigQuery.

Es posible que no veas que los cambios en el esquema de la tabla de BigQuery se apliquen de inmediato con los mensajes escritos en la tabla de BigQuery. Por ejemplo, si la opción Descartar campos desconocidos está habilitada y un campo está presente en los mensajes, pero no en el esquema de BigQuery, es posible que los mensajes escritos en la tabla de BigQuery aún no contengan el campo después de agregarlo al esquema de BigQuery. Finalmente, el esquema se sincroniza, y los mensajes posteriores incluyen el campo.

Cuando usas la opción Usar el esquema de tabla para tu suscripción a BigQuery, también puedes aprovechar la captura de datos modificados (CDC) de BigQuery. La CDC actualiza las tablas de BigQuery a través del procesamiento y la aplicación de cambios en las filas existentes.

Si deseas obtener más información sobre esta función, consulta Cómo transmitir actualizaciones de tablas con la captura de datos modificados.

Para obtener información sobre cómo usar esta función con las suscripciones a BigQuery, consulta Captura de datos modificados de BigQuery.

Quitar campos desconocidos

Esta opción se usa con las opciones Usar el esquema de tema o Usar el esquema de la tabla. Esta opción permite que Pub/Sub descarte cualquier campo que esté presente en el esquema del tema o el mensaje, pero no en el esquema de BigQuery. Si la opción Descartar campos desconocidos está configurada, los mensajes con campos adicionales no se escriben en BigQuery y permanecen en las tareas pendientes de la suscripción. La suscripción termina en un estado de error.

Escribir metadatos

Esta opción permite que Pub/Sub escriba los metadatos de cada mensaje en columnas adicionales en la tabla de BigQuery. De lo contrario, los metadatos no se escriben en la tabla de BigQuery.

Si seleccionas la opción Escribir metadatos, asegúrate de que la tabla de BigQuery tenga los campos descritos en la siguiente tabla.

Si no seleccionas la opción Escribir metadatos, la tabla de destino de BigQuery solo requiere el campo data, a menos que use_topic_schema sea verdadero. Si seleccionas las opciones Escribir metadatos y Usar esquema de tema, el esquema del tema no debe contener ningún campo con nombres que coincidan con los de los parámetros de metadatos. Esta limitación incluye versiones de estos parámetros en formato camelCase.

Parámetros
subscription_name

STRING

Es el nombre de una suscripción.

message_id

STRING

ID de un mensaje

publish_time

TIMESTAMP

Es la hora de publicación de un mensaje.

data

BYTES, STRING o JSON

El cuerpo del mensaje.

El campo data es obligatorio para todas las tablas de destino de BigQuery que no seleccionan Usar el esquema de tema. Si el campo es de tipo JSON, el cuerpo del mensaje debe ser JSON válido.

attributes

STRING o JSON

Un objeto JSON que contiene todos los atributos de mensaje. También contiene campos adicionales que forman parte del mensaje de Pub/Sub, incluida la clave de ordenamiento, si está presente.

Crea una suscripción a BigQuery

En los siguientes ejemplos, se muestra cómo crear una suscripción con la entrega de BigQuery.

Console

  1. En la consola de Google Cloud, ve a la página Suscripciones.

    Ir a Suscripciones

  2. Haz clic en Crear suscripción.
  3. En el campo ID de la suscripción, ingresa un nombre.

    Si quieres obtener información para asignarle un nombre a una suscripción, consulta Lineamientos para asignar el nombre de un tema o una suscripción.

  4. Elige o crea un tema desde el menú desplegable. La suscripción recibe mensajes del tema.
  5. En Tipo de entrega, selecciona Escribir en BigQuery.
  6. Selecciona el proyecto para la tabla de BigQuery.
  7. Selecciona un conjunto de datos existente o crea uno nuevo.

    Para obtener información sobre cómo crear un conjunto de datos, consulta Crea conjuntos de datos.

  8. Selecciona una tabla existente o crea una nueva.

    Si deseas obtener información sobre cómo crear una tabla, consulta Crea tablas.

  9. Te recomendamos que habilites los mensajes no entregados para controlar los errores de los mensajes.

    Para obtener más información, consulta Tema de mensajes no entregados.

  10. Haz clic en Crear.

También puedes crear una suscripción en la página Temas. Este acceso directo es útil para asociar temas a suscripciones.

  1. En la consola de Google Cloud, ve a la página Temas.

    Ir a Temas

  2. Haz clic en junto al tema para el que quieres crear una suscripción.
  3. En el menú contextual, selecciona Crear suscripción (Create subscription).
  4. En Tipo de entrega, selecciona Escribir en BigQuery.
  5. Selecciona el proyecto para la tabla de BigQuery.
  6. Selecciona un conjunto de datos existente o crea uno nuevo.

    Para obtener información sobre cómo crear un conjunto de datos, consulta Crea conjuntos de datos.

  7. Selecciona una tabla existente o crea una nueva.

    Para obtener información sobre cómo crear un conjunto de datos, consulta Crea tablas.

  8. Te recomendamos que habilites los mensajes no entregados para controlar los errores de los mensajes.

    Para obtener más información, consulta Tema de mensajes no entregados.

  9. Haz clic en Crear.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Para crear una suscripción de Pub/Sub, usa el comando gcloud pubsub subscriptions create:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --bigquery-table=PROJECT_ID:DATASET_ID.TABLE_ID

    Reemplaza lo siguiente:

    • SUBSCRIPTION_ID: Especifica el ID de la suscripción.
    • TOPIC_ID: Especifica el ID del tema. El tema requiere un esquema.
    • PROJECT_ID: Especifica el ID del proyecto.
    • DATASET_ID: Especifica el ID de un conjunto de datos existente. Para crear un conjunto de datos, consulta Crea conjuntos de datos.
    • TABLE_ID: Especifica el ID de una tabla existente. La tabla requiere un campo data si tu tema no tiene un esquema. Para crear una tabla, consulta Crea una tabla vacía con una definición de esquema.

C++

Antes de probar esta muestra, sigue las instrucciones de configuración de C++ que se encuentran en la guía de inicio rápido de Pub/Sub con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub C++.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

namespace pubsub = ::google::cloud::pubsub;
namespace pubsub_admin = ::google::cloud::pubsub_admin;
[](pubsub_admin::SubscriptionAdminClient client,
   std::string const& project_id, std::string const& topic_id,
   std::string const& subscription_id, std::string const& table_id) {
  google::pubsub::v1::Subscription request;
  request.set_name(
      pubsub::Subscription(project_id, subscription_id).FullName());
  request.set_topic(pubsub::Topic(project_id, topic_id).FullName());
  request.mutable_bigquery_config()->set_table(table_id);
  auto sub = client.CreateSubscription(request);
  if (!sub) {
    if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
      std::cout << "The subscription already exists\n";
      return;
    }
    throw std::move(sub).status();
  }

  std::cout << "The subscription was successfully created: "
            << sub->DebugString() << "\n";
}

C#

Antes de probar esta muestra, sigue las instrucciones de configuración de C# que se encuentran en la guía de inicio rápido de Pub/Sub con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub C#.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


using Google.Cloud.PubSub.V1;

public class CreateBigQuerySubscriptionSample
{
    public Subscription CreateBigQuerySubscription(string projectId, string topicId, string subscriptionId, string bigqueryTableId)
    {
        SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
        TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
        SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);

        var subscriptionRequest = new Subscription
        {
            SubscriptionName = subscriptionName,
            TopicAsTopicName = topicName,
            BigqueryConfig = new BigQueryConfig
            {
                Table = bigqueryTableId
            }
        };
        var subscription = subscriber.CreateSubscription(subscriptionRequest);
        return subscription;
    }
}

Go

Antes de probar esta muestra, sigue las instrucciones de configuración de Go que se encuentran en la guía de inicio rápido de Pub/Sub con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub Go.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsub"
)

// createBigQuerySubscription creates a Pub/Sub subscription that exports messages to BigQuery.
func createBigQuerySubscription(w io.Writer, projectID, subID string, topic *pubsub.Topic, table string) error {
	// projectID := "my-project-id"
	// subID := "my-sub"
	// topic of type https://godoc.org/cloud.google.com/go/pubsub#Topic
	// table := "my-project-id.dataset_id.table_id"
	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %w", err)
	}
	defer client.Close()

	sub, err := client.CreateSubscription(ctx, subID, pubsub.SubscriptionConfig{
		Topic: topic,
		BigQueryConfig: pubsub.BigQueryConfig{
			Table:         table,
			WriteMetadata: true,
		},
	})
	if err != nil {
		return fmt.Errorf("client.CreateSubscription: %w", err)
	}
	fmt.Fprintf(w, "Created BigQuery subscription: %v\n", sub)

	return nil
}

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en la guía de inicio rápido de Pub/Sub con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub Java.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
import com.google.pubsub.v1.BigQueryConfig;
import com.google.pubsub.v1.ProjectSubscriptionName;
import com.google.pubsub.v1.ProjectTopicName;
import com.google.pubsub.v1.Subscription;
import java.io.IOException;

public class CreateBigQuerySubscriptionExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String topicId = "your-topic-id";
    String subscriptionId = "your-subscription-id";
    String bigqueryTableId = "your-project.your-dataset.your-table";

    createBigQuerySubscription(projectId, topicId, subscriptionId, bigqueryTableId);
  }

  public static void createBigQuerySubscription(
      String projectId, String topicId, String subscriptionId, String bigqueryTableId)
      throws IOException {
    try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {

      ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
      ProjectSubscriptionName subscriptionName =
          ProjectSubscriptionName.of(projectId, subscriptionId);

      BigQueryConfig bigqueryConfig =
          BigQueryConfig.newBuilder().setTable(bigqueryTableId).setWriteMetadata(true).build();

      Subscription subscription =
          subscriptionAdminClient.createSubscription(
              Subscription.newBuilder()
                  .setName(subscriptionName.toString())
                  .setTopic(topicName.toString())
                  .setBigqueryConfig(bigqueryConfig)
                  .build());

      System.out.println("Created a BigQuery subscription: " + subscription.getAllFields());
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
// const bigqueryTableId = 'YOUR_TABLE_ID';

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function createBigQuerySubscription(
  topicNameOrId,
  subscriptionNameOrId,
  bigqueryTableId
) {
  const options = {
    bigqueryConfig: {
      table: bigqueryTableId,
      writeMetadata: true,
    },
  };

  await pubSubClient
    .topic(topicNameOrId)
    .createSubscription(subscriptionNameOrId, options);

  console.log(`Subscription ${subscriptionNameOrId} created.`);
}

Node.js

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
// const bigqueryTableId = 'YOUR_TABLE_ID';

// Imports the Google Cloud client library
import {PubSub, CreateSubscriptionOptions} from '@google-cloud/pubsub';

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function createBigQuerySubscription(
  topicNameOrId: string,
  subscriptionNameOrId: string,
  bigqueryTableId: string
) {
  const options: CreateSubscriptionOptions = {
    bigqueryConfig: {
      table: bigqueryTableId,
      writeMetadata: true,
    },
  };

  await pubSubClient
    .topic(topicNameOrId)
    .createSubscription(subscriptionNameOrId, options);

  console.log(`Subscription ${subscriptionNameOrId} created.`);
}

PHP

Antes de probar esta muestra, sigue las instrucciones de configuración de PHP que se encuentran en la guía de inicio rápido de Pub/Sub con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub PHP.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

use Google\Cloud\PubSub\PubSubClient;
use Google\Cloud\PubSub\V1\BigQueryConfig;

/**
 * Creates a Pub/Sub BigQuery subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 * @param string $table      The BigQuery table to which to write.
 */
function create_bigquery_subscription($projectId, $topicName, $subscriptionName, $table)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $subscription = $topic->subscription($subscriptionName);
    $config = new BigQueryConfig(['table' => $table]);
    $subscription->create([
        'bigqueryConfig' => $config
    ]);

    printf('Subscription created: %s' . PHP_EOL, $subscription->name());
}

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se encuentran en la guía de inicio rápido de Pub/Sub con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub Python.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.cloud import pubsub_v1

# TODO(developer)
# project_id = "your-project-id"
# topic_id = "your-topic-id"
# subscription_id = "your-subscription-id"
# bigquery_table_id = "your-project.your-dataset.your-table"

publisher = pubsub_v1.PublisherClient()
subscriber = pubsub_v1.SubscriberClient()
topic_path = publisher.topic_path(project_id, topic_id)
subscription_path = subscriber.subscription_path(project_id, subscription_id)

bigquery_config = pubsub_v1.types.BigQueryConfig(
    table=bigquery_table_id, write_metadata=True
)

# Wrap the subscriber in a 'with' block to automatically call close() to
# close the underlying gRPC channel when done.
with subscriber:
    subscription = subscriber.create_subscription(
        request={
            "name": subscription_path,
            "topic": topic_path,
            "bigquery_config": bigquery_config,
        }
    )

print(f"BigQuery subscription created: {subscription}.")
print(f"Table for subscription is: {bigquery_table_id}")

Ruby

Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby que se encuentran en la guía de inicio rápido de Pub/Sub con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub Ruby.

Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

require "google/cloud/pubsub"

##
# Shows how to create a BigQuery subscription where messages published
# to a topic populates a BigQuery table.
#
# @param project_id [String]
# Your Google Cloud project (e.g. "my-project")
# @param topic_id [String]
# Your topic name (e.g. "my-secret")
# @param subscription_id [String]
# ID for new subscription to be created (e.g. "my-subscription")
# @param bigquery_table_id [String]
# ID of bigquery table (e.g "my-project:dataset-id.table-id")
#
def pubsub_create_bigquery_subscription project_id:, topic_id:, subscription_id:, bigquery_table_id:
  pubsub = Google::Cloud::Pubsub.new project_id: project_id
  topic = pubsub.topic topic_id
  subscription = topic.subscribe subscription_id,
                                 bigquery_config: {
                                   table: bigquery_table_id,
                                   write_metadata: true
                                 }
  puts "BigQuery subscription created: #{subscription_id}."
  puts "Table for subscription is: #{bigquery_table_id}"
end

¿Qué sigue?