Crea una tabla de Apache Iceberg con metadatos en BigQuery Metastore

En este documento, se muestra cómo ejecutar cargas de trabajo por lotes de Dataproc Serverless para Spark SQL y PySpark para crear una tabla de Apache Iceberg con metadatos almacenados en BigQuery Metastore. Para obtener información sobre otras formas de ejecutar código de Spark, consulta Ejecuta código de PySpark en un notebook de BigQuery y Ejecuta una carga de trabajo de Apache Spark.

Antes de comenzar

Si aún no lo has hecho, crea un proyecto de Google Cloud y un bucket de Cloud Storage.

  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. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

    4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

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

      Enable the APIs

  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. Otorga el rol de Editor de datos de BigQuery (roles/bigquery.dataEditor) a la cuenta de servicio predeterminada de Compute Engine, PROJECT_NUMBER-compute@developer.gserviceaccount.com. Para obtener instrucciones, consulta Otorga un solo rol.

    Ejemplo de Google Cloud CLI:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member PROJECT_NUMBER-compute@developer.gserviceaccount.com \
    --role roles/bigquery.dataEditor
    

    Notas:

    • PROJECT_ID y PROJECT_NUMBER se enumeran en la sección Información del proyecto del panel de la consola de Google Cloud.
  4. Asegúrate de que la subred de VPC regional en la que ejecutarás tu carga de trabajo por lotes de Dataproc Serverless tenga habilitado el Acceso privado a Google. Para obtener más información, consulta Cómo crear una tabla de iceberg.

Asignación de recursos de OSS a recursos de BigQuery

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

Recurso de OSS Recurso 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 con cargas de trabajo por lotes de Spark SQL y PySpark de Dataproc Serverless.

Spark SQL

Ejecuta una carga de trabajo de Spark SQL para crear una tabla de Iceberg

En los siguientes pasos, se muestra cómo ejecutar una carga de trabajo por lotes de SQL de Spark de Dataproc Serverless para crear una tabla de Iceberg con metadatos de tabla almacenados en BigQuery Metastore.

  1. Copia los siguientes comandos de Spark SQL de forma local o en Cloud Shell en un archivo iceberg-table.sql.

    USE CATALOG_NAME;
    CREATE NAMESPACE IF NOT EXISTS 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 como directorio del almacén de Iceberg.
  2. Ejecuta el siguiente comando de forma local o en Cloud Shell desde el directorio que contiene iceberg-table.sql para enviar la carga de trabajo de Spark SQL.

    gcloud dataproc batches submit spark-sql iceberg-table.sql \
        --project=PROJECT_ID \
        --region=REGION \
        --deps-bucket=BUCKET_NAME \
        --version=2.2 \
        --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
        --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"
      

    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.
    • REGION: Una región de Compute Engine disponible para ejecutar la carga de trabajo.
    • BUCKET_NAME: Es el nombre de tu bucket de Cloud Storage. Spark sube las dependencias de la carga de trabajo a una carpeta /dependencies en este bucket antes de ejecutar la carga de trabajo por lotes. El WAREHOUSE_FOLDER se encuentra en este bucket.
    • SUBNET_NAME: Es el nombre de una subred de VPC en el REGION que tiene habilitado el Acceso privado a Google y cumple con otros requisitos de subred de sesión.
    • LOCATION: Una ubicación de BigQuery compatible. La ubicación predeterminada es "US".
    • --version: Entorno de ejecución de Dataproc sin servidores versión 2.2 o posterior.
    • --properties Propiedades del catálogo.
  3. 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.

PySpark

En los siguientes pasos, se muestra cómo ejecutar una carga de trabajo por lotes de PySpark de Dataproc Serverless para crear una tabla de Iceberg con metadatos de tabla almacenados en BigQuery Metastore.

  1. Copia el siguiente código de PySpark de forma local o en Cloud Shell en un archivo iceberg-table.py.
    catalog = "CATALOG_NAME"
    namespace = "NAMESPACE"
    
    spark.sql(f"USE `{catalog}`;")
    spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;")
    spark.sql(f"USE `{namespace}`;")
    
    # Create table and display schema
    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);")
    spark.sql("DESCRIBE example_iceberg_table;")

    Reemplaza lo siguiente:

    • 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).
  2. Ejecuta el siguiente comando de forma local o en Cloud Shell desde el directorio que contiene iceberg-table.py para enviar la carga de trabajo de PySpark.
    gcloud dataproc batches submit pyspark iceberg-table.py \
        --project=PROJECT_ID \
        --region=REGION \
        --deps-bucket=BUCKET_NAME \
        --version=2.2 \
        --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
        --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"
        

    Notas:

    • 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.
    • REGION: Una región de Compute Engine disponible para ejecutar la carga de trabajo.
    • BUCKET_NAME: Es el nombre de tu bucket de Cloud Storage. Spark sube las dependencias de la carga de trabajo a una carpeta /dependencies en este bucket antes de ejecutar la carga de trabajo por lotes.
    • SUBNET_NAME: Es el nombre de una subred de VPC en el REGION que tiene habilitado el Acceso privado a Google y cumple con otros requisitos de subred de sesión.
    • --version: Entorno de ejecución de Dataproc sin servidores versión 2.2 o posterior.
    • 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 como directorio del almacén de Iceberg.
    • --properties: Propiedades del catálogo.
  3. Consulta el esquema 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.