Exporta datos a Spanner (ETL inverso)

Para enviar comentarios o solicitar asistencia para esta función, envía un correo electrónico a bq-cloud-spanner-federation-preview@google.com.

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 Spanner. Puedes hacerlo mediante la declaración EXPORT DATA para exportar datos de una tabla de BigQuery a una tabla de Spanner.

En este flujo de trabajo de ETL inverso, se combinan capacidades analíticas en BigQuery con baja latencia y alta capacidad de procesamiento en Spanner. Este flujo de trabajo te permite entregar datos a los usuarios de la aplicación sin agotar cuotas y límites en BigQuery.

Antes de comenzar

Roles obligatorios

Para obtener los permisos que necesitas para exportar los datos de BigQuery a Spanner, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

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

  • Los siguientes tipos de datos de BigQuery no tienen equivalentes en Spanner y no son compatibles:
Dialecto de la base de datos de Spanner Tipos de BigQuery no compatibles
Todos los dialectos
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: El tipo NUMERIC admitido no es lo suficientemente ancho. Considera agregar conversiones explícitas al tipo NUMERIC en la consulta.
  • El tamaño máximo de una fila exportada no puede exceder 1 MiB.

  • Spanner aplica la integridad referencial durante la exportación. Si la tabla de destino es secundaria de otra tabla (INTERLEAVE IN PARENT) o si esta tiene restricciones de clave externa, las claves externas y la clave superior se validarán durante la exportación. Si una fila exportada se escribe en una tabla con INTERLEAVE IN PARENT y la fila superior no existe, la exportación fallará con el mensaje "Falta la fila superior. No se puede escribir la fila". Si la fila exportada se escribe en una tabla con restricciones de clave externa y hace referencia a una clave que no existe, la exportación fallará con el error "Se incumplió la restricción de clave externa". Cuando exportes a varias tablas, te recomendamos que ordenes la exportación para asegurarte de que se mantenga la integridad referencial durante la exportación. Por lo general, esto significa exportar las tablas superiores y las tablas a las que hacen referencia las claves externas antes que las tablas que hacen referencia a ellas.

    Si la tabla que es el destino de la exportación tiene restricciones de claves externas o es secundaria de otra tabla (INTERLEAVE IN PARENT), la tabla superior debe propagarse antes de exportar una tabla secundaria y debe contener todas las claves correspondientes. Fallará el intento de exportar una tabla secundaria mientras que una tabla superior no tenga el conjunto completo de claves relevantes.

  • Un trabajo de exportación a Spanner tiene una duración máxima de 6 horas. Para obtener información sobre cómo optimizar trabajos de exportación grandes, consulta Optimización de exportaciones. Como alternativa, considera dividir la entrada en bloques de datos individuales, que se pueden exportar como trabajos de exportación individuales.

Consideraciones de ubicación

La región líder predeterminada de la instancia de Spanner es la región de destino de la exportación de BigQuery a Spanner. Para obtener más información, consulta Configura la región líder.

Se admiten las siguientes combinaciones de regiones de BigQuery y Spanner:

  • Si tu conjunto de datos de BigQuery se encuentra en una sola región, solo puedes exportar a una base de datos de Spanner ubicada en la misma región.

  • Si tu conjunto de datos de BigQuery se encuentra en la multirregión US, solo puedes exportar a una base de datos de Spanner que se encuentre en las regiones líderes us-central1 o us-west1.

  • Si tu BigQuery está en la multirregión EU, solo puedes exportar a una base de datos de Spanner que se encuentre en europe-west1 o en regiones líderes de europe-west4.

Configura exportaciones con la opción spanner_options

Puedes usar la opción spanner_options para especificar una base de datos y una tabla de destino de Spanner. La configuración se expresa en forma de una string JSON, como se muestra en el siguiente ejemplo:

EXPORT DATA OPTIONS(
   uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
   spanner_options = """{
      "table": "TABLE_NAME",
      "priority": "PRIORITY",
      "tag": "TAG",
   }"""
)

