Consulta tablas de Iceberg con el catálogo de entorno de ejecución de Lakehouse, Spark y BigQuery
Aprende a usar Lakehouse para Apache Iceberg creando un catálogo de entorno de ejecución de Lakehouse con un catálogo de bucket buckets. Esta configuración establece una capa de metadatos administrada que conecta motores de procesamiento de código abierto con Google Cloud.
Luego, ejecuta un trabajo de PySpark de Managed Service para Apache Spark para crear una tabla de catálogo REST de Lakehouse Iceberg con el extremo catálogo REST de Apache Iceberg.
Después, puedes consultar la tabla resultante directamente desde la Google Cloud consola
de BigQuery con la project.catalog.namespace.table sintaxis.
Antes de comenzar
- Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
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.
Asigna roles de IAM
Para permitir que el trabajo de PySpark de Managed Service para Apache Spark y el catálogo de entorno de ejecución de Lakehouse funcionen con Cloud Storage y BigQuery, otorga los roles necesarios a sus principales correspondientes:
En la Google Cloud consola de, haz clic en Activar Cloud Shell.
Haz clic en Autorizar.
Otorga el rol Trabajador de Dataproc a la cuenta de servicio predeterminada de Compute Engine del proyecto, que Managed Service para Apache Spark usa de forma predeterminada, como se detalla en Cuentas de servicio de Managed Service para 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"Otorga el rol Consumidor de Service Usage a la cuenta de servicio predeterminada de Compute Engine del proyecto.
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"Otorga el rol Editor de BigLake a la cuenta de servicio predeterminada de Compute Engine del proyecto.
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"Otorga el rol Editor de datos de BigQuery a la cuenta de servicio predeterminada de Compute Engine del proyecto.
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"Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .
Crea un catálogo de entorno de ejecución de Lakehouse
Crea un catálogo de entorno de ejecución de Lakehouse para administrar los metadatos de tus tablas de Iceberg.
En Cloud Shell, ejecuta el siguiente comando para crear tu bucket múltiple (
bl://) con la venta de credenciales:gcloud biglake iceberg catalogs create LAKEHOUSE_CATALOG_ID \ --project=PROJECT_ID \ --catalog-type=biglake \ --default-location=gs://BUCKET_NAME \ --credential-mode=vended-credentials
Reemplaza lo siguiente:
LAKEHOUSE_CATALOG_ID: Es un nombre único para tu catálogo.PROJECT_ID: Es el ID del Google Cloud proyecto de.BUCKET_NAME: Es el nombre del bucket de Cloud Storage que contiene el archivo de tu aplicación de PySpark.
Otorga permisos en el bucket a la cuenta de servicio del catálogo:
En la Google Cloud consola de, ve a Lakehouse.
Haz clic en el nombre del catálogo que acabas de crear (LAKEHOUSE_CATALOG_ID).
En Método de autenticación, haz clic en Establecer permisos del bucket.
En el diálogo, haz clic en Confirmar. Esto verifica que la cuenta de servicio de tu catálogo tenga el rol de Usuario de objetos de almacenamiento en tu bucket.
Crea y ejecuta un trabajo de PySpark
Para crear y consultar una tabla de Iceberg, primero crea un trabajo de PySpark con las instrucciones de Spark SQL necesarias. Luego, ejecuta el trabajo con Managed Service para Apache Spark.
Crea una secuencia de comandos de PySpark con un espacio de nombres y una tabla
En un editor de texto, crea un archivo llamado quickstart.py con el siguiente contenido.
Esta secuencia de comandos de PySpark inicializa una sesión de Spark para realizar varias operaciones en un catálogo de Iceberg. Primero, la secuencia de comandos crea un espacio de nombres, si aún no existe uno. Luego, crea una tabla de Iceberg llamada quickstart_table con un esquema básico. Después de crear la tabla, la secuencia de comandos inserta tres filas de datos.
Por último, consulta la tabla para recuperar todos los registros insertados.
Luego, estos valores se usan en el siguiente paso cuando ejecutas el trabajo 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')
""")
Sube la secuencia de comandos a tu bucket de Cloud Storage
Después de crear la secuencia de comandos quickstart.py, súbela al bucket de Cloud Storage.
En la Google Cloud consola de, ve a Buckets de Cloud Storage.
Haz clic en el nombre de tu bucket.
En la pestaña Objetos, haz clic en Subir > Subir archivos.
En el navegador de archivos, selecciona el archivo
quickstart.pyy, luego, haz clic en Abrir.
Ejecuta el trabajo de PySpark
Después de subir la secuencia de comandos quickstart.py, ejecútala como un trabajo por lotes de Managed Service para Apache Spark.
En Cloud Shell, ejecuta el siguiente trabajo por lotes de Managed Service para Apache Spark con la secuencia de comandos
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"
Reemplaza lo siguiente:
BUCKET_NAME: Es el nombre del bucket de Cloud Storage que contiene el archivo de tu aplicación de PySpark.LAKEHOUSE_CATALOG_ID: Es el nombre de tu catálogo de BigLake. Este nombre se usa más adelante cuando consultas tu catálogo en BigQuery con la sintaxis P.C.N.T. Por ejemplo,my-project.biglake-catalog.quickstart_namespace.quickstart_table.PROJECT_ID: Es el ID del Google Cloud proyecto de.REGION: Es la región en la que se ejecutará la carga de trabajo por lotes de Managed Service para Apache Spark.
Cuando se complete el trabajo, mostrará un resultado similar al siguiente:
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
Consulta la tabla desde BigQuery
En la Google Cloud consola de, ve a BigQuery.
En el editor de consultas, ingresa la siguiente instrucción. La consulta usa la sintaxis
project.catalog.namespace.table.SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.quickstart_namespace.quickstart_table`;Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de. Google CloudLAKEHOUSE_CATALOG_ID: Es el identificador del catálogo que se usará en las consultas de BigQuery.
Haz clic en Ejecutar.
Los resultados de la consulta muestran los datos que insertaste con el trabajo de PySpark.
Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu Google Cloud cuenta de por los recursos que usaste en esta página.
Actualiza
quickstart.pypara borrar el espacio de nombres (conjunto de datos) y la tabla: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")Súbelo al bucket de Cloud Storage:
En la Google Cloud consola de, ve a Buckets de Cloud Storage.
Haz clic en el nombre de tu bucket.
En la pestaña Objetos, haz clic en Subir > Subir archivos.
En el navegador de archivos, selecciona el archivo
quickstart.pyy, luego, haz clic en Abrir.
En Cloud Shell, ejecuta otro trabajo por lotes de Managed Service para Apache Spark con la secuencia de comandos
quickstart.pyactualizada.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"
Reemplaza lo siguiente:
BUCKET_NAME: Es el nombre del bucket de Cloud Storage que contiene el archivo de tu aplicación de PySpark.LAKEHOUSE_CATALOG_ID: Es el nombre de tu catálogo de BigLake.PROJECT_ID: Es el ID del Google Cloud proyecto de.REGION: Es la región en la que se ejecutará la carga de trabajo por lotes de Managed Service para Apache Spark.
Ve a Lakehouse.
Selecciona tu catálogo
LAKEHOUSE_CATALOG_IDy, luego, haz clic en Borrar.Ve a Buckets de Cloud Storage.
Selecciona tu bucket y haz clic en Borrar.