Interroger des tables BigQuery via le point de terminaison du catalogue REST Apache Iceberg

Lakehouse assure l'interopérabilité avec BigQuery en acheminant les requêtes via le point de terminaison du catalogue REST Apache Iceberg vers le catalogue BigQuery. Cette fonctionnalité vous permet d'exposer des tables gérées par BigQuery, par exemple des tables gérées Iceberg, à des moteurs Open Source (OSS) externes tels qu'Apache Spark et Trino.

Au lieu de créer un conteneur de catalogue Lakehouse dédié pour stocker les métadonnées, le point de terminaison du catalogue REST Apache Iceberg agit uniquement comme une passerelle proxy. Lorsque des moteurs externes se connectent à l'aide du préfixe d'entrepôt bq://, la passerelle achemine leurs requêtes de catalogue directement vers le catalogue interne de BigQuery. Cela vous permet de créer et de gérer des tables directement dans BigQuery à l'aide du LDD ou des API BigQuery standards, tout en accordant aux moteurs OSS externes un accès en lecture seule pour interroger ces tables via le point de terminaison du catalogue REST.

Fonctionnement de l'interrogation des tables BigQuery via le point de terminaison du catalogue REST

Le routage des requêtes vers le catalogue BigQuery vous permet d'exposer des tables BigQuery (telles que les tables gérées Iceberg et les tables de metastore BigQuery) via le point de terminaison du catalogue REST Apache Iceberg du catalogue d'environnements d'exécution Lakehouse.

Le workflow fonctionne comme suit :

  1. Créer une table dans le catalogue BigQuery : vous créez une table gérée Iceberg dans BigQuery à l'aide d'instructions LDD. Cette table existe dans le catalogue BigQuery, est régie par les listes de contrôle des accès (LCA) BigQuery et fonctionne comme une ressource REST BigQuery.
  2. Fédérer dans l'entrepôt BigQuery à partir du catalogue d'environnements d'exécution Lakehouse : à l'aide de l'API REST Apache Iceberg du catalogue d'environnements d'exécution Lakehouse, vous fédérez dans un entrepôt spécifié par le format de chemin d'accès d'entrepôt bq://projects/PROJECT_ID (ou la version régionale, bq://projects/PROJECT_ID/locations/LOCATION). Cela vous permet d'accéder à la table BigQuery à partir de Compute Engine tels qu'Apache Spark via l'API REST Apache Iceberg Catalog. Dans cette configuration, vous bénéficiez d'une expérience en lecture seule depuis Spark, mais d'une expérience en lecture/écriture depuis BigQuery.

Remarques

  • Étant donné que le routage des requêtes vers le catalogue BigQuery ne crée pas de ressource de catalogue Lakehouse dédiée, les autres concepts et configurations au niveau du catalogue (comme la hiérarchie des ressources, les régions des buckets et des catalogues, et la structure de nommage P.C.N.T en quatre parties) ne s'appliquent pas à cette méthode. Dans l'API sous-jacente, cela correspond à la configuration CATALOG_TYPE_BIGQUERY. La délégation d'accès au stockage (distribution d'identifiants) n'est pas compatible lors du routage des requêtes vers le catalogue BigQuery.

  • L'exposition des tables BigQuery via le point de terminaison du catalogue REST est distincte de l'accès aux données cross-cloud. Bien que ce workflow expose les tables Google Cloud aux moteurs OSS externes, Lakehouse connecte Google Cloud à des catalogues externes distants, tels que Databricks Unity Catalog, pour interroger les données stockées chez d'autres fournisseurs de services cloud directement depuis BigQuery et les moteurs OSS sans migrer les données. Pour en savoir plus sur ce workflow, consultez À propos de l'accès aux données cross-cloud.

Comparaison avec les tables gérées par le point de terminaison du catalogue REST Apache Iceberg

