Esegui query sulle tabelle Iceberg con il catalogo runtime Lakehouse, Spark e BigQuery

Scopri come utilizzare Lakehouse for Apache Iceberg creando un catalogo runtime Lakehouse con un catalogo multi-bucket. Questa configurazione stabilisce un livello di metadati gestiti che connette i motori di elaborazione open source con Google Cloud.

Esegui quindi un job PySpark Managed Service for Apache Spark per creare una Lakehouse Iceberg REST catalog table utilizzando l'endpoint Apache Iceberg REST catalog.

Successivamente, puoi eseguire query sulla tabella risultante direttamente dalla Google Cloud console in BigQuery utilizzando la project.catalog.namespace.table sintassi.

Prima di iniziare

  1. Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  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

Concedi ruoli IAM

Per consentire al job PySpark Managed Service for Apache Spark e al catalogo runtime Lakehouse di utilizzare Cloud Storage e BigQuery, concedi i ruoli necessari alle entità corrispondenti:

  1. Nella Google Cloud console, fai clic su Attiva Cloud Shell.

    Attiva Cloud Shell

  2. Fai clic su Autorizza.

  3. Concedi il ruolo Worker Dataproc al service account predefinito Compute Engine del progetto, che Managed Service for Apache Spark utilizza per impostazione predefinita come descritto in Service account Managed Service for 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. Concedi il ruolo Consumer utilizzo servizi al account di servizio predefinito Compute Engine del progetto.

    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. Concedi il ruolo Editor BigLake al account di servizio predefinito Compute Engine del progetto.

    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. Concedi il ruolo Data Editor di BigQuery al account di servizio predefinito Compute Engine del progetto.

    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"

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID Google Cloud progetto

Crea un catalogo runtime Lakehouse

Crea un catalogo runtime Lakehouse per gestire i metadati delle tabelle Iceberg.

  1. In Cloud Shell, esegui il comando seguente per creare il tuo multi-bucket (bl://) con la distribuzione delle credenziali:

    gcloud biglake iceberg catalogs create LAKEHOUSE_CATALOG_ID \
        --project=PROJECT_ID \
        --catalog-type=biglake \
        --default-location=gs://BUCKET_NAME \
        --credential-mode=vended-credentials

    Sostituisci quanto segue:

    • LAKEHOUSE_CATALOG_ID: un nome univoco per il catalogo.
    • PROJECT_ID: l' Google Cloud ID progetto.
    • BUCKET_NAME: il nome del bucket Cloud Storage che contiene il file dell'applicazione PySpark.
  2. Concedi le autorizzazioni sul bucket al account di servizio del catalogo:

    1. Nella Google Cloud console, vai a Lakehouse.

      Vai a Lakehouse

    2. Fai clic sul nome del catalogo che hai appena creato (LAKEHOUSE_CATALOG_ID).

    3. In Metodo di autenticazione, fai clic su Imposta autorizzazioni bucket.

    4. Nella finestra di dialogo, fai clic su Conferma. In questo modo, verifichi che il account di servizio del catalogo abbia il ruolo Utente oggetti Storage sul bucket.

Crea ed esegui un job PySpark

Per creare ed eseguire query su una tabella Iceberg, crea prima un job PySpark con le istruzioni Spark SQL necessarie. Quindi esegui il job con Managed Service for Apache Spark.

Crea uno script PySpark con uno spazio dei nomi e una tabella

In un editor di testo, crea un file denominato quickstart.py con il seguente contenuto.

Questo script PySpark inizializza una sessione Spark per eseguire diverse operazioni su un catalogo Iceberg. Lo script crea prima uno spazio dei nomi, se non ne esiste già uno. Quindi crea una tabella Iceberg denominata quickstart_table con uno schema di base. Dopo aver creato la tabella, lo script inserisce tre righe di dati. Infine, esegue una query sulla tabella per recuperare tutti i record inseriti.

Questi valori vengono utilizzati nel passaggio successivo quando esegui il 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')
""")

Carica lo script nel bucket Cloud Storage

Dopo aver creato lo script quickstart.py, caricalo nel bucket Cloud Storage.

  1. Nella Google Cloud console, vai a Bucket Cloud Storage.

    Vai a Bucket

  2. Fai clic sul nome del bucket.

  3. Nella scheda Oggetti, fai clic su Carica > Carica file.

  4. Nel browser dei file, seleziona il file quickstart.py e fai clic su Apri.

Esegui il job PySpark

Dopo aver caricato lo script quickstart.py, eseguilo come job batch Managed Service for Apache Spark.

  1. In Cloud Shell, esegui il seguente job batch Managed Service for Apache Spark utilizzando lo 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"

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket Cloud Storage che contiene il file dell'applicazione PySpark.

    • LAKEHOUSE_CATALOG_ID: il nome del catalogo BigLake. Questo nome viene utilizzato in un secondo momento quando esegui una query sul catalogo in BigQuery, utilizzando la sintassi P.C.N.T. Ad esempio, my-project.biglake-catalog.quickstart_namespace.quickstart_table.

    • PROJECT_ID: l' Google Cloud ID progetto.

    • REGION: la regione in cui eseguire il workload batch Managed Service for Apache Spark.

    Al termine del job, viene visualizzato un output simile al seguente:

    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
    

Esegui query sulla tabella da BigQuery

  1. Nella Google Cloud console, vai a BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione. La query utilizza la sintassi project.catalog.namespace.table.

    SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.quickstart_namespace.quickstart_table`;
    

    Sostituisci:

    • PROJECT_ID: il tuo Google Cloud progetto ID.

    • LAKEHOUSE_CATALOG_ID: l'identificatore del catalogo da utilizzare nelle query BigQuery.

  3. Fai clic su Esegui.

    I risultati della query mostrano i dati che hai inserito con il job PySpark.

Libera spazio

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

  1. Aggiorna quickstart.py per eliminare lo spazio dei nomi (set di dati) e la tabella:

    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")
    

    Caricalo nel bucket Cloud Storage:

    1. Nella Google Cloud console, vai a Bucket Cloud Storage.

      Vai a Bucket

    2. Fai clic sul nome del bucket.

    3. Nella scheda Oggetti, fai clic su Carica > Carica file.

    4. Nel browser dei file, seleziona il file quickstart.py e fai clic su Apri.

    In Cloud Shell, esegui un altro job batch Managed Service for Apache Spark utilizzando lo script aggiornato 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"

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket Cloud Storage che contiene il file dell'applicazione PySpark.

    • LAKEHOUSE_CATALOG_ID: il nome del catalogo BigLake.

    • PROJECT_ID: l' Google Cloud ID progetto.

    • REGION: la regione in cui eseguire il workload batch Managed Service for Apache Spark.

  2. Vai a Lakehouse.

    Vai a Lakehouse

  3. Seleziona il catalogo LAKEHOUSE_CATALOG_ID e fai clic su Elimina.

  4. Vai a Bucket Cloud Storage.

    Vai a Bucket

  5. Seleziona il bucket e fai clic su Elimina.

Passaggi successivi