Exporta datos a Pub/Sub (ETL inverso)
En este documento, se describe cómo configurar una extracción, transformación y carga
(RETL) inversa
de BigQuery a Pub/Sub.
Puedes hacerlo con la
sentencia EXPORT DATA
en una consulta continua para
exportar datos de BigQuery a un
ema de Pub/Sub.
Puedes usar un flujo de trabajo de RETL en Pub/Sub para combinar las capacidades de estadísticas de BigQuery con el servicio de mensajería global asíncrono y escalable de Pub/Sub. Este flujo de trabajo te permite entregar datos a aplicaciones y servicios descendentes de manera controlada por eventos.
Requisitos previos
Debes crear una cuenta de servicio. Se requiere una cuenta de servicio para ejecutar una consulta continua que exporte resultados a un tema de Pub/Sub.
Debes crear un tema de Pub/Sub para recibir los resultados de consultas continuas como mensajes y una suscripción de Pub/Sub que la aplicación de destino puede usar para recibir esos mensajes.
Roles obligatorios
En esta sección, se proporciona información sobre los roles y permisos que requiere la cuenta de usuario que crea la consulta continua y la cuenta de servicio que ejecuta la consulta continua.
Permisos de la cuenta de usuario
Para crear un trabajo en BigQuery, la cuenta de usuario debe tener el permiso
bigquery.jobs.create
de IAM. Cada uno de los siguientes
roles de IAM otorga el permiso bigquery.jobs.create
:
- Usuario de BigQuery (
roles/bigquery.user
) - Usuario de trabajo de BigQuery (
roles/bigquery.jobUser
) - Administrador de BigQuery (
roles/bigquery.admin
)
Para enviar un trabajo que se ejecute con una cuenta de servicio, la cuenta de usuario debe tener el
rol de usuario de la cuenta de servicio (roles/iam.serviceAccountUser
). Si usas la misma cuenta de usuario para crear la cuenta de servicio,
la cuenta de usuario debe tener el rol de
administrador de cuentas de servicio (roles/iam.serviceAccountAdmin
). Para obtener información sobre cómo limitar el acceso de un usuario a una sola cuenta de servicio,
en lugar de a todas las cuentas de servicio de un proyecto,
consulta Otorga un solo rol.
Si la cuenta de usuario debe habilitar las APIs necesarias para tu
caso de uso de la consulta continua, la cuenta de usuario debe tener el rol de
administrador de Service Usage (roles/serviceusage.serviceUsageAdmin
).
Permisos de las cuentas de servicio
Para exportar datos de una tabla de BigQuery, la cuenta de servicio debe
tener el permiso bigquery.tables.export
de IAM. Cada uno de los
siguientes roles de IAM otorga el permiso
bigquery.tables.export
:
- Visualizador de datos de BigQuery (
roles/bigquery.dataViewer
) - Editor de datos de BigQuery (
roles/bigquery.dataEditor
) - Propietario de datos de BigQuery (
roles/bigquery.dataOwner
) - Administrador de BigQuery (
roles/bigquery.admin
)
Para que la cuenta de servicio acceda a Pub/Sub, debes otorgar a la cuenta de servicio los siguientes roles de IAM:
También puedes obtener los permisos necesarios a través de roles personalizados.
Antes de comenzar
Enable the BigQuery and Pub/Sub APIs.
Exporta a Pub/Sub
Usa la
sentencia EXPORT DATA
para exportar datos a un tema de Pub/Sub:
Console
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, haz clic en Más > Configuración de consulta.
En la sección Consulta continua, selecciona la casilla de verificación Usar modo de consulta continua.
En el cuadro Cuenta de servicio, selecciona la cuenta de servicio que creaste.
Haz clic en Guardar.
En el editor de consultas, ingresa la siguiente sentencia:
EXPORT DATA OPTIONS ( format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID' ) AS ( QUERY );
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoTOPIC_ID
: Es el ID del tema de Pub/Sub. Puedes obtener el ID del tema desde la página Temas de la consola de Google Cloud.QUERY
: Es la instrucción de SQL que se seleccionará los datos que se exportarán. La instrucción de SQL solo debe contener operaciones compatibles.
Haz clic en Ejecutar.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
En la línea de comandos, ejecuta la consulta continua con el comando
bq query
con las siguientes marcas:- Establece la marca
--continuous
entrue
para que la consulta sea continua. - Usa la marca
--connection_property
para especificar una cuenta de servicio para 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);'
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoSERVICE_ACCOUNT_EMAIL
: Es el correo electrónico de la cuenta de servicio. Puedes obtener el correo electrónico de la cuenta de servicio en la página Cuentas de servicio de la consola de Google Cloud.QUERY
: Es la instrucción de SQL que se seleccionará los datos que se exportarán. La instrucción de SQL solo debe contener operaciones compatibles.
- Establece la marca
API
Ejecuta la consulta continua con una llamada al método
jobs.insert
. Configura los siguientes campos en el recursoJobConfigurationQuery
del recursoJob
que pasas:- Establece el campo
continuous
entrue
para que la consulta sea continua. - Usa el campo
connection_property
para especificar la cuenta de servicio que se 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
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoQUERY
: Es la instrucción de SQL que se seleccionará los datos que se exportarán. La instrucción de SQL solo debe contener operaciones compatibles.SERVICE_ACCOUNT_EMAIL
: Es el correo electrónico de la cuenta de servicio. Puedes obtener el correo electrónico de la cuenta de servicio en la página Cuentas de servicio de la consola de Google Cloud.
- Establece el campo
Exporta varias columnas a Pub/Sub
Si quieres incluir varias columnas en el resultado, puedes crear una columna struct
para que contenga los valores de la columna y, luego, convertir el valor de struct
en una string JSON a través de la función TO_JSON_STRING
.
En el siguiente ejemplo, se exportan datos de cuatro columnas, con formato como una 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 `myproject.real_time_taxi_streaming.taxi_rides` WHERE ride_status = 'enroute' );
Optimización de exportaciones
Si el rendimiento de tu trabajo de consulta continua parece estar limitado por
recursos de procesamiento disponibles,
intenta aumentar el tamaño de tu
Asignación de reserva de ranuras de CONTINUOUS
de BigQuery.
Limitaciones
- Los datos exportados deben constar de una sola columna
STRING
o columnaBYTES
. El nombre de la columna puede ser el que elijas. - Debes usar una consulta continua para exportar a Pub/Sub.
- No puedes pasar un esquema a un tema de Pub/Sub en la consulta continua.
- No puedes exportar datos a un tema de Pub/Sub que use un esquema.
- No puedes exportar datos que contengan valores
NULL
. Puedes excluir los valoresNULL
de los resultados de la consulta si incluyes un filtroWHERE message IS NOT NULL
en la consulta continua. - Los datos exportados no deben exceder las cuotas de Pub/Sub.
Precios
Cuando exportas datos en una consulta continua, se te factura a través los
precios de procesamiento de capacidad de BigQuery.
Para ejecutar consultas continuas, debes tener una
reserva que use la
Edición Enterprise o Enterprise Plus,
y una asignación de reserva
que usa el tipo de trabajo CONTINUOUS
.
Una vez que se exportan los datos, se te cobra por usar Pub/Sub. Para obtener más información, consulta Precios de Pub/Sub.