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 de catálogos 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, al mismo tiempo que les brinda a los motores OSS externos acceso de solo lectura para consultar esas tablas a través del extremo del catálogo de REST.

Cómo funciona la federación de catálogos de BigQuery

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

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

  1. Crea una tabla en el catálogo de BigQuery: Creas una tabla administrada por Iceberg en BigQuery con instrucciones DDL. Esta tabla existe en el catálogo de BigQuery, se rige por las listas de control de acceso (ACLs) de BigQuery y funciona como un recurso REST de BigQuery.
  2. Federa en el almacén de BigQuery desde el catálogo de entorno de ejecución de Lakehouse: Con la API de REST de Apache Iceberg del catálogo de entorno de ejecución de Lakehouse, te federas en un almacén especificado por el bq://projects/PROJECT_ID formato de ruta de acceso del almacén (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 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 de 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 REST de BigQuery, y el catálogo de entorno de ejecución de Lakehouse actúa como una puerta de enlace de proxy. Cuando el catálogo de 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 REST de Lakehouse para Apache Iceberg.
  • Control de acceso: Las tablas federadas usan permisos de IAM de BigQuery y listas de control de acceso (ACLs). Cuando el catálogo de entorno de ejecución de Lakehouse usa el extremo del catálogo de REST de Apache Iceberg, las tablas usan ACLs 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 motores externos, como Spark.

Antes de comenzar

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

  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 la tabla:
  • Realizar operaciones del lenguaje de manipulación de datos (DML) con la federación de catálogos 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 consulta como Managed Service para Apache Spark para realizar operaciones 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 de catálogos de BigQuery

Para habilitar la federación de catálogos de BigQuery, configura tu cliente (como Apache Spark o Trino) con el bq://projects/PROJECT_ID formato de almacén en el WAREHOUSE_PATH campo 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 bq://projects/PROJECT_ID/locations/LOCATION formato.

Debido a que BigQuery administra estos recursos, debes tener los permisos obligatorios aplicables.

Crea espacios de nombres para tablas federadas

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

Spark

Para usar la federación de catálogos 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: Es un nombre para tu espacio de nombres.
  • BUCKET_NAME: Es el bucket de Cloud Storage que usas con tu catálogo.
  • LOCATION: Es una ubicación de BigQuery. El valor predeterminado es la multirregión US.

Trino

Para usar la federación de catálogos 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 con el extremo del catálogo de REST de Apache Iceberg.
  • SCHEMA_NAME: Es un nombre para tu esquema.
  • BUCKET_NAME: Es el bucket de Cloud Storage que usas con tu catálogo.
  • LOCATION: Es 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 SQL estándar de BigQuery (sin necesidad de un nombre 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?