Exporta datos a AlloyDB (ETL inverso)
En este documento, se describe cómo configurar un flujo de trabajo inverso de extracción, transformación y carga (ETL inverso) de BigQuery a AlloyDB para PostgreSQL. Puedes
hacerlo mediante la
EXPORT DATA declaración.
Antes de comenzar
Crea un clúster y una instancia de AlloyDB , que incluyan una base de datos, un esquema y una tabla, para recibir los datos exportados. Debes tener el esquema y la tabla de destino antes de ejecutar el trabajo de exportación.
La instancia de AlloyDB de destino debe ser una instancia
PRIMARYen estadoREADY.Crea una conexión de BigQuery para conectarte a tu instancia de AlloyDB. La conexión debe autenticarse con un nombre de usuario y una contraseña. El usuario de la base de datos especificado en la conexión debe tener privilegios
INSERTen la tabla de destino yUSAGEen el esquema de destino.Crea una reservación de nivel Enterprise o Enterprise Plus de BigQuery.
Otorga roles de Identity and Access Management (IAM) que les brindan a los usuarios los permisos necesarios para realizar cada tarea de este documento.
Roles obligatorios
Para obtener los permisos que necesitas para exportar los datos de BigQuery a AlloyDB, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Exportar datos desde una tabla de BigQuery:
Visualizador de datos de BigQuery (
roles/bigquery.dataViewer) -
Ejecutar un trabajo de extracción:
Usuario de BigQuery (
roles/bigquery.user) -
Usar una conexión de BigQuery:
Usuario de conexión de BigQuery (
roles/bigquery.connectionUser) -
Conectarse a una instancia de AlloyDB:
Cliente de AlloyDB (
roles/alloydb.client) (la cuenta de servicio de conexión)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Limitaciones
Las exportaciones de AlloyDB solo admiten exportaciones por lotes. No puedes usar consultas continuas para exportar a AlloyDB.
Los datos exportados a AlloyDB se agregan exclusivamente como filas nuevas. El proceso de exportación no modifica ni borra los registros existentes en AlloyDB. Si la tabla de destino no tiene definidas las restricciones
PRIMARY KEYoUNIQUE, la exportación de los mismos datos varias veces generará entradas duplicadas.Para garantizar la integridad de los datos, te recomendamos que definas restricciones
PRIMARY KEYoUNIQUEen tus tablas de AlloyDB. Los trabajos de exportación no realizan "upserts", en los que se actualiza un registro existente si hay una clave coincidente única. Si alguna fila entrante infringe una restricciónPRIMARY KEYoUNIQUE, fallará todo el trabajo de exportación.No recomendamos ejecutar varios trabajos
EXPORT DATAsimultáneos en la misma tabla de AlloyDB. Si lo haces, puede provocar un comportamiento impredecible, como la pérdida de datos o fallas en los trabajos. Te recomendamos que verifiques que solo un trabajo de exportación escriba en una tabla específica a la vez.Solo se admite la autenticación con nombre de usuario y contraseña a través de una conexión de BigQuery.
No se admiten los tipos de datos
ARRAY,BYTES,GEOGRAPHY,INTERVALySTRUCTde BigQuery.Si la instrucción
SELECTde BigQuery omite columnas que existen en la tabla de AlloyDB de destino, esas columnas deben permitir valoresNULLo tener valores predeterminados definidos en AlloyDB. Si tienen una restricciónNOT NULLy no tienen un valor predeterminado, fallará la exportación.Las exportaciones a AlloyDB solo se admiten para las ediciones Enterprise o Enterprise Plus de BigQuery. No se admiten la edición Standard de BigQuery ni el procesamiento on demand. Para obtener más información, consulta Funciones de administración.
Un trabajo de BigQuery, como un trabajo de extracción a AlloyDB, tiene una duración máxima de 6 horas. Para exportaciones muy grandes, te recomendamos que las dividas en varios trabajos más pequeños.
Consideraciones de ubicación
La exportación de datos a AlloyDB tiene requisitos específicos en cuanto a la ubicación de tu conjunto de datos de BigQuery y tu instancia de AlloyDB:
Exportaciones a la misma región: La instancia de AlloyDB de destino debe residir en la misma región exacta que el conjunto de datos de BigQuery . Google Cloud Por ejemplo, un conjunto de datos en
us-east1solo se puede exportar a una instancia de AlloyDB enus-east1.Exportaciones multirregionales:
- Los conjuntos de datos en la multirregión
USsolo se pueden exportar a una instancia de AlloyDB ubicada en la regiónus-central1. - Los conjuntos de datos en la multirregión
EUsolo se pueden exportar a una instancia de AlloyDB ubicada en la regióneurope-west4.
- Los conjuntos de datos en la multirregión
No se admiten las exportaciones entre regiones que no sean las combinaciones mencionadas anteriormente.
Configura exportaciones con alloydb_options
Puedes usar la opción alloydb_options para especificar el esquema, la tabla y las conexiones máximas de AlloyDB de destino. La configuración se expresa como una cadena JSON. Solo se requiere el parámetro table. Todos los demás parámetros son opcionales.
Cuando configures la exportación, las columnas de la instrucción SELECT deben tener alias que coincidan con los nombres de las columnas de la tabla de AlloyDB de destino.
EXPORT DATA WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID` OPTIONS( format='ALLOYDB', uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID", alloydb_options="""{ "schema": "SCHEMA_NAME", "table": "TABLE_NAME", "max_parallel_connections":MAX_CONNECTIONS}""" ) AS SELECT * FROM `mydataset.table1`;
Reemplaza lo siguiente:
PROJECT_ID: Es el nombre de tu Google Cloud proyecto.LOCATION: Es la ubicación de tu conexión y de la instancia de destino.CONNECTION_ID: Es el nombre de tu conexión de BigQuery.CLUSTER_ID: Es el nombre de tu clúster de AlloyDB.INSTANCE_ID: Es el nombre de tu instancia de AlloyDB de destino.SCHEMA_NAME(opcional): Es el nombre del esquema de destino en AlloyDB. Si no se proporciona, se usa el esquema predeterminado configurado para el usuario de la base de datos.TABLE_NAME: Es el nombre de una tabla de destino existente en AlloyDB, sin el prefijo del esquema.MAX_CONNECTIONS(opcional): Es la cantidad máxima de conexiones paralelas simultáneas de los trabajadores de BigQuery a la instancia de AlloyDB. Limitar las conexiones puede evitar la sobrecarga de la instancia de destino durante las exportaciones grandes.
Exportar datos
Puedes usar la
EXPORT DATA declaración
para exportar datos de una tabla de BigQuery a una tabla de
AlloyDB.
En el siguiente ejemplo, se exportan los campos seleccionados de una tabla llamada mydataset.table1 a una tabla de AlloyDB llamada my_target_table:
EXPORT DATA WITH CONNECTION `myproject.us-central1.my-alloydb-conn` OPTIONS ( format='ALLOYDB', uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance", alloydb_options="""{ "schema": "public", "table": "my_target_table" }""" ) AS SELECT col1 AS id, col2 AS name, col3 AS value FROM `mydataset.table1`;
Precios
Cuando exportas datos a AlloyDB con la instrucción EXPORT DATA,
se te factura a través de
los precios de procesamiento de capacidad de BigQuery.
Una vez que se exportan los datos, se te cobra por almacenarlos en AlloyDB. Para obtener más información, consulta los precios de AlloyDB para PostgreSQL.