L'exposition des tables BigQuery via le point de terminaison du catalogue REST diffère des workflows dans lesquels le catalogue d'environnements d'exécution Lakehouse utilise le point de terminaison du catalogue REST Apache Iceberg de la manière suivante :

  • Gestion des ressources et stockage du catalogue : les tables du catalogue BigQuery y résident en tant que ressources REST BigQuery, et le catalogue d'environnements d'exécution Lakehouse sert de passerelle proxy. Lorsque le catalogue d'environnements d'exécution Lakehouse utilise le point de terminaison du catalogue REST Apache Iceberg pour gérer directement les tables, celles-ci sont stockées en tant que ressources REST Lakehouse.
  • Contrôle des accès : les tables du catalogue BigQuery utilisent les autorisations IAM et les listes de contrôle d'accès (LCA) BigQuery. Les tables gérées directement dans le catalogue d'environnements d'exécution Lakehouse utilisent des LCA Lakehouse.
  • Capacités de lecture et d'écriture du moteur : les tables gérées Iceberg fournissent un accès en lecture/écriture via BigQuery et un accès en lecture seule à partir de moteurs externes tels que Spark. Les tables gérées directement dans le catalogue d'environnements d'exécution Lakehouse via le point de terminaison du catalogue REST Apache Iceberg sont compatibles avec les opérations de lecture/écriture depuis BigQuery et des moteurs externes tels que Spark.

Avant de commencer

  1. Vérifiez que la facturation est activée pour votre projet Google Cloud .

  2. Activez l'API BigLake si ce n'est pas déjà fait.

    Rôles requis pour activer les API

    Pour activer des API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    Activer l'API

Rôles requis

Pour obtenir les autorisations nécessaires pour interroger des tables BigQuery via le point de terminaison du catalogue REST Apache Iceberg, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Si vous utilisez des moteurs de requête externes tels que Managed Service pour Apache Spark pour créer des espaces de noms ou modifier des tables créées à partir de moteurs externes, attribuez ces rôles au compte de service qui exécute les jobs dans ce moteur (les tables gérées Iceberg sont en lecture seule à partir des moteurs externes).

Configurer votre client pour l'entrepôt BigQuery

Pour vous connecter à l'entrepôt BigQuery, configurez votre client (tel qu'Apache Spark ou Trino) avec le format d'entrepôt bq://projects/PROJECT_ID dans le champ WAREHOUSE_PATH des exemples de configuration client dans Configurer l'application cliente.

Vous pouvez également choisir d'inclure un emplacement BigQuery pour limiter les futures requêtes à un seul emplacement au format bq://projects/PROJECT_ID/locations/LOCATION.

Comme ces ressources sont gérées par BigQuery, vous devez disposer des autorisations requises applicables.

Créer des espaces de noms dans l'entrepôt BigQuery

Après avoir configuré votre client, vous pouvez créer un espace de noms pour vos tables.

Spark

Pour créer un espace de noms dans l'entrepôt BigQuery, incluez les clauses LOCATION et 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;")

Remplacez les éléments suivants :

  • NAMESPACE_NAME : nom de votre espace de noms.
  • BUCKET_NAME : bucket Cloud Storage que vous utilisez avec votre catalogue.
  • LOCATION : emplacement BigQuery. La valeur par défaut est l'emplacement multirégional US.

Trino

Pour créer un schéma dans l'entrepôt BigQuery, incluez les propriétés LOCATION et 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;

Remplacez les éléments suivants :

  • CATALOG_NAME : nom de votre catalogue Trino utilisant le point de terminaison du catalogue REST Apache Iceberg.
  • SCHEMA_NAME : nom de votre schéma.
  • BUCKET_NAME : bucket Cloud Storage que vous utilisez avec votre catalogue.
  • LOCATION : emplacement BigQuery. La valeur par défaut est l'emplacement multirégional US.

Interroger des tables dans BigQuery

Les tables que vous créez dans l'entrepôt BigQuery sont visibles dans BigQuery et peuvent être interrogées directement à l'aide du langage SQL BigQuery standard (sans avoir besoin d'un nom P.C.N.T en quatre parties) :

SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;

Remplacez les éléments suivants :

  • NAMESPACE_NAME : nom de votre espace de noms
  • TABLE_NAME : nom de votre table.

Étapes suivantes