Consulta BigQuery con la federación de catálogos

Lakehouse para Apache Iceberg proporciona interoperabilidad con BigQuery a través de una función conocida como federación del catálogo de BigQuery. Esta función te permite exponer tablas administradas por BigQuery, por ejemplo, tablas administradas por Iceberg, a motores externos de código abierto (OSS), como Apache Spark y Trino.

En lugar de crear un contenedor de catálogo de Lakehouse dedicado para almacenar metadatos, el extremo del catálogo de REST de Apache Iceberg actúa únicamente como una puerta de enlace de proxy. Cuando los motores externos se conectan con el prefijo de almacén bq://, la puerta de enlace enruta sus solicitudes de catálogo directamente al catálogo interno de BigQuery. Esto te permite crear y administrar tablas directamente en BigQuery con DDL o APIs de BigQuery estándar, a la vez que les otorga a los motores externos de OSS acceso de solo lectura para consultar esas tablas a través del extremo del catálogo de REST.

Formatos de tabla admitidos

Solo se admiten las tablas de Apache Iceberg V2; no se admiten las tablas de Iceberg V1. Si tienes tablas de Iceberg V1 existentes almacenadas en el catálogo de BigQuery, debes actualizarlas a la versión 2 (por ejemplo, ejecutando ALTER TABLE catalog.schema.table SET TBLPROPERTIES ('format-version'='2'); o usando operaciones de motor similares) antes de usarlas con la federación del catálogo de BigQuery.

Cómo funciona la federación del catálogo de BigQuery

La federación de catálogos de BigQuery te permite exponer tablas de BigQuery, como las tablas administradas de Iceberg y las tablas de metastore de BigQuery, a través del extremo del catálogo REST de Apache Iceberg del catálogo de entorno de ejecución de Lakehouse.

El flujo de federación del catálogo de BigQuery funciona de la siguiente manera:

  1. Crea una tabla en el catálogo de BigQuery: Creas una tabla administrada de Iceberg en BigQuery con sentencias DDL. Esta tabla existe en el catálogo de BigQuery, se rige por las listas de control de acceso (LCA) de BigQuery y funciona como un recurso de la API de REST de BigQuery.
  2. Federar en el almacén de BigQuery desde el catálogo del entorno de ejecución de Lakehouse: Con la API de REST de Apache Iceberg del catálogo del entorno de ejecución de Lakehouse, puedes federar en un almacén especificado por el formato de ruta de acceso del almacén bq://projects/PROJECT_ID (o la versión regional, bq://projects/PROJECT_ID/locations/LOCATION). Esto te permite acceder a la tabla de BigQuery desde motores de procesamiento, como Apache Spark, a través de la API de Lakehouse para Apache Iceberg. En esta configuración, obtienes una experiencia de solo lectura desde Spark, pero una experiencia de lectura y escritura desde BigQuery.

Comparación con las tablas administradas por el extremo del catálogo de REST de Apache Iceberg

La federación de catálogos de BigQuery difiere de los flujos de trabajo en los que el catálogo del entorno de ejecución de Lakehouse usa el extremo del catálogo de REST de Apache Iceberg de las siguientes maneras:

  • Administración de recursos y almacenamiento de catálogos: Las tablas federadas residen en el catálogo de BigQuery como recursos de la API de REST de BigQuery, y el catálogo de tiempo de ejecución de Lakehouse actúa como una puerta de enlace de proxy. Cuando el catálogo del entorno de ejecución de Lakehouse usa el extremo del catálogo de REST de Apache Iceberg, las tablas se almacenan directamente en el catálogo como recursos de REST de Lakehouse para Apache Iceberg.
  • Control de acceso: Las tablas federadas usan permisos de IAM de BigQuery y listas de control de acceso (LCA). Cuando el catálogo de entornos de ejecución de Lakehouse usa el extremo del catálogo de REST de Apache Iceberg, las tablas usan las ACL de Lakehouse para Apache Iceberg.
  • Capacidades de lectura y escritura del motor: Las tablas federadas proporcionan acceso de lectura y escritura a través de BigQuery, pero acceso de solo lectura desde motores externos, como Spark. Cuando el catálogo de entorno de ejecución de Lakehouse usa el extremo del catálogo de REST de Apache Iceberg, las tablas admiten operaciones de lectura y escritura desde las APIs de BigQuery y los motores externos, como Spark.