Reemplaza lo siguiente:

  • PROJECT_ID: El nombre de tu proyecto de Google Cloud.
  • INSTANCE_ID: el nombre de tu instancia de base de datos.
  • DATABASE_ID: el nombre de tu base de datos.
  • TABLE_NAME: el nombre de una tabla de destino existente.
  • PRIORITY (opcional): Es la prioridad de las solicitudes de escritura. Valores permitidos: LOW, MEDIUM, HIGH. Valor predeterminado: MEDIUM.
  • TAG (opcional): Es la etiqueta de solicitud para ayudar a identificar el tráfico del exportador en la supervisión de Spanner. Valor predeterminado: bq_export.

Requisitos de las consultas de exportación

Para exportar los resultados de las consultas a Spanner, estos deben cumplir con los siguientes requisitos:

  • Todas las columnas del conjunto de resultados deben existir en la tabla de destino y sus tipos deben coincidir.
  • El conjunto de resultados debe contener todas las columnas NOT NULL de la tabla de destino.
  • Los valores de la columna no deben exceder los límites de tamaño de los datos dentro de las tablas de Spanner.
  • Los tipos de columnas no compatibles deben convertirse en uno de los tipos compatibles antes de exportar a Spanner.

Exportar datos

Puedes usar la declaración EXPORT DATA para exportar datos de una tabla de BigQuery a una tabla de Spanner.

En el siguiente ejemplo, se exportan los campos seleccionados de una tabla llamada mydataset.table1:

EXPORT DATA OPTIONS (
  uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
  spanner_options="""{ "table": "TABLE_NAME" }"""
)
AS SELECT * FROM mydataset.table1;

Reemplaza lo siguiente:

  • PROJECT_ID: el nombre de tu proyecto de Google Cloud
  • INSTANCE_ID: el nombre de tu instancia de base de datos
  • DATABASE_ID: el nombre de tu base de datos
  • TABLE_NAME: el nombre de una tabla de destino existente

Exporta varios resultados con el mismo valor de rowkey

Cuando exportas un resultado que contiene varias filas con el mismo valor de rowkey, los valores escritos en Spanner terminan en la misma fila de Spanner. Solo se incluirá una sola fila de BigQuery coincidente (no se garantiza cuál) en el conjunto de filas de Spanner que produce la exportación.

Optimización de exportaciones

Para optimizar la exportación de registros de BigQuery a Spanner, puedes probar lo siguiente:

  • Aumenta la cantidad de nodos en la instancia de destino de Spanner. Ten en cuenta que, durante las primeras etapas de la exportación, es posible que aumentar la cantidad de nodos en la instancia no cause un aumento inmediato en la capacidad de procesamiento de la exportación. Puede haber una ligera demora mientras Spanner realiza la división basada en la carga. Con la división basada en la carga, la capacidad de procesamiento de exportación aumentará y se estabilizará poco después. Para obtener detalles adicionales sobre cómo maximizar la capacidad de procesamiento de escritura, consulta la Descripción general del rendimiento.

  • Especifica la prioridad de HIGH en spanner_options. Sin embargo, hacerlo puede provocar una degradación significativa del rendimiento de otras cargas de trabajo que entrega la misma instancia.

  • Evita ordenar los resultados de la consulta. Si el conjunto de resultados contiene todas las columnas de clave primaria, el exportador ordena automáticamente las claves primarias de la tabla de destino para optimizar las escrituras y minimizar la contención.

    Si la clave primaria de la tabla de destino incluye columnas generadas, debes agregar las expresiones de las columnas generadas a la consulta para asegurarte de que los datos exportados se ordenen de forma correcta.

Precios

Para obtener información sobre los precios de la exportación de datos, consulta Precios de BigQuery.

Una vez que se exportan los datos, se te cobra por almacenarlos en Spanner. Para obtener más información, consulta Precios de Spanner.