Exporte dados para o Pub/Sub (ETL inverso)

A exportação de dados para o Pub/Sub requer a utilização de consultas contínuas do BigQuery.

Este documento descreve como pode configurar a extração, a transformação e o carregamento inversos (RETL) do BigQuery para o Pub/Sub. Pode fazê-lo usando a declaração EXPORT DATA numa consulta contínua para exportar dados do BigQuery para um tópico do Pub/Sub.

Pode usar um fluxo de trabalho RETL para o Pub/Sub para combinar as capacidades de análise do BigQuery com o serviço de mensagens global assíncrono e escalável do Pub/Sub. Este fluxo de trabalho permite-lhe fornecer dados a aplicações e serviços a jusante de forma orientada por eventos.

Pré-requisitos

Tem de criar uma conta de serviço. É necessária uma conta de serviço para executar uma consulta contínua que exporte resultados para um tópico do Pub/Sub.

Tem de criar um tópico do Pub/Sub para receber os resultados da consulta contínua como mensagens e uma subscrição do Pub/Sub que a aplicação de destino possa usar para receber essas mensagens.

Funções necessárias

Esta secção fornece informações sobre as funções e as autorizações necessárias para a conta de utilizador que cria a consulta contínua e a conta de serviço que executa a consulta contínua.

Autorizações da conta de utilizador

Para criar uma tarefa no BigQuery, a conta de utilizador tem de ter a autorização de IAM bigquery.jobs.create. Cada uma das seguintes funções do IAM concede a autorização bigquery.jobs.create:

Para enviar uma tarefa que é executada através de uma conta de serviço, a conta de utilizador tem de ter a função Utilizador da conta de serviço (roles/iam.serviceAccountUser). Se estiver a usar a mesma conta de utilizador para criar a conta de serviço, a conta de utilizador tem de ter a função Administrador da conta de serviço (roles/iam.serviceAccountAdmin). Para obter informações sobre como limitar o acesso de um utilizador a uma única conta de serviço, em vez de a todas as contas de serviço num projeto, consulte o artigo Conceda uma única função.

Se a conta de utilizador tiver de ativar as APIs necessárias para o seu exemplo de utilização de consulta contínua, a conta de utilizador tem de ter a função Administrador de utilização de serviços (roles/serviceusage.serviceUsageAdmin).

Autorizações da conta de serviço

Para exportar dados de uma tabela do BigQuery, a conta de serviço tem de ter a autorização de IAM bigquery.tables.export. Cada uma das seguintes funções de IAM concede a autorização bigquery.tables.export:

Para que a conta de serviço aceda ao Pub/Sub, tem de conceder à conta de serviço as seguintes funções do IAM:

Também pode conseguir as autorizações necessárias através de funções personalizadas.

Antes de começar

Enable the BigQuery and Pub/Sub APIs.

Roles required to enable APIs

To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

Enable the APIs

Exporte para o Pub/Sub

Use a declaração EXPORT DATA para exportar dados para um tópico do Pub/Sub:

