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
:
- Utilizador do BigQuery (
roles/bigquery.user
) - Utilizador de tarefas do BigQuery (
roles/bigquery.jobUser
) - Administrador do BigQuery (
roles/bigquery.admin
)
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
:
- Visualizador de dados do BigQuery (
roles/bigquery.dataViewer
) - Editor de dados do BigQuery (
roles/bigquery.dataEditor
) - Proprietário dos dados do BigQuery (
roles/bigquery.dataOwner
) - Administrador do BigQuery (
roles/bigquery.admin
)
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.
Exporte para o Pub/Sub
Use a declaração
EXPORT DATA
para exportar dados para um tópico do Pub/Sub:
Consola
Na Trusted Cloud consola, aceda à página BigQuery.
No editor de consultas, clique em Mais > Definições da consulta.
Na secção Consulta contínua, selecione a caixa de verificação Usar modo de consulta contínua.
Na caixa Conta de serviço, selecione a conta de serviço que criou.
Clique em Guardar.
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çãoAPPENDS
na cláusulaFROM
de uma consulta contínua para especificar o momento em que deve começar a processar dados.
Clique em Executar.
bq
-
In the Trusted Cloud console, activate Cloud Shell.
Na linha de comandos, execute a consulta contínua através do comando
bq query
com os seguintes sinalizadores:- Defina o sinalizador
--continuous
comotrue
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çãoAPPENDS
na cláusulaFROM
de uma consulta contínua para especificar o momento em que deve começar a processar dados.
- Defina o sinalizador
Execute a consulta contínua chamando o método
jobs.insert
. Defina os seguintes campos no recursoJobConfigurationQuery
do recursoJob
que transmite:- Defina o campo
continuous
comotrue
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çãoAPPENDS
na cláusulaFROM
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.
- Defina o campo
API
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
ouBYTES
. 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 valoresNULL
. Pode excluir registosNULL
dos resultados da consulta incluindo um filtroWHERE 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.