Usar BigLake Metastore con el catálogo REST de Iceberg
El catálogo REST de Apache Iceberg gestionado en BigLake Metastore crea interoperabilidad entre todos tus motores de consulta al ofrecer una única fuente fiable para todos tus datos de Iceberg. Permite que los motores de consultas, como Apache Spark, descubran, lean metadatos y gestionen tablas de Iceberg de forma coherente.
Las tablas de Iceberg que usas con el catálogo REST de Iceberg se denominan tablas de BigLake para Apache Iceberg (vista previa). Se trata de tablas Iceberg que se crean a partir de motores de código abierto y se almacenan en Cloud Storage. Los pueden leer buscadores de código abierto o BigQuery. Las escrituras solo se admiten desde motores de código abierto. En este documento, nos referimos a estas tablas como tablas de BigLake Iceberg.
Antes de empezar
-
Verify that billing is enabled for your Google Cloud project.
Consulta cómo comprobar si la facturación está habilitada en un proyecto. -
Enable the BigLake API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Opcional: consulta cómo funciona el metastore de BigLake y por qué deberías usarlo.
Roles obligatorios
Para obtener los permisos que necesitas para usar el catálogo REST de Iceberg en el metaalmacén de BigLake, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto o cuenta de servicio:
-
Administrador de BigLake (
roles/biglake.admin
) -
Administrador de almacenamiento (
roles/storage.admin
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Limitaciones
El catálogo REST de Iceberg está sujeto a las siguientes limitaciones:
- No se admiten segmentos multirregionales, birregionales ni segmentos con una ubicación de región personalizada.
Configurar un motor de consultas con el catálogo REST de Iceberg
Iceberg 1.10 o versiones posteriores
Iceberg 1.10 y las versiones posteriores tienen compatibilidad integrada con los flujos de autorización de Google en GoogleAuthManager
.
Dataproc Spark también es compatible con
GoogleAuthManager
en las siguientes versiones:
- Versiones de tiempo de ejecución 2.2 de Dataproc en Compute Engine 2.2.65 y posteriores
- Imágenes 2.2.60 y posteriores de Dataproc Serverless para Spark 2.2
- Versiones de tiempo de ejecución 2.3 de Dataproc en Compute Engine 2.3.11 y posteriores
- Imágenes 2.3.10 y posteriores de Dataproc Serverless para Spark 2.3
import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1beta/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://STORAGE_URI') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.hadoop.HadoopFileIO') \ .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .getOrCreate()
Haz los cambios siguientes:
CATALOG_NAME
: nombre del catálogo de Iceberg REST.APP_NAME
: un nombre para tu sesión de Spark.STORAGE_URI
: el URI del bucket de Cloud Storage que contiene tus tablas Iceberg de BigLake.PROJECT_ID
: el proyecto al que se le factura el uso del catálogo REST de Iceberg, que puede ser diferente del proyecto propietario del segmento de Cloud Storage. Para obtener más información sobre la configuración de proyectos al usar una API REST, consulta Parámetros del sistema.
Versiones anteriores de Iceberg
En el caso de las versiones de Iceberg anteriores a la 1.10, que no se incluyen en las imágenes de Dataproc, puedes configurar la autenticación OAuth estándar configurando una sesión con lo siguiente:
import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1beta/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://STORAGE_URI') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f"spark.sql.catalog.{catalog_name}.token", "TOKEN") \ .config(f"spark.sql.catalog.{catalog_name}.oauth2-server-uri", "https://oauth2.googleapis.com/token") \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.hadoop.HadoopFileIO') \ .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .getOrCreate()
Haz los cambios siguientes:
CATALOG_NAME
: nombre del catálogo de Iceberg REST.APP_NAME
: un nombre para tu sesión de Spark.STORAGE_URI
: el URI del bucket de Cloud Storage que contiene tus tablas Iceberg de BigLake.PROJECT_ID
: el proyecto al que se le factura el uso del catálogo REST de Iceberg, que puede ser diferente del proyecto propietario del segmento de Cloud Storage. Para obtener más información sobre la configuración de proyectos al usar una API REST, consulta Parámetros del sistema.TOKEN
: tu token de autenticación, que tiene una validez de una hora. Por ejemplo, un token generado congcloud auth application-default print-access-token
.
Crear un espacio de nombres
spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;") spark.sql("USE NAMESPACE_NAME;")
Sustituye NAMESPACE_NAME
por el nombre del espacio de nombres.
Crear una tabla
spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;") spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()
Haz los cambios siguientes:
NAMESPACE_NAME
: el nombre de tu espacio de nombresTABLE_NAME
: un nombre para la tabla
Mostrar lista de tablas
spark.sql("SHOW TABLES").show()
Insertar datos en la tabla
En el siguiente ejemplo se insertan datos de muestra en la tabla:
spark.sql("INSERT INTO TABLE_NAME VALUES (1, \"first row\"), (2, \"second row\"), (3, \"third row\");")
Consultar una tabla
En el siguiente ejemplo se seleccionan todos los datos de la tabla:
spark.sql("SELECT * FROM TABLE_NAME;").show()
En el siguiente ejemplo se consulta la misma tabla de BigQuery:
SELECT * FROM `CLOUD_STORAGE_BUCKET_NAME>NAMESPACE_NAME.TABLE_NAME`;
Sustituye CLOUD_STORAGE_BUCKET_NAME
por el nombre del segmento de Cloud Storage de tu catálogo REST de Iceberg. Por ejemplo, si su URI es gs://iceberg_bucket
, utilice iceberg_bucket
.
Modificar un esquema de tabla
En el siguiente ejemplo se añade una columna a la tabla:
spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);") spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()
Eliminar una tabla
En el siguiente ejemplo se elimina la tabla del espacio de nombres indicado:
spark.sql("DROP TABLE TABLE_NAME;")
Precios
Para obtener información sobre los precios, consulta los precios de BigLake.
Siguientes pasos
- Consulta más información sobre cómo gestionar recursos de Iceberg con BigLake Metastore.
- Consulta información sobre las funciones adicionales del metastore de BigLake.