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, combinaciones o subconsultas. Sin embargo, no se transfieren datos de Spanner al almacenamiento 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 la 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 de 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 de 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 usas conjuntos de datos externos, siempre se usa Data Boost y no tienes que habilitarlo de forma manual.

Si deseas usar Data Boost para tus consultas 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ítala 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 pueden ver directamente en BigQuery Studio, y puedes 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 de 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

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?