Interroger des tables Iceberg avec le catalogue d'environnements d'exécution Lakehouse, Spark et BigQuery
Découvrez comment utiliser Lakehouse pour Apache Iceberg en créant un catalogue d'environnements d'exécution Lakehouse avec un catalogue à plusieurs buckets. Cette configuration établit une couche de métadonnées gérée qui connecte les moteurs de traitement Open Source à Google Cloud.
Vous exécutez ensuite un job PySpark Managed Service pour Apache Spark afin de créer une table Lakehouse Iceberg REST catalog à l'aide du point de terminaison Apache Iceberg REST catalog.
Vous pouvez ensuite interroger la table résultante directement depuis la Google Cloud console
dans BigQuery à l'aide de la project.catalog.namespace.table syntaxe.
Avant de commencer
- Connectez-vous à votre Google Cloud compte. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Accorder des rôles IAM
Pour autoriser le job PySpark Managed Service pour Apache Spark et le catalogue d'environnements d'exécution Lakehouse à fonctionner avec Cloud Storage et BigQuery, accordez les rôles nécessaires à leurs principaux correspondants :
Dans la Google Cloud console, cliquez sur Activer Cloud Shell.
Cliquez sur Autoriser.
Attribuez le rôle Dataproc Worker au compte de service par défaut Compute Engine du projet, que Managed Service pour Apache Spark utilise par défaut comme décrit dans Comptes de service Managed Service pour Apache Spark.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/dataproc.worker"Attribuez le rôle Utilisateur de l'API Service Usage au compte de service Compute Engine par défaut du projet.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageConsumer"Attribuez le rôle Éditeur BigLake au compte de service Compute Engine par défaut du projet.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/biglake.editor"Attribuez le rôle Éditeur de données BigQuery au compte de service Compute Engine par défaut du projet.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/bigquery.dataEditor"Remplacez les éléments suivants :
PROJECT_ID: ID de votre Google Cloud projet
Créer un catalogue d'environnements d'exécution Lakehouse
Créez un catalogue d'environnements d'exécution Lakehouse pour gérer les métadonnées de vos tables Iceberg.
Dans Cloud Shell, exécutez la commande suivante pour créer votre catalogue à plusieurs buckets (
bl://) avec la distribution d'identifiants :gcloud biglake iceberg catalogs create LAKEHOUSE_CATALOG_ID \ --project=PROJECT_ID \ --catalog-type=biglake \ --default-location=gs://BUCKET_NAME \ --credential-mode=vended-credentials
Remplacez les éléments suivants :
LAKEHOUSE_CATALOG_ID: nom unique de votre catalogue.PROJECT_ID: ID de votre Google Cloud projet.BUCKET_NAME: nom du bucket Cloud Storage contenant votre fichier d'application PySpark.
Accordez des autorisations sur le bucket au compte de service du catalogue :
Dans la Google Cloud console, accédez à Lakehouse.
Cliquez sur le nom du catalogue que vous venez de créer (LAKEHOUSE_CATALOG_ID).
Sous Authentication method (Méthode d'authentification), cliquez sur Set bucket permissions (Définir les autorisations du bucket).
Dans la boîte de dialogue, cliquez sur Confirmer. Cela vérifie que le compte de service de votre catalogue dispose du rôle Utilisateur d'objets de l'espace de stockage sur votre bucket.
Créer et exécuter un job PySpark
Pour créer et interroger une table Iceberg, commencez par créer un job PySpark avec les instructions Spark SQL nécessaires. Exécutez ensuite le job avec Managed Service pour Apache Spark.
Créer un script PySpark avec un espace de noms et une table
Dans un éditeur de texte, créez un fichier nommé quickstart.py avec le contenu suivant.
Ce script PySpark initialise une session Spark pour effectuer plusieurs opérations sur un catalogue Iceberg. Le script crée d'abord un espace de noms, s'il n'en existe pas déjà un. Il crée ensuite une table Iceberg nommée quickstart_table avec un schéma de base. Une fois la table créée, le script insère trois lignes de données.
Enfin, il interroge la table pour récupérer tous les enregistrements insérés.
Ces valeurs sont ensuite utilisées à l'étape suivante lorsque vous exécutez le job gcloud dataproc
batches submit pyspark.
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("quickstart").getOrCreate()
# Create a namespace (dataset) if it doesn't exist
spark.sql("CREATE NAMESPACE IF NOT EXISTS `quickstart_catalog`.quickstart_namespace")
# Create the table
spark.sql("""
CREATE OR REPLACE TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table (
id INT,
name STRING
)
USING iceberg
""")
# Insert data into the table
spark.sql("""
INSERT INTO `quickstart_catalog`.quickstart_namespace.quickstart_table
VALUES (1, 'one'), (2, 'two'), (3, 'three')
""")
Importer le script dans votre bucket Cloud Storage
Une fois le script quickstart.py créé, importez-le dans le bucket Cloud Storage.
Dans la Google Cloud console, accédez à Buckets Cloud Storage.
Cliquez sur le nom de votre bucket.
Dans l'onglet Objets, cliquez sur Importer > Importer des fichiers.
Dans l'explorateur de fichiers, sélectionnez le fichier
quickstart.py, puis cliquez sur Ouvrir.
Exécuter le job PySpark
Une fois le script quickstart.py importé, exécutez-le en tant que job par lot Managed Service pour Apache Spark.
Dans Cloud Shell, exécutez le job par lot Managed Service pour Apache Spark suivant à l'aide du script
quickstart.py.gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \ --project=PROJECT_ID \ --region=REGION \ --version=2.2 \ --properties="\ spark.sql.defaultCatalog=quickstart_catalog,\ spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.quickstart_catalog.type=rest,\ spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\ spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"
Remplacez les éléments suivants :
BUCKET_NAME: nom du bucket Cloud Storage contenant votre fichier d'application PySpark.LAKEHOUSE_CATALOG_ID: nom de votre catalogue BigLake. Ce nom est utilisé ultérieurement lorsque vous interrogez votre catalogue dans BigQuery à l'aide de la syntaxe P.C.N.T. Par exemple,my-project.biglake-catalog.quickstart_namespace.quickstart_table.PROJECT_ID: ID de votre Google Cloud projet.REGION: région dans laquelle exécuter la charge de travail par lot Managed Service pour Apache Spark.
Une fois le job terminé, un résultat semblable aux lignes suivantes s'affiche :
Batch [cb9d84e9489d408baca4f9e7ab4c64ff] finished. metadata: '@type': type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata batch: projects/your-project/locations/us-central1/batches/cb9d84e9489d408baca4f9e7ab4c64ff batchUuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 createTime: '2026-01-24T00:10:50.224097Z' description: Batch labels: goog-dataproc-batch-id: cb9d84e9489d408baca4f9e7ab4c64ff goog-dataproc-batch-uuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 goog-dataproc-drz-resource-uuid: batch-54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 goog-dataproc-location: us-central1 operationType: BATCH name: projects/your-project/regions/us-central1/operations/32287926-5f61-3572-b54a-fbad8940d6ef
Interroger la table depuis BigQuery
Dans la Google Cloud console, accédez à BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante. La requête utilise la syntaxe
project.catalog.namespace.table.SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.quickstart_namespace.quickstart_table`;Remplacez :
PROJECT_ID: ID de votre projet. Google CloudLAKEHOUSE_CATALOG_ID: identifiant du catalogue à utiliser dans les requêtes BigQuery.
Cliquez sur Exécuter.
Les résultats de la requête affichent les données que vous avez insérées avec le job PySpark.
Libérer de l'espace
Pour éviter que les ressources utilisées dans cette démonstration soient facturées sur votre Google Cloud compte pour les ressources utilisées sur cette page, procédez comme suit :
Mettez à jour
quickstart.pypour supprimer l'espace de noms (ensemble de données) et la table :from pyspark.sql import SparkSession spark = SparkSession.builder.appName("quickstart").getOrCreate() # Delete the table first, then the namespace (dataset) spark.sql("DROP TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table") spark.sql("DROP NAMESPACE `quickstart_catalog`.quickstart_namespace")Importez-le dans le bucket Cloud Storage :
Dans la Google Cloud console, accédez à Buckets Cloud Storage.
Cliquez sur le nom de votre bucket.
Dans l'onglet Objets, cliquez sur Importer > Importer des fichiers.
Dans l'explorateur de fichiers, sélectionnez le fichier
quickstart.py, puis cliquez sur Ouvrir.
Dans Cloud Shell, exécutez un autre job par lot Managed Service pour Apache Spark à l'aide du script mis à jour
quickstart.py.gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \ --project=PROJECT_ID \ --region=REGION \ --version=2.2 \ --properties="\ spark.sql.defaultCatalog=quickstart_catalog,\ spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.quickstart_catalog.type=rest,\ spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\ spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"
Remplacez les éléments suivants :
BUCKET_NAME: nom du bucket Cloud Storage contenant votre fichier d'application PySpark.LAKEHOUSE_CATALOG_ID: nom de votre catalogue BigLake.PROJECT_ID: ID de votre Google Cloud projet.REGION: région dans laquelle exécuter la charge de travail par lot Managed Service pour Apache Spark.
Accédez à Lakehouse.
Sélectionnez votre catalogue
LAKEHOUSE_CATALOG_ID, puis cliquez sur Supprimer.Accédez à Buckets Cloud Storage.
Sélectionnez votre bucket, puis cliquez sur Supprimer.
Étape suivante
- Découvrez comment gérer les catalogues Lakehouse.
- Découvrez les tables Apache Iceberg compatibles avec le catalogue d'environnements d'exécution Lakehouse.