Antes de comenzar

  1. Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .

  2. Habilita la API de BigLake.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    Habilitar la API

Roles obligatorios

Para obtener los permisos que necesitas para usar la federación de catálogos en BigQuery, pídele a tu administrador que te otorgue los siguientes roles de IAM:

  • Leer recursos del catálogo y consultar datos de tablas:
  • Realiza operaciones del lenguaje de manipulación de datos (DML) con la federación del catálogo de BigQuery:
    • Editor de datos de BigQuery (roles/bigquery.dataEditor) en el proyecto
    • Administrador de almacenamiento (roles/storage.admin) en el bucket de Cloud Storage Si usas motores de consultas, como Managed Service para Apache Spark, para realizar operaciones de DML, otorga estos roles a la cuenta de servicio que usas para ejecutar trabajos en ese motor.

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 a través de roles personalizados o cualquier otro rol predefinido.

Configura la federación del catálogo de BigQuery

Para habilitar la federación del catálogo de BigQuery, configura tu cliente (como Apache Spark o Trino) con el formato de almacén bq://projects/PROJECT_ID en el campo WAREHOUSE_PATH de los ejemplos de configuración del cliente en Configura la aplicación cliente.

También puedes incluir una ubicación de BigQuery para restringir las solicitudes futuras a una sola ubicación con el formato bq://projects/PROJECT_ID/locations/LOCATION.

Como BigQuery administra estos recursos, debes tener los permisos necesarios correspondientes.

Crea espacios de nombres para las tablas federadas

Después de configurar tu cliente para la federación del catálogo de BigQuery, puedes crear un espacio de nombres para tus tablas federadas.

Spark

Para usar la federación del catálogo de BigQuery, incluye las cláusulas LOCATION y DBPROPERTIES:

spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME LOCATION 'gs://BUCKET_NAME/NAMESPACE_NAME' WITH DBPROPERTIES ('gcp-region' = 'LOCATION');")
spark.sql("USE NAMESPACE_NAME;")

Reemplaza lo siguiente:

  • NAMESPACE_NAME: Un nombre para tu espacio de nombres.
  • BUCKET_NAME: Es el bucket de Cloud Storage que usas con tu catálogo.
  • LOCATION: Una ubicación de BigQuery El valor predeterminado es la multirregión US.

Trino

Para usar la federación del catálogo de BigQuery, incluye las propiedades LOCATION y gcp-region:

CREATE SCHEMA IF NOT EXISTS  CATALOG_NAME.SCHEMA_NAME WITH ( LOCATION = 'gs://BUCKET_NAME/SCHEMA_NAME', "gcp-region" = 'LOCATION');
USE CATALOG_NAME.SCHEMA_NAME;

Reemplaza lo siguiente:

  • CATALOG_NAME: Es el nombre de tu catálogo de Trino que usa el extremo del catálogo de REST de Apache Iceberg.
  • SCHEMA_NAME: Un nombre para tu esquema.
  • BUCKET_NAME: Es el bucket de Cloud Storage que usas con tu catálogo.
  • LOCATION: Una ubicación de BigQuery El valor predeterminado es la multirregión US.

Consulta tablas federadas en BigQuery

Las tablas que creas en un catálogo federado son visibles en BigQuery y se pueden consultar directamente con el SQL estándar de BigQuery (sin necesidad de un nombre de P.C.N.T. de cuatro partes):

SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;

Reemplaza lo siguiente:

  • NAMESPACE_NAME: Es el nombre de tu espacio de nombres.
  • TABLE_NAME: Es el nombre de tu tabla.

¿Qué sigue?