Usa el catálogo del entorno de ejecución de Lakehouse con procedimientos almacenados de Apache Spark

Los procedimientos almacenados de Apache Spark ejecutan trabajos en Lakehouse para Apache Iceberg. Cuando se conectan al catálogo de entorno de ejecución de Lakehouse, estos procedimientos ejecutan comandos de Spark SQL directamente en tu almacén de datos subyacente.

Antes de comenzar

  1. Habilita la facturación en tu Google Cloud proyecto. Obtén información para verificar si la facturación está habilitada en un proyecto.
  2. Habilita las APIs de BigQuery y Dataproc.

    Habilitar las API

Roles obligatorios

Para usar los procedimientos almacenados de Apache Spark, revisa los roles obligatorios para los procedimientos almacenados y otorga los roles necesarios.

Para obtener los permisos que necesitas para usar Apache Spark y los procedimientos almacenados con el catálogo de entorno de ejecución de Lakehouse como un servicio de metadatos, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Crea y ejecuta un procedimiento almacenado

En el siguiente ejemplo, se muestra cómo crear y ejecutar un procedimiento almacenado con el catálogo de entorno de ejecución de Lakehouse.

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, agrega el siguiente código de muestra para la CREATE PROCEDURE instrucción.

    CREATE OR REPLACE PROCEDURE
    `PROJECT_ID.BQ_DATASET_ID.PROCEDURE_NAME`()
    WITH CONNECTION `PROJECT_ID.REGION.SPARK_CONNECTION_ID` OPTIONS (engine='SPARK',
    runtime_version='1.1',
    properties=[("spark.sql.catalog.CATALOG_NAME.warehouse",
    "WAREHOUSE_DIRECTORY"),
    ("spark.sql.catalog.CATALOG_NAME.gcp_location",
    "LOCATION"),
    ("spark.sql.catalog.CATALOG_NAME.gcp_project",
    "PROJECT_ID"),
    ("spark.sql.catalog.CATALOG_NAME",
    "org.apache.iceberg.spark.SparkCatalog"),
    ("spark.sql.catalog.CATALOG_NAME.catalog-impl",
    "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog"),
    ("spark.jars.packages",
    "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1")],
    jar_uris=["gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar"])
    LANGUAGE python AS R"""
    from pyspark.sql import SparkSession
    spark = SparkSession \
    .builder \
    .appName("Lakehouse runtime catalog Iceberg") \
    .getOrCreate()
    spark.sql("USE CATALOG_NAME;")
    spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;")
    spark.sql("USE NAMESPACE_NAME;")
    spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY'")
    spark.sql("DESCRIBE TABLE_NAME;")
    spark.sql("INSERT INTO TABLE_NAME VALUES (1, \"first row\");")
    spark.sql("SELECT * from TABLE_NAME;")
    spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS (newDoubleCol double);")
    spark.sql("DESCRIBE TABLE_NAME;")
    """;
    CALL `PROJECT_ID.BQ_DATASET_ID.PROCEDURE_NAME`();

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu Google Cloud proyecto.
    • BQ_DATASET_ID: el ID del conjunto de datos en BigQuery que contiene el procedimiento.
    • PROCEDURE_NAME: el nombre del procedimiento que estás creando o reemplazando.
    • REGION: la ubicación de tu conexión de Apache Spark.
    • LOCATION: la ubicación de tus recursos de BigQuery.
    • SPARK_CONNECTION_ID: el ID de tu conexión de Apache Spark.
    • CATALOG_NAME: el nombre del catálogo que estás usando.
    • WAREHOUSE_DIRECTORY: el URI de la carpeta de Cloud Storage que contiene tu almacén de datos.
    • NAMESPACE_NAME: el espacio de nombres que estás usando.

¿Qué sigue?