Os procedimentos armazenados do Apache Spark executam jobs no Lakehouse para Apache Iceberg. Ao se conectar ao catálogo de tempo de execução do Lakehouse, esses procedimentos executam comandos do Spark SQL diretamente no data warehouse subjacente.
Antes de começar
- Ative o faturamento para o projeto do Google Cloud . Saiba como verificar se o faturamento está ativado em um projeto.
Ative as APIs BigQuery e Dataproc.
Funções exigidas
Para usar procedimentos armazenados do Apache Spark, revise as funções necessárias para procedimentos armazenados e conceda as funções necessárias.
Para receber as permissões necessárias para usar o Apache Spark e procedimentos armazenados com o catálogo de tempo de execução do Lakehouse como um serviço de metadados, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Crie tabelas de catálogo de tempo de execução do Lakehouse no Apache Spark:
- Editor de dados do BigQuery (
roles/bigquery.dataEditor) na conta de serviço da conexão do Spark no projeto - Usuário de objetos do Storage (
roles/storage.objectUser) na conta de serviço da conexão do Spark no projeto
- Editor de dados do BigQuery (
-
Consultar tabelas do catálogo de ambientes de execução do Lakehouse no BigQuery:
- Leitor de dados do BigQuery (
roles/bigquery.dataViewer) no projeto - Usuário do BigQuery (
roles/bigquery.user) no projeto - Leitor de objetos do Storage (
roles/storage.objectViewer) no projeto
- Leitor de dados do BigQuery (
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Criar e executar um procedimento armazenado
O exemplo a seguir mostra como criar e executar um procedimento armazenado com o catálogo de tempo de execução do Lakehouse.
Acessar a página do BigQuery.
No editor de consultas, adicione o exemplo de código a seguir para a instrução
CREATE PROCEDURE.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`();
Substitua:
PROJECT_ID: o ID do seu projeto do Google Cloud .BQ_DATASET_ID: o ID do conjunto de dados no BigQuery que contém o procedimento.PROCEDURE_NAME: o nome do procedimento que você está criando ou substituindo.REGION: o local da sua conexão do Apache Spark.LOCATION: o local dos seus recursos do BigQuery.SPARK_CONNECTION_ID: o ID da sua conexão do Apache Spark.CATALOG_NAME: o nome do catálogo que você está usando.WAREHOUSE_DIRECTORY: o URI da pasta do Cloud Storage que contém seu data warehouse.NAMESPACE_NAME: o namespace que você está usando.