Consola

  1. Na Trusted Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, clique em Mais > Definições da consulta.

  3. Na secção Consulta contínua, selecione a caixa de verificação Usar modo de consulta contínua.

  4. Na caixa Conta de serviço, selecione a conta de serviço que criou.

  5. Clique em Guardar.

  6. No editor de consultas, introduza a seguinte declaração:

    EXPORT DATA
    OPTIONS (
    format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID'
    ) AS
    (
    QUERY
    );

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto.
    • TOPIC_ID: o ID do tópico do Pub/Sub. Pode obter o ID do tópico na página Tópicos da consola Trusted Cloud .
    • QUERY: a declaração SQL para selecionar os dados a exportar. A declaração SQL só pode conter operações suportadas. Tem de usar a função APPENDS na cláusula FROM de uma consulta contínua para especificar o momento em que deve começar a processar dados.
  7. Clique em Executar.

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. Na linha de comandos, execute a consulta contínua através do comando bq query com os seguintes sinalizadores:

    • Defina o sinalizador --continuous como true para tornar a consulta contínua.
    • Use a flag --connection_property para especificar uma conta de serviço a usar.
    bq query --project_id=PROJECT_ID --use_legacy_sql=false \
    --continuous=true --connection_property=service_account=SERVICE_ACCOUNT_EMAIL \
    'EXPORT DATA OPTIONS (format = "CLOUD_PUBSUB", uri = "https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID") AS (QUERY);'

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto.
    • SERVICE_ACCOUNT_EMAIL: o email da conta de serviço. Pode obter o email da conta de serviço na página Contas de serviço da Trusted Cloud consola.
    • QUERY: a declaração SQL para selecionar os dados a exportar. A declaração SQL só pode conter operações suportadas. Tem de usar a função APPENDS na cláusula FROM de uma consulta contínua para especificar o momento em que deve começar a processar dados.
  3. API

    1. Execute a consulta contínua chamando o método jobs.insert. Defina os seguintes campos no recurso JobConfigurationQuery do recurso Job que transmite:

      • Defina o campo continuous como true para tornar a consulta contínua.
      • Use o campo connection_property para especificar uma conta de serviço a usar.
      curl --request POST \
        'https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs'
        --header 'Authorization: Bearer $(gcloud auth print-access-token) \
        --header 'Accept: application/json' \
        --header 'Content-Type: application/json' \
        --data '("configuration":("query":"EXPORT DATA OPTIONS (format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID') AS (QUERY);","useLegacySql":false,"continuous":true,"connectionProperties":["key": "service_account","value":"SERVICE_ACCOUNT_EMAIL"]))' \
        --compressed

      Substitua o seguinte:

      • PROJECT_ID: o ID do seu projeto.
      • QUERY: a declaração SQL para selecionar os dados a exportar. A declaração SQL só pode conter operações suportadas. Tem de usar a função APPENDS na cláusula FROM de uma consulta contínua para especificar o momento em que deve começar a processar dados.
      • SERVICE_ACCOUNT_EMAIL: o email da conta de serviço. Pode obter o email da conta de serviço na página Contas de serviço da Trusted Cloud consola.

Exporte várias colunas para o Pub/Sub

Se quiser incluir várias colunas no resultado, pode criar uma coluna struct para conter os valores das colunas e, em seguida, converter o valor struct numa string JSON através da função TO_JSON_STRING. O exemplo seguinte exporta dados de quatro colunas, formatados como uma string JSON:

EXPORT DATA
  OPTIONS (
    format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides')
AS (
  SELECT
    TO_JSON_STRING(
      STRUCT(
        ride_id,
        timestamp,
        latitude,
        longitude)) AS message
  FROM
    APPENDS(TABLE `myproject.real_time_taxi_streaming.taxi_rides`,
      -- Configure the APPENDS TVF start_timestamp to specify when you want to
      -- start processing data using your continuous query.
      -- This example starts processing at 10 minutes before the current time.
      CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
  WHERE ride_status = 'enroute'
);

Otimização da exportação

Se o desempenho da tarefa de consulta contínua parecer estar limitado pelos recursos de computação disponíveis, experimente aumentar o tamanho da CONTINUOUS atribuição de reserva de slots do BigQuery.

Limitações

  • Os dados exportados têm de consistir numa única coluna STRING ou BYTES. O nome da coluna fica ao seu critério.
  • Tem de usar uma consulta contínua para exportar para o Pub/Sub.
  • Não pode transmitir um esquema a um tópico do Pub/Sub na consulta contínua.
  • Não pode exportar dados para um tópico do Pub/Sub que use um esquema.
  • Quando exporta para o Pub/Sub, pode exportar registos formatados em JSON em que alguns valores são NULL, mas não pode exportar registos que consistam apenas em valores NULL. Pode excluir registos NULL dos resultados da consulta incluindo um filtro WHERE message IS NOT NULL na consulta contínua.
  • Quando exporta dados para um tópico do Pub/Sub configurado com um ponto final de localização, o ponto final tem de ser configurado dentro do mesmo limite Trusted Cloud regional que o conjunto de dados do BigQuery que contém a tabela que está a consultar.
  • Os dados exportados não podem exceder as quotas do Pub/Sub.

Preços

Quando exporta dados numa consulta contínua, a faturação é feita através dos preços de computação de capacidade do BigQuery. Para executar consultas contínuas, tem de ter uma reserva que use a edição Enterprise ou Enterprise Plus e uma atribuição de reserva que use o tipo de tarefa CONTINUOUS.

Após a exportação dos dados, é-lhe cobrado o uso do Pub/Sub. Para mais informações, consulte os preços do Pub/Sub.