Consultas federadas de Spanner

Como analista de datos, puedes consultar datos en Spanner desde BigQuery mediante consultas federadas.

La federación de BigQuery Spanner permite que BigQuery consulte datos que se encuentran en Spanner en tiempo real, sin copiarlos ni moverlos.

Puedes consultar los datos de Spanner de dos maneras:

  • Crea un conjunto de datos externo de Spanner.
  • Usa una función EXTERNAL_QUERY.

Usa conjuntos de datos externos

La forma más sencilla de consultar tablas de Spanner es crear un conjunto de datos externo. Una vez que crees el conjunto de datos externo, tus tablas de la base de datos de Spanner correspondiente serán visibles en BigQuery y podrás usarlas en tus consultas, por ejemplo, en uniones, uniones o subconsultas. Sin embargo, no se transfieren datos del almacenamiento de Spanner al de BigQuery.

No es necesario que crees una conexión para consultar los datos de Spanner si creas un conjunto de datos externo.

Usa la función EXTERNAL_QUERY

Al igual que con otras bases de datos federadas, también puedes consultar datos de Spanner con una función EXTERNAL_QUERY. Esto puede ser útil si deseas consultar una base de datos de Spanner que usa el dialecto de PostgreSQL o si deseas tener más control sobre los parámetros de conexión.

Antes de comenzar

  • Asegúrate de que el administrador de BigQuery haya creado una conexión de Spanner y la haya compartido contigo. Consulta Elige la conexión correcta.
  • Para obtener los permisos que necesitas a fin de consultar una instancia de Spanner, pídele al administrador que te otorgue el rol de usuario de conexión de BigQuery (roles/bigquery.connectionUser) de Identity and Access Management (IAM). También debes pedirle al administrador que te otorgue uno de los siguientes elementos:
    • Si eres un usuario del control de acceso detallado, necesitas acceso a un rol de base de datos que tenga el privilegio SELECT en todos los objetos del esquema de Spanner en tus consultas.
    • Si no eres un usuario del control de acceso detallado, necesitas el rol de IAM de lector de base de datos de Cloud Spanner (roles/spanner.databaseReader).

    Para obtener información sobre cómo otorgar roles de IAM, consulta Administración del acceso a proyectos, carpetas y organizaciones. Para obtener información sobre el control de acceso detallado, consulta Información sobre el control de acceso detallado.

Elige la conexión correcta

Si eres un usuario del control de acceso detallado de Spanner, cuando ejecutes una consulta federada con una función EXTERNAL_QUERY, debes usar una conexión de Spanner que especifique un rol de base de datos. Luego, todas las consultas que ejecutes con esta conexión usarán ese rol de base de datos.

Si usas una conexión que no especifica un rol de base de datos, debes tener los roles de IAM indicados en Antes de comenzar.

Consulta los datos

Para enviar una consulta federada a Spanner desde una consulta de GoogleSQL, usa la función EXTERNAL_QUERY.

Formula tu consulta de Spanner en GoogleSQL o PostgreSQL, según el dialecto especificado de la base de datos.

En el siguiente ejemplo, se realiza una consulta federada a una base de datos de Cloud Spanner llamada orders y se unen los resultados con una tabla de BigQuery llamada mydataset.customers.

SELECT c.customer_id, c.name, rq.first_order_date
FROM mydataset.customers AS c
LEFT OUTER JOIN EXTERNAL_QUERY(
  'my-project.us.example-db',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''') AS rq
  ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;

Data Boost de Spanner

Data Boost es una función sin servidores y completamente administrada que proporciona recursos de procesamiento independientes para las cargas de trabajo de Spanner compatibles. Data Boost te permite ejecutar consultas de estadísticas y exportaciones de datos con un impacto casi nulo en las cargas de trabajo existentes de la instancia de Spanner aprovisionada. Data Boost te permite ejecutar consultas federadas con capacidad de procesamiento independiente separada de tus instancias aprovisionadas para evitar afectar las cargas de trabajo existentes en Spanner. Data Boost tiene un mayor impacto cuando ejecutas consultas ad hoc complejas o cuando deseas procesar grandes cantidades de datos sin afectar la carga de trabajo existente de Spanner. Ejecutar consultas federadas con Data Boost puede reducir el consumo de CPU de forma significativa y, en algunos casos, lograr una latencia de consulta más baja.

Antes de comenzar

Para obtener el permiso que necesitas para habilitar el acceso a Data Boost, pídele a tu administrador que te otorgue el rol de IAM lector de bases de datos de Cloud Spanner con DataBoost (roles/spanner.databaseReaderWithDataBoost) en la base de datos de Spanner. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el permiso spanner.databases.useDataBoost, que se requiere para habilitar el acceso a Data Boost.

También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.

Habilita Data Boost

Cuando se usan conjuntos de datos externos, siempre se usa Data Boost y no es necesario habilitarlo de forma manual.

Si deseas usar Data Boost para tus consultas de EXTERNAL_QUERY, debes habilitarlo cuando crees una conexión que use tu consulta.

Leer datos en paralelo

Spanner puede dividir determinadas consultas en partes más pequeñas, o particiones, y recuperar las particiones en paralelo. Para obtener más información, consulta Lee datos en paralelo en la documentación de Spanner.

Sin embargo, esta opción está restringida a consultas que cumplan con una de las siguientes condiciones:

Otras consultas muestran un error. Para ver el plan de ejecución de consultas para una consulta de Spanner, consulta Comprende cómo Spanner ejecuta consultas.

Cuando se ejecutan consultas federadas con conjuntos de datos externos, siempre se usa la opción "Leer datos en paralelo".

Para habilitar las lecturas paralelas cuando usas EXTERNAL_QUERY, habilítalas cuando crees la conexión.

Administra la prioridad de ejecución de las consultas

Cuando ejecutas consultas federadas con una función EXTERNAL_QUERY, puedes asignar prioridad (high, medium o low) a las consultas individuales si especificas la opción query_execution_priority:

SELECT *
FROM EXTERNAL_QUERY(
  'my-project.us.example-db',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''',
  '{"query_execution_priority":"high"}');

La prioridad predeterminada es medium.

Las búsquedas con una prioridad de high competirán con el tráfico transaccional. Las búsquedas con prioridad low son el mejor esfuerzo y pueden interrumpirse mediante la carga en segundo plano, por ejemplo, las copias de seguridad programadas.

Cuando se ejecutan consultas federadas con conjuntos de datos externos, todas las consultas siempre tienen prioridad medium.

Ve un esquema de tabla de Spanner

Si usas conjuntos de datos externos, tus tablas de Spanner se verán directamente en BigQuery Studio y podrás ver sus esquemas.

Sin embargo, también puedes ver los esquemas sin definir conjuntos de datos externos. También puedes usar la función EXTERNAL_QUERY para consultar vistas information_schema y acceder a los metadatos de la base de datos. En el siguiente ejemplo, se muestra información sobre las columnas de la tabla MyTable:

Base de datos de Google SQL

SELECT *
FROM EXTERNAL_QUERY(
  'my-project.us.example-db',
  '''SELECT t.column_name, t.spanner_type, t.is_nullable
    FROM information_schema.columns AS t
    WHERE
      t.table_catalog = ''
      AND t.table_schema = ''
     AND t.table_name = 'MyTable'
    ORDER BY t.ordinal_position
  ''');

Base de datos de PostgreSQL

SELECT * from EXTERNAL_QUERY(
 'my-project.us.postgresql.example-db',
  '''SELECT t.column_name, t.data_type, t.is_nullable
    FROM information_schema.columns AS t
    WHERE
      t.table_schema = 'public' and t.table_name='MyTable'
    ORDER BY t.ordinal_position
  ''');

Para obtener más información, consulta las siguientes referencias del esquema de información en la documentación de Spanner:

Precios

Consultas entre regiones

BigQuery admite consultas federadas en las que las instancias de Spanner y los conjuntos de datos de BigQuery se encuentran en regiones diferentes. Estas consultas generan un cargo adicional por la transferencia de datos de Spanner. Para obtener más información, consulta Precios de Spanner.

Durante el período de vista previa, no se te cobrará por la transferencia de datos, pero podrás ver tu uso con los siguientes SKU:

  • Transferencia de datos de red entre zonas dentro de la misma región
  • Transferencia de datos salientes interregional de red de instancias gratuita al mismo continente
  • Transferencia de datos externa interregional de red de instancias gratuita a un continente diferente

La transferencia de datos se cobra según la región de BigQuery en la que ejecutas la consulta y la región de Spanner más cercana que tiene réplicas de lectura y escritura o de solo lectura.

En el caso de las configuraciones multirregionales de BigQuery (US o EU), los costos de transferencia de datos desde Spanner se determinan de la siguiente manera:

  • Multirregión de BigQuery US: Región de Spanner us-central1
  • Multirregión de BigQuery EU: Región de Spanner europe-west1

Por ejemplo:

  • BigQuery (US multirregión) y Spanner (us-central1): Se aplican costos por la transferencia de datos dentro de la misma región.
  • BigQuery (US multirregión) y Spanner (us-west4): Se aplican costos por la transferencia de datos entre regiones dentro del mismo continente.

Soluciona problemas

En esta sección, se proporciona ayuda para solucionar los problemas que puedes encontrar cuando envías una consulta federada a Spanner.

Problema: La consulta no se puede particionar de raíz.
Resolución: Si configuras la conexión para leer datos en paralelo, el primer operador en el plan de ejecución de consultas debe ser una unión distribuida o tu plan de ejecución no debe tener uniones distribuidas. Para resolver este error, visualiza el plan de ejecución de consultas y reescribe la consulta. Para obtener más información, consulta Comprende cómo Spanner ejecuta consultas.
Problema: Se superó el plazo.
Resolución: Selecciona la opción para leer datos en paralelo y reescribe la consulta para que pueda particionarse desde la raíz. Para obtener más información, consulta Comprende cómo Spanner ejecuta consultas.

¿Qué sigue?