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
- 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.
-
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.
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:
Nella Google Cloud console, fai clic su Attiva Cloud Shell.
Fai clic su Autorizza.
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"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"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"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.
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.
Concedi le autorizzazioni sul bucket al account di servizio del catalogo:
Nella Google Cloud console, vai a Lakehouse.
Fai clic sul nome del catalogo che hai appena creato (LAKEHOUSE_CATALOG_ID).
In Metodo di autenticazione, fai clic su Imposta autorizzazioni bucket.
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.
Nella Google Cloud console, vai a Bucket Cloud Storage.
Fai clic sul nome del bucket.
Nella scheda Oggetti, fai clic su Carica > Carica file.
Nel browser dei file, seleziona il file
quickstart.pye fai clic su Apri.
Esegui il job PySpark
Dopo aver caricato lo script quickstart.py, eseguilo come job batch Managed Service for Apache Spark.
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
Nella Google Cloud console, vai a BigQuery.
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.
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.
Aggiorna
quickstart.pyper 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:
Nella Google Cloud console, vai a Bucket Cloud Storage.
Fai clic sul nome del bucket.
Nella scheda Oggetti, fai clic su Carica > Carica file.
Nel browser dei file, seleziona il file
quickstart.pye 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.
Vai a Lakehouse.
Seleziona il catalogo
LAKEHOUSE_CATALOG_IDe fai clic su Elimina.Vai a Bucket Cloud Storage.
Seleziona il bucket e fai clic su Elimina.
Passaggi successivi
- Scopri come gestire i cataloghi Lakehouse.
- Scopri le tabelle Apache Iceberg supportate dal catalogo runtime Lakehouse.