En este documento, se muestra cómo crear una tabla de Apache Iceberg con metadatos en el catálogo de entorno de ejecución de Lakehouse con el servicio de Managed Service para Apache Spark Jobs, la CLI de Spark SQL o la interfaz web de Zeppelin que se ejecuta en un clúster de Managed Service para Apache Spark.
Antes de comenzar
Si aún no lo hiciste, crea un Google Cloud proyecto, un bucket de Cloud Storage y un clúster de Managed Service para Apache Spark.
Configura tu proyecto
- Accede a tu cuenta de Google Cloud . Si es la primera vez que usas 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 Dataproc, BigQuery, and Cloud Storage APIs, if any are not already enabled.
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.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
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 Dataproc, BigQuery, and Cloud Storage APIs, if any are not already enabled.
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.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Crea un bucket de Cloud Storage en tu proyecto.
- En la consola de Google Cloud , ve a la página Buckets de Cloud Storage.
- Haz clic en Crear.
- En la página Crear un bucket, ingresa la información de tu bucket. Para ir al paso siguiente, haz clic en Continuar.
-
En la sección Primeros pasos, haz lo siguiente:
- Ingresa un nombre único a nivel global que cumpla con los requisitos de nomenclatura de buckets.
- Para agregar una
etiqueta de bucket,
expande la sección Etiquetas (),
haz clic en add_box
Agregar etiqueta y especifica una
keyy unvaluepara tu etiqueta.
-
En la sección Elige dónde almacenar tus datos, haz lo siguiente:
- Selecciona un tipo de ubicación
- En el menú desplegable Tipo de ubicación, elige una ubicación en la que se almacenarán de forma permanente los datos de tu bucket.
- Si seleccionas el tipo de ubicación birregional, también puedes habilitar la replicación turbo con la casilla de verificación correspondiente.
- Para configurar la replicación bucket buckets, selecciona
Agregar replicación entre bucket a través del Servicio de transferencia de almacenamiento y
sigue estos pasos:
Configura la replicación entre buckets
- En el menú Bucket, selecciona un bucket.
En la sección Configuración de replicación, haz clic en Configurar para establecer la configuración del trabajo de replicación.
Aparecerá el panel Configurar la replicación entre buckets.
- Para filtrar los objetos que se replicarán por prefijo de nombre de objeto, ingresa un prefijo con el que quieras incluir o excluir objetos y, luego, haz clic en Agregar un prefijo.
- Para establecer una clase de almacenamiento para los objetos replicados, selecciona una clase de almacenamiento en el menú Clase de almacenamiento. Si omites este paso, los objetos replicados usarán la clase de almacenamiento del bucket de destino de forma predeterminada.
- Haz clic en Listo.
-
En la sección Elige cómo almacenar tus datos, haz lo siguiente:
- Selecciona una clase de almacenamiento predeterminada para el bucket o Autoclass para la administración automática de clases de almacenamiento de los datos de tu bucket.
- Para habilitar el espacio de nombres jerárquico, en la sección Optimizar el almacenamiento para cargas de trabajo con uso intensivo de datos, selecciona Habilitar el espacio de nombres jerárquico en este bucket.
- En la sección Elige cómo controlar el acceso a los objetos, selecciona si tu bucket aplica o no la prevención del acceso público y elige un método de control de acceso para los objetos del bucket.
-
En la sección Elige cómo proteger los datos de objetos, haz lo siguiente:
- Selecciona cualquiera de las opciones de Protección de datos que
desees configurar para tu bucket.
- Para habilitar la eliminación no definitiva, haz clic en la casilla de verificación Política de eliminación no definitiva (para la recuperación de datos) y especifica la cantidad de días que deseas conservar los objetos después de la eliminación.
- Para configurar el control de versiones de objetos, haz clic en la casilla de verificación Control de versiones de objetos (para el control de versión) y especifica la cantidad máxima de versiones por objeto y la cantidad de días después de los cuales vencen las versiones no actuales.
- Para habilitar la política de retención en objetos y buckets, haz clic en la casilla de verificación Retención (para cumplimiento) y, luego, haz lo siguiente:
- Para habilitar el bloqueo de retención de objetos, haz clic en la casilla de verificación Habilitar la retención de objetos.
- Para habilitar el Bloqueo del bucket, haz clic en la casilla de verificación Establecer política de retención del bucket y elige una unidad de tiempo y una duración para tu período de retención.
- Para elegir cómo se encriptarán los datos de tus objetos, expande la sección Encriptación de datos () y selecciona un método de encriptación de datos.
- Selecciona cualquiera de las opciones de Protección de datos que
desees configurar para tu bucket.
-
En la sección Primeros pasos, haz lo siguiente:
- Haz clic en Crear.
Crea un clúster de Managed Service para Apache Spark. Para ahorrar recursos y costos, puedes crear un clúster de Managed Service para Apache Spark de un solo nodo para ejecutar los ejemplos que se presentan en este documento.
La subred de la región en la que se crea el clúster debe tener habilitado el Acceso privado a Google (PGA).
.Si deseas ejecutar el ejemplo de la interfaz web de Zeppelin en esta guía, debes usar o crear un clúster de Managed Service para Apache Spark con el componente opcional de Zeppelin habilitado.
Otorga roles a una cuenta de servicio personalizada (si es necesario): De forma predeterminada, las VMs del clúster de Managed Service para Apache Spark usan la cuenta de servicio predeterminada de Compute Engine para interactuar con Managed Service para Apache Spark. Si deseas especificar una cuenta de servicio personalizada cuando crees tu clúster, esta debe tener el rol Trabajador de Managed Service para Apache Spark (
roles/dataproc.worker) o un rol personalizado con los permisos necesarios del rol de trabajador.
Asignación de la base de datos de OSS al conjunto de datos de BigQuery
Ten en cuenta la siguiente asignación entre los términos de la base de datos de código abierto y los del conjunto de datos de BigQuery:
| Base de datos de OSS | Conjunto de datos de BigQuery |
|---|---|
| Espacio de nombres y base de datos | Conjunto de datos |
| Tabla particionada o no particionada | Tabla |
| Ver | Ver |
Crea una tabla de Iceberg
En esta sección, se muestra cómo crear una tabla de Iceberg con metadatos en el catálogo del entorno de ejecución de Lakehouse. Para ello, envía un código de Spark SQL a Managed Service para Apache Spark, la CLI de Spark SQL y la interfaz web del componente de Zeppelin, que se ejecutan en un clúster de Managed Service para Apache Spark.
Trabajo de Managed Service para Apache Spark
Puedes enviar un trabajo a Managed Service para Apache Spark enviando el trabajo a un clúster de Managed Service para Apache Spark con la Google Cloud consola o la Google Cloud CLI, o bien a través de una solicitud REST HTTP o una llamada programática gRPC de Managed Service para Apache Spark a las bibliotecas cliente de Cloud de la API de Jobs.
En los ejemplos de esta sección,se muestra cómo enviar un trabajo de Spark SQL de Managed Service para Apache Spark al servicio de Managed Service para Apache Spark para crear una tabla de Iceberg con metadatos en BigQuery con gcloud CLI, Google Cloud la consola o la API de REST.
Prepara archivos de trabajo
Sigue estos pasos para crear un archivo de trabajo de Spark SQL. El archivo contiene comandos de Spark SQL para crear y actualizar una tabla de Iceberg.
En una ventana de terminal local o en Cloud Shell, usa un editor de texto, como
vionano, para copiar los siguientes comandos en un archivoiceberg-table.sqly, luego, guarda el archivo en el directorio actual.USE CATALOG_NAME; CREATE NAMESPACE IF NOT EXISTS example_namespace; USE example_namespace; DROP TABLE IF EXISTS example_table; CREATE TABLE example_table (id int, data string) USING ICEBERG LOCATION 'gs://BUCKET/WAREHOUSE_FOLDER'; INSERT INTO example_table VALUES (1, 'first row'); ALTER TABLE example_table ADD COLUMNS (newDoubleCol double); DESCRIBE TABLE example_table;
Reemplaza lo siguiente:
- CATALOG_NAME: Es el nombre del catálogo de Iceberg.
- BUCKET y WAREHOUSE_FOLDER: Bucket y carpeta de Cloud Storage que se usan para el almacén de Iceberg.
Usa gcloud CLI para copiar el
iceberg-table.sqllocal en tu bucket de Cloud Storage.gcloud storage cp iceberg-table.sql gs://BUCKET/
A continuación, descarga y copia el archivo JAR iceberg-spark-runtime-3.5_2.12-1.6.1 en Cloud Storage.
En una ventana de la terminal local o en Cloud Shell, ejecuta el siguiente comando
curlpara descargar el archivo JARiceberg-spark-runtime-3.5_2.12-1.6.1en el directorio actual.curl -o iceberg-spark-runtime-3.5_2.12-1.6.1.jar https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar
Usa la gcloud CLI para copiar el archivo JAR
iceberg-spark-runtime-3.5_2.12-1.6.1local del directorio actual a tu bucket en Cloud Storage.gcloud storage cp iceberg-spark-runtime-3.5_2.12-1.6.1.jar gs://BUCKET/
Envía el trabajo de Spark SQL
Selecciona una pestaña para seguir las instrucciones para enviar el trabajo de Spark SQL a Managed Service para Apache Spark con la gcloud CLI, la consola deGoogle Cloud o la API de REST de Managed Service para Apache Spark.
gcloud
Ejecuta el siguiente comando gcloud dataproc jobs submit spark-sql de forma local en una ventana de la terminal local o en Cloud Shell para enviar el trabajo de Spark SQL y crear la tabla de Iceberg.
gcloud dataproc jobs submit spark-sql \ --project=PROJECT_ID \ --cluster=CLUSTER_NAME \ --region=REGION \ --jars="gs://BUCKET/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR" \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER" \ -f="gs://BUCKETiceberg-table.sql"
Notas:
- PROJECT_ID: Es el ID del proyecto de Google Cloud . Los IDs del proyecto se enumeran en la sección Información del proyecto del panel de la consola Google Cloud .
- CLUSTER_NAME: Es el nombre de tu clúster de Managed Service para Apache Spark.
- REGION: La región de Compute Engine en la que se encuentra tu clúster.
BIGLAKE_ICEBERG_CATALOG_JAR: Es el URI de Cloud Storage del complemento del catálogo personalizado de Iceberg que se usará. Según el número de versión de Iceberg, selecciona una de las siguientes opciones:- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
- Iceberg 1.9.1:
- CATALOG_NAME: Es el nombre del catálogo de Iceberg.
- BUCKET y WAREHOUSE_FOLDER: Bucket y carpeta de Cloud Storage que se usan para el almacén de Iceberg.
- LOCATION: Una ubicación de BigQuery compatible. La ubicación predeterminada es "US".
--jars: Los archivos JAR enumerados son necesarios para crear metadatos de tablas en el catálogo del entorno de ejecución de Lakehouse.--properties: Propiedades del catálogo.-f: Es el archivo de trabajoiceberg-table.sqlque copiaste en tu bucket de Cloud Storage.
Consulta la descripción de la tabla en el resultado de la terminal cuando finalice el trabajo.
Time taken: 2.194 seconds id int data string newDoubleCol double Time taken: 1.479 seconds, Fetched 3 row(s) Job JOB_ID finished successfully.
Para ver los metadatos de la tabla en BigQuery
En la consola de Google Cloud , ve a la página BigQuery.
Visualiza los metadatos de la tabla de Iceberg.
Console
Sigue estos pasos para usar la consola de Google Cloud y enviar el trabajo de Spark SQL a Managed Service para Apache Spark para crear una tabla de Iceberg con metadatos en el catálogo de entornos de ejecución de Lakehouse.
En la consola de Google Cloud , ve a Managed Service para Apache Spark Enviar un trabajo.
Ve a la página Submit a job y, luego, completa los siguientes campos:
- ID del trabajo: Acepta el ID sugerido o inserta tu propio ID.
- Región: Selecciona la región en la que se encuentra tu clúster.
- Clúster: Selecciona tu clúster.
- Tipo de trabajo: Selecciona
SparkSql. - Tipo de fuente de la búsqueda: Selecciona
Query file. - Archivo de consulta: Insertar
gs://BUCKET/iceberg-table.sql - Archivos JAR: Inserta lo siguiente:
gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR
- BIGLAKE_ICEBERG_CATALOG_JAR: Es el URI de Cloud Storage del complemento del catálogo personalizado de Iceberg que se usará. Según el número de versión de Iceberg, selecciona una de las siguientes opciones:
- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
- Iceberg 1.9.1:
- Propiedades: Haz clic en Agregar propiedad cinco veces para crear una lista de cinco campos de entrada
keyvaluey, luego, copia los siguientes pares de Clave y Valor para definir cinco propiedades.# Clave Valor 1. spark.sql.catalog.CATALOG_NAMEorg.apache.iceberg.spark.SparkCatalog2. spark.sql.catalog.CATALOG_NAME.catalog-implorg.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog3. spark.sql.catalog.CATALOG_NAME.gcp_projectPROJECT_ID4. spark.sql.catalog.CATALOG_NAME.gcp_locationLOCATION5. spark.sql.catalog.CATALOG_NAME.warehousegs://BUCKET/WAREHOUSE_FOLDER
Notas:
- CATALOG_NAME: Es el nombre del catálogo de Iceberg.
- PROJECT_ID: Es el ID del proyecto de Google Cloud . Los IDs de proyecto se enumeran en la sección Información del proyecto del panel de la consola de Google Cloud . Región en la que se encuentra tu clúster.
- LOCATION: Una ubicación de BigQuery compatible. La ubicación predeterminada es "US".
- BUCKET y WAREHOUSE_FOLDER: Bucket y carpeta de Cloud Storage que se usan para el almacén de Iceberg.
Haz clic en Enviar.
Para supervisar el progreso del trabajo y ver su resultado, ve a la página Trabajos de Managed Service para Apache Spark en la consola de Google Cloud y, luego, haz clic en
Job IDpara abrir la página Detalles del trabajo.
Para ver los metadatos de la tabla en BigQuery
En la consola de Google Cloud , ve a la página BigQuery.
Visualiza los metadatos de la tabla de Iceberg.
REST
Puedes usar la API de jobs.submit de Managed Service para Apache Spark para enviar el trabajo de Spark SQL a Managed Service para Apache Spark y crear una tabla de Iceberg con metadatos en el catálogo del entorno de ejecución de Lakehouse.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: Es el ID del proyecto de Google Cloud . Los IDs de los proyectos se enumeran en la sección Información del proyecto del panel de la consola de Google Cloud .
- CLUSTER_NAME: Es el nombre de tu clúster de Managed Service para Apache Spark.
- REGION: La región de Compute Engine en la que se encuentra tu clúster.
- CATALOG_NAME: Es el nombre del catálogo de Iceberg.
- BUCKET y WAREHOUSE_FOLDER: Bucket y carpeta de Cloud Storage que se usan para el almacén de Iceberg. LOCATION: Una ubicación de BigQuery compatible. La ubicación predeterminada es "US".
BIGLAKE_ICEBERG_CATALOG_JAR: Es el URI de Cloud Storage del complemento del catálogo personalizado de Iceberg que se usará. Según el número de versión de Iceberg, selecciona una de las siguientes opciones:- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
- Iceberg 1.9.1:
jarFileUris: Los archivos JAR enumerados son necesarios para crear metadatos de tablas en BigQuery Metastore.properties: Propiedades del catálogo.queryFileUri: Es el archivo de trabajoiceberg-table.sqlque copiaste en tu bucket de Cloud Storage.
Método HTTP y URL:
POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/jobs:submit
Cuerpo JSON de la solicitud:
{
"projectId": "PROJECT_ID",
"job": {
"placement": {
"clusterName": "CLUSTER_NAME"
},
"statusHistory": [],
"reference": {
"jobId": "",
"projectId": "PROJECT_ID"
},
"sparkSqlJob": {
"properties": {
"spark.sql.catalog."CATALOG_NAME": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog."CATALOG_NAME".catalog-impl": "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog",
"spark.sql.catalog."CATALOG_NAME".gcp_project": "PROJECT_ID",
"spark.sql.catalog."CATALOG_NAME".gcp_location": "LOCATION",
"spark.sql.catalog."CATALOG_NAME".warehouse": "gs://BUCKET/WAREHOUSE_FOLDER"
},
"jarFileUris": [
"gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR"
],
"scriptVariables": {},
"queryFileUri": "gs://BUCKET/iceberg-table.sql"
}
}
}
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{
"reference": {
"projectId": "PROJECT_ID",
"jobId": "..."
},
"placement": {
"clusterName": "CLUSTER_NAME",
"clusterUuid": "..."
},
"status": {
"state": "PENDING",
"stateStartTime": "..."
},
"submittedBy": "USER",
"sparkSqlJob": {
"queryFileUri": "gs://BUCKET/iceberg-table.sql",
"properties": {
"spark.sql.catalog.USER_catalog": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.USER_catalog.catalog-impl": "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog",
"spark.sql.catalog.USER_catalog.gcp_project": "PROJECT_ID",
"spark.sql.catalog.USER_catalog.gcp_location": "LOCATION",
"spark.sql.catalog.USER_catalog.warehouse": "gs://BUCKET/WAREHOUSE_FOLDER"
},
"jarFileUris": [
"gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar",
"BIGLAKE_ICEBERG_CATALOG_JAR"
]
},
"driverControlFilesUri": "gs://dataproc-...",
"driverOutputResourceUri": "gs://dataproc-.../driveroutput",
"jobUuid": "...",
"region": "REGION"
}
Para supervisar el progreso del trabajo y ver su resultado, ve a la página Trabajos de Managed Service para Apache Spark en la consola de Google Cloud y, luego, haz clic en Job ID para abrir la página Detalles del trabajo.
Para ver los metadatos de la tabla en BigQuery
En la consola de Google Cloud , ve a la página BigQuery.
Visualiza los metadatos de la tabla de Iceberg.
CLI de Spark SQL
En los siguientes pasos, se muestra cómo crear una tabla de Iceberg con metadatos de tabla almacenados en el catálogo de entorno de ejecución de Lakehouse con la CLI de Spark SQL que se ejecuta en el nodo principal de un clúster de Managed Service para Apache Spark.
Usa SSH para conectarte al nodo principal de tu clúster de Managed Service para Apache Spark.
En la terminal de la sesión de SSH, usa el editor de texto
vionanopara copiar los siguientes comandos en un archivoiceberg-table.sql.SET CATALOG_NAME = `CATALOG_NAME`; SET BUCKET = `BUCKET`; SET WAREHOUSE_FOLDER = `WAREHOUSE_FOLDER`; USE `${CATALOG_NAME}`; CREATE NAMESPACE IF NOT EXISTS `${CATALOG_NAME}`.example_namespace; DROP TABLE IF EXISTS `${CATALOG_NAME}`.example_namespace.example_table; CREATE TABLE `${CATALOG_NAME}`.example_namespace.example_table (id int, data string) USING ICEBERG LOCATION 'gs://${BUCKET}/${WAREHOUSE_FOLDER}'; INSERT INTO `${CATALOG_NAME}`.example_namespace.example_table VALUES (1, 'first row'); ALTER TABLE `${CATALOG_NAME}`.example_namespace.example_table ADD COLUMNS (newDoubleCol double); DESCRIBE TABLE `${CATALOG_NAME}`.example_namespace.example_table;Reemplaza lo siguiente:
- CATALOG_NAME: Es el nombre del catálogo de Iceberg.
- BUCKET y WAREHOUSE_FOLDER: Bucket y carpeta de Cloud Storage que se usan para el almacén de Iceberg.
En la terminal de la sesión de SSH, ejecuta el siguiente comando
spark-sqlpara crear la tabla iceberg.spark-sql \ --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1 \ --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR \ --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \ --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \ --conf spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION \ --conf spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER \ -f iceberg-table.sql
Reemplaza lo siguiente:
BIGLAKE_ICEBERG_CATALOG_JAR: Es el URI de Cloud Storage del complemento del catálogo personalizado de Iceberg que se usará. Según el número de versión de Iceberg, selecciona una de las siguientes opciones:- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
- Iceberg 1.9.1:
- PROJECT_ID: Es el ID del proyecto de Google Cloud . Los IDs del proyecto se enumeran en la sección Información del proyecto del panel de la consola Google Cloud .
- LOCATION: Una ubicación de BigQuery compatible. La ubicación predeterminada es "US".
Visualiza los metadatos de la tabla en BigQuery
En la consola de Google Cloud , ve a la página BigQuery.
Visualiza los metadatos de la tabla de Iceberg.
Interfaz web de Zeppelin
En los siguientes pasos, se muestra cómo crear una tabla de Iceberg con metadatos de tabla almacenados en el catálogo de entornos de ejecución de Lakehouse con la interfaz web de Zeppelin que se ejecuta en el nodo principal de un clúster de Managed Service para Apache Spark .
En la consola de Google Cloud , ve a la página Clústeres de Managed Service para Apache Spark.
Ir a la página Clústeres de Managed Service para Apache Spark
Selecciona el nombre de tu clúster para abrir la página Detalles del clúster.
Haz clic en la pestaña Interfaces web para mostrar una lista de vínculos de Component Gateway a las interfaces web de los componentes predeterminados y opcionales instalados en el clúster.
Haz clic en el vínculo Zeppelin para abrir la interfaz web de Zeppelin.
En la interfaz web de Zeppelin, haz clic en el menú anonymous y, luego, en Interpreter para abrir la página Interpreters.
Agrega dos archivos JAR al intérprete de Zeppelin Spark de la siguiente manera:
- Escribe "Spark" en el cuadro
Search interpreterspara desplazarte a la sección del intérprete de Spark. - Haga clic en editar.
Pega lo siguiente en el campo spark.jars:
https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR
Agrega la siguiente nota:
BIGLAKE_ICEBERG_CATALOG_JAR: Es el URI de Cloud Storage del complemento del catálogo personalizado de Iceberg que se usará. Según el número de versión de Iceberg, selecciona una de las siguientes opciones:- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
Haz clic en Guardar en la parte inferior de la sección del intérprete de Spark y, luego, en Aceptar para actualizar el intérprete y reiniciarlo con la nueva configuración.
- Escribe "Spark" en el cuadro
En el menú del notebook de Zeppelin, haz clic en Create new note.
En el diálogo Crear una nota nueva, ingresa un nombre para el notebook y acepta el intérprete spark predeterminado. Haz clic en Crear para abrir el notebook.
Copia el siguiente código de PySpark en tu notebook de Zeppelin después de completar las variables.
%pyspark
from pyspark.sql import SparkSession
project_id = "PROJECT_ID" catalog = "CATALOG_NAME" namespace = "NAMESPACE" location = "LOCATION" warehouse_dir = "gs://BUCKET/WAREHOUSE_DIRECTORY"
spark = SparkSession.builder \ .appName("BigQuery Metastore Iceberg") \ .config(f"spark.sql.catalog.{catalog}", "org.apache.iceberg.spark.SparkCatalog") \ .config(f"spark.sql.catalog.{catalog}.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \ .config(f"spark.sql.catalog.{catalog}.gcp_project", f"{project_id}") \ .config(f"spark.sql.catalog.{catalog}.gcp_location", f"{location}") \ .config(f"spark.sql.catalog.{catalog}.warehouse", f"{warehouse_dir}") \ .getOrCreate()
spark.sql(f"USE `{catalog}`;") spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;") spark.sql(f"USE `{namespace}`;")
\# Create table and display schema (without LOCATION) spark.sql("DROP TABLE IF EXISTS example_iceberg_table") spark.sql("CREATE TABLE example_iceberg_table (id int, data string) USING ICEBERG") spark.sql("DESCRIBE example_iceberg_table;")
\# Insert table data. spark.sql("INSERT INTO example_iceberg_table VALUES (1, 'first row');")
\# Alter table, then display schema. spark.sql("ALTER TABLE example_iceberg_table ADD COLUMNS (newDoubleCol double);")
\# Select and display the contents of the table. spark.sql("SELECT * FROM example_iceberg_table").show()Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto de Google Cloud . Los IDs del proyecto se enumeran en la sección Información del proyecto del panel de la consola Google Cloud .
- CATALOG_NAME y NAMESPACE: El nombre del catálogo de Iceberg y el espacio de nombres se combinan para identificar la tabla de Iceberg (
catalog.namespace.table_name). - LOCATION: Una ubicación de BigQuery compatible. La ubicación predeterminada es "US".
- BUCKET y WAREHOUSE_DIRECTORY: Bucket y carpeta de Cloud Storage que se usan como directorio de almacén de Iceberg.
Haz clic en el ícono de ejecución o presiona
Shift-Enterpara ejecutar el código. Cuando el trabajo finaliza, el mensaje de estado muestra "Spark Job Finished" y el resultado muestra el contenido de la tabla:
Visualiza los metadatos de la tabla en BigQuery
En la consola de Google Cloud , ve a la página BigQuery.
Visualiza los metadatos de la tabla de Iceberg.