Crea una tabla de Apache Iceberg con metadatos en BigQuery Metastore

En este documento, se muestra cómo crear una tabla de Apache Iceberg con metadatos en BigQuery Metastore con el servicio de trabajos de Dataproc, la CLI de Spark SQL o la interfaz web de Zeppelin que se ejecuta en un clúster de Dataproc.

Antes de comenzar

Si aún no lo hiciste, crea un proyecto de Google Cloud , un bucket de Cloud Storage y un clúster de Dataproc.

  1. Configura tu proyecto

    1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
    2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    3. Make sure that billing is enabled for your Google Cloud project.

    4. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

    5. Install the Google Cloud CLI.
    6. To initialize the gcloud CLI, run the following command:

      gcloud init
    7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    8. Make sure that billing is enabled for your Google Cloud project.

    9. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

    10. Install the Google Cloud CLI.
    11. To initialize the gcloud CLI, run the following command:

      gcloud init

  2. Crea un bucket de Cloud Storage en tu proyecto.

    1. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets page

    2. Click Create bucket.
    3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
      • For Name your bucket, enter a name that meets the bucket naming requirements.
      • For Choose where to store your data, do the following:
        • Select a Location type option.
        • Select a Location option.
      • For Choose a default storage class for your data, select a storage class.
      • For Choose how to control access to objects, select an Access control option.
      • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
    4. Click Create.

  3. Crea un clúster de Dataproc. Para ahorrar recursos y costos, puedes crear un clúster de Dataproc 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 Dataproc con el componente opcional de Zeppelin habilitado.

  4. Otorga roles a una cuenta de servicio personalizada (si es necesario): De forma predeterminada, las VMs del clúster de Dataproc usan la cuenta de servicio predeterminada de Compute Engine para interactuar con Dataproc. Si deseas especificar una cuenta de servicio personalizada cuando creas tu clúster, esta debe tener el rol de Trabajador de Dataproc (roles/dataproc.worker) o un rol personalizado con los permisos de rol de trabajador necesarios.

Asignación de bases de datos de OSS a conjuntos de datos de BigQuery

Ten en cuenta la siguiente asignación entre los términos de base de datos de código abierto y los conjuntos de datos de BigQuery:

Base de datos de OSS Conjunto de datos de BigQuery
Espacio de nombres, 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 BigQuery Metastore. Para ello, envía un código de Spark SQL al servicio de Dataproc, la CLI de Spark SQL y la interfaz web del componente Zeppelin, que se ejecutan en un clúster de Dataproc.

Trabajo de Dataproc

Puedes enviar un trabajo al servicio de Dataproc enviando el trabajo a un clúster de Dataproc con la consola de Google Cloud o la CLI de Google Cloud, o a través de una solicitud REST HTTP o una llamada programática de gRPC de Dataproc a las bibliotecas cliente de Cloud a la API de Dataproc Jobs.

En los ejemplos de esta sección, se muestra cómo enviar un trabajo de SQL de Spark de Dataproc al servicio de Dataproc para crear una tabla Iceberg con metadatos en BigQuery con gcloud CLI, la consola de Google Cloud o la API de REST de Dataproc.

Prepara archivos de trabajo

Sigue los pasos que se describen a continuación para crear un archivo de trabajo de Spark SQL. El archivo contiene comandos de Spark SQL para crear y actualizar una tabla de Iceberg.

  1. En una ventana de terminal local o en Cloud Shell, usa un editor de texto, como vi o nano, para copiar los siguientes comandos en un archivo iceberg-table.sql y, luego, guárdalo 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: Son el bucket y la carpeta de Cloud Storage que se usan para el almacén de Iceberg.
  2. Usa la herramienta gsutil para copiar el iceberg-table.sql local a tu bucket de Cloud Storage.

    gsutil cp iceberg-table.sql gs://BUCKET/
    

A continuación, descarga y copia el archivo JAR iceberg-spark-runtime-3.5_2.12-1.5.2 en Cloud Storage.

  1. En una ventana de la terminal local o en Cloud Shell, ejecuta el siguiente comando curl para descargar el archivo JAR iceberg-spark-runtime-3.5_2.12-1.5.2 al directorio actual.

    curl -o iceberg-spark-runtime-3.5_2.12-1.5.2.jar https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar
    
  2. Usa la herramienta gsutil para copiar el archivo JAR iceberg-spark-runtime-3.5_2.12-1.5.2 local del directorio actual a tu bucket de Cloud Storage.

    gsutil cp iceberg-spark-runtime-3.5_2.12-1.5.2.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 al servicio de Dataproc con gcloud CLI, la consola de Google Cloud o la API de REST de Dataproc.

gcloud

  1. Ejecuta el siguiente comando gcloud dataproc jobs submit spark-sql de forma local en una ventana de terminal local o en Cloud Shell para enviar el trabajo de Spark SQL y crear la tabla Iceberg.

    gcloud dataproc jobs submit spark-sql \
        --project=PROJECT_ID \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --jars="gs://BUCKET/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.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: El ID de tu proyecto de Google Cloud . Los IDs de proyecto se enumeran en la sección Información del proyecto en el panel de la consola de Google Cloud.
    • CLUSTER_NAME: Es el nombre de tu clúster de Dataproc.
    • 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: Son el bucket y la 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 BigQuery Metastore.
    • --properties: Propiedades del catálogo.
    • -f: Es el archivo de trabajo iceberg-table.sql que copiaste en tu bucket de Cloud Storage.
  2. 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.
    
  3. Para ver los metadatos de la tabla en BigQuery

    1. En la consola de Google Cloud, ve a la página de BigQuery.

      Ve a BigQuery Studio

    2. 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 al servicio de Dataproc para crear una tabla Iceberg con metadatos en BigQuery Metastore.

  1. En la consola de Google Cloud, ve a Enviar un trabajo de Dataproc.

    Ve a la página Enviar un trabajo y, luego, completa los siguientes campos:

    • ID de trabajo: Acepta el ID sugerido o inserta el tuyo.
    • 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 consulta: Selecciona Query file.
    • Archivo de consulta: Inserta gs://BUCKET/iceberg-table.sql.
    • Archivos JAR: Inserta lo siguiente:
      gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar
      
    • Propiedades: Haz clic en Agregar propiedad cinco veces para crear una lista de cinco campos de entrada key value y, luego, copia los siguientes pares Clave y Valor para definir cinco propiedades.
      # Clave Valor
      1.
      spark.sql.catalog.CATALOG_NAME
      
      org.apache.iceberg.spark.SparkCatalog
      
      2.
      spark.sql.catalog.CATALOG_NAME.catalog-impl
      
      org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog
      
      3.
      spark.sql.catalog.CATALOG_NAME.gcp_project
      
      PROJECT_ID
      
      4.
      spark.sql.catalog.CATALOG_NAME.gcp_location
      
      LOCATION
      
      5.
      spark.sql.catalog.CATALOG_NAME.warehouse
      
      gs://BUCKET/WAREHOUSE_FOLDER
      

    Notas:

    • CATALOG_NAME: Es el nombre del catálogo de Iceberg.
    • PROJECT_ID: El ID de tu proyecto de Google Cloud . Los IDs de los proyectos se enumeran en la sección Información del proyecto en el 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: Son el bucket y la carpeta de Cloud Storage que se usan para el almacén de Iceberg.
  2. Haz clic en Enviar.

  3. Para supervisar el progreso del trabajo y ver su resultado, ve a la página Trabajos de Dataproc en la consola de Google Cloud y haz clic en Job ID para abrir la página Detalles del trabajo.

  4. Para ver los metadatos de la tabla en BigQuery

    1. En la consola de Google Cloud, ve a la página de BigQuery.

      Ve a BigQuery Studio

    2. Visualiza los metadatos de la tabla de Iceberg.

REST

Puedes usar la API de jobs.submit de Dataproc para enviar el trabajo de Spark SQL al servicio de Dataproc y crear una tabla de Iceberg con metadatos en BigQuery Metastore.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID de tu proyecto de Google Cloud . Los IDs de los proyectos se enumeran en la sección Información del proyecto en el panel de la consola de Google Cloud.
  • CLUSTER_NAME: Es el nombre de tu clúster de Dataproc.
  • 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: Son el bucket y la 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".
  • 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 trabajo iceberg-table.sql que 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.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.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.5.2.jar",
      "gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.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 Dataproc en la consola de Google Cloud y haz clic en Job ID para abrir la página Detalles del trabajo.

Para ver los metadatos de la tabla en BigQuery

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ve a BigQuery Studio

  2. 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 la tabla almacenados en BigQuery Metastore con la CLI de Spark SQL que se ejecuta en el nodo principal de un clúster de Dataproc.

  1. Usa SSH para conectarte al nodo principal de tu clúster de Dataproc.

  2. En la terminal de la sesión de SSH, usa el editor de texto vi o nano para copiar los siguientes comandos en un archivo iceberg-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: Son el bucket y la carpeta de Cloud Storage que se usan para el almacén de Iceberg.
  3. En la terminal de la sesión de SSH, ejecuta el siguiente comando spark-sql para crear la tabla del iceberg.

    spark-sql \
    --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.5.2 \
    --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.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:

    • PROJECT_ID: El ID de tu proyecto de Google Cloud . Los IDs de proyecto se enumeran en la sección Información del proyecto en el Panel de la consola de Google Cloud.
    • LOCATION: Una ubicación de BigQuery compatible. La ubicación predeterminada es "US".
  4. Cómo ver los metadatos de una tabla en BigQuery

    1. En la consola de Google Cloud, ve a la página de BigQuery.

      Ve a BigQuery Studio

    2. 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 la tabla almacenados en BigQuery Metastore con la interfaz web de Zeppelin que se ejecuta en el nodo principal de un clúster de Dataproc .

  1. En la consola de Google Cloud, ve a la página Clústeres de Dataproc.

    Ve a la página Clústeres de Dataproc

  2. Selecciona el nombre de tu clúster para abrir la página Detalles del clúster.

  3. Haz clic en la pestaña Interfaces web para ver una lista de los vínculos de Puerta de enlace de componentes a las interfaces web de los componentes predeterminados y opcionales instalados en el clúster.

  4. Haz clic en el vínculo Zeppelin para abrir la interfaz web de Zeppelin.

  5. En la interfaz web de Zeppelin, haz clic en el menú anonymous y, luego, en Interpreter para abrir la página Interpreters.

  6. Agrega dos archivos JAR al intérprete de Zeppelin Spark de la siguiente manera:

    1. Escribe "Spark" en el cuadro Search interpreters para desplazarte hasta la sección del intérprete de Spark.
    2. Haga clic en editar.
    3. 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.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar

    4. 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 configuración nueva.

  7. En el menú del notebook de Zeppelin, haz clic en Create new note.

  8. En el diálogo Create new note, ingresa un nombre para el notebook y acepta el intérprete predeterminado spark. Haz clic en Crear para abrir el notebook.

  9. 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: El ID de tu proyecto de Google Cloud . Los IDs de proyecto se enumeran en la sección Información del proyecto en el Panel de la consola de Google Cloud.
    • CATALOG_NAME y NAMESPACE: El nombre y el espacio de nombres del catálogo de Iceberg 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 del almacén de Iceberg.
  10. Haz clic en el ícono de ejecución o presiona Shift-Enter para ejecutar el código. Cuando se completa el trabajo, el mensaje de estado muestra "Spark Job Finished" y el resultado muestra el contenido de la tabla:

  11. Cómo ver los metadatos de una tabla en BigQuery

    1. En la consola de Google Cloud, ve a la página de BigQuery.

      Ve a BigQuery Studio

    2. Visualiza los metadatos de la tabla de Iceberg.