Gespeicherte Apache Spark-Prozeduren führen Jobs in Lakehouse für Apache Iceberg aus. Wenn Sie eine Verbindung zum Lakehouse-Laufzeitkatalog herstellen, werden mit diesen Prozeduren Spark SQL-Befehle direkt für Ihr zugrunde liegendes Data Warehouse ausgeführt.
Hinweis
- Aktivieren Sie die Abrechnung für Ihr Google Cloud Projekt in. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist .
Aktivieren Sie die BigQuery API und die Dataproc API.
Erforderliche Rollen
Wenn Sie gespeicherte Apache Spark-Prozeduren verwenden möchten, prüfen Sie die erforderlichen Rollen für gespeicherte Prozeduren und weisen Sie die erforderlichen Rollen zu.
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie für die Verwendung von Apache Spark und gespeicherten Prozeduren mit dem Lakehouse-Laufzeitkatalog als Metadatendienst benötigen:
-
Lakehouse-Laufzeitkatalogtabellen in Apache Spark erstellen:
- BigQuery-Datenbearbeiter (
roles/bigquery.dataEditor) für das Dienstkonto der Spark-Verbindung im Projekt - Storage Object User (
roles/storage.objectUser) für das Dienstkonto der Spark-Verbindung im Projekt
- BigQuery-Datenbearbeiter (
-
Lakehouse-Laufzeitkatalogtabellen in BigQuery abfragen:
- BigQuery Data Viewer (
roles/bigquery.dataViewer) für das Projekt - BigQuery-Nutzer (
roles/bigquery.user) für das Projekt - Storage Object Viewer (
roles/storage.objectViewer) für das Projekt
- BigQuery Data Viewer (
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Gespeicherte Prozedur erstellen und ausführen
Im folgenden Beispiel wird gezeigt, wie Sie eine gespeicherte Prozedur mit dem Lakehouse-Laufzeitkatalog erstellen und ausführen.
Rufen Sie die Seite BigQuery auf.
Fügen Sie im Abfrageeditor den folgenden Beispielcode für die
CREATE PROCEDUREAnweisung hinzu.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`();
Ersetzen Sie Folgendes:
PROJECT_ID: die ID Ihres Google Cloud Projekts in.BQ_DATASET_ID: die ID des Datasets in BigQuery, das die Prozedur enthält.PROCEDURE_NAME: der Name der Prozedur, die Sie erstellen oder ersetzen.REGION: der Standort Ihrer Apache Spark-Verbindung.LOCATION: der Standort Ihrer BigQuery-Ressourcen.SPARK_CONNECTION_ID: die ID Ihrer Apache Spark-Verbindung.CATALOG_NAME: der Name des Katalogs, den Sie verwenden.WAREHOUSE_DIRECTORY: der URI des Cloud Storage-Ordners, der Ihr Data Warehouse enthält.NAMESPACE_NAME: der Namespace, den Sie verwenden.
Nächste Schritte
- Richten Sie optionale Funktionen des Lakehouse-Laufzeitkatalogs ein.