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

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigLake, Dataproc APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigLake, Dataproc APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the APIs

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 :

  1. Dans la Google Cloud console, cliquez sur Activer Cloud Shell.

    Activer Cloud Shell

  2. Cliquez sur Autoriser.

  3. 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"
  4. 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"
  5. 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"
  6. 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.

  1. 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.
  2. Accordez des autorisations sur le bucket au compte de service du catalogue :

    1. Dans la Google Cloud console, accédez à Lakehouse.

      Accéder à Lakehouse

    2. Cliquez sur le nom du catalogue que vous venez de créer (LAKEHOUSE_CATALOG_ID).

    3. Sous Authentication method (Méthode d'authentification), cliquez sur Set bucket permissions (Définir les autorisations du bucket).

    4. 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.

  1. Dans la Google Cloud console, accédez à Buckets Cloud Storage.

    Accéder à la page "Buckets"

  2. Cliquez sur le nom de votre bucket.

  3. Dans l'onglet Objets, cliquez sur Importer > Importer des fichiers.

  4. 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.

  1. 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

  1. Dans la Google Cloud console, accédez à BigQuery.

    Accéder à BigQuery

  2. 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 Cloud

    • LAKEHOUSE_CATALOG_ID: identifiant du catalogue à utiliser dans les requêtes BigQuery.

  3. 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 :

  1. Mettez à jour quickstart.py pour 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 :

    1. Dans la Google Cloud console, accédez à Buckets Cloud Storage.

      Accéder à la page "Buckets"

    2. Cliquez sur le nom de votre bucket.

    3. Dans l'onglet Objets, cliquez sur Importer > Importer des fichiers.

    4. 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.

  2. Accédez à Lakehouse.

    Accéder à Lakehouse

  3. Sélectionnez votre catalogue LAKEHOUSE_CATALOG_ID, puis cliquez sur Supprimer.

  4. Accédez à Buckets Cloud Storage.

    Accéder à la page "Buckets"

  5. Sélectionnez votre bucket, puis cliquez sur Supprimer.

Étape suivante