Apache Spark 預存程序會在 Lakehouse for Apache Iceberg 中執行工作。只要連線至 Lakehouse 執行階段目錄,這些程序就會直接對基礎資料倉儲執行 Spark SQL 指令。
事前準備
- 為 Google Cloud 專案啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
啟用 BigQuery 和 Dataproc API。
必要的角色
如要使用 Apache Spark 預存程序,請查看預存程序的必要角色,並授予必要角色。
如要取得使用 Apache Spark 和預存程序所需的權限,並將 Lakehouse 執行階段目錄做為中繼資料服務,請要求管理員授予下列 IAM 角色:
- 在 Apache Spark 中建立 Lakehouse 執行階段目錄資料表:
-
在 BigQuery 中查詢 Lakehouse 執行階段目錄資料表:
- 專案的 BigQuery 資料檢視者 (
roles/bigquery.dataViewer) - 專案的 BigQuery 使用者 (
roles/bigquery.user) - 專案的Storage 物件檢視者 (
roles/storage.objectViewer)
- 專案的 BigQuery 資料檢視者 (
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
建立及執行預存程序
以下範例說明如何使用 Lakehouse 執行階段目錄建立及執行預存程序。
前往「BigQuery」頁面
在查詢編輯器中,為
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`();
更改下列內容:
PROJECT_ID:專案的 ID。 Google CloudBQ_DATASET_ID:BigQuery 中包含程序的資料集 ID。PROCEDURE_NAME:您要建立或取代的程序名稱。REGION:Apache Spark 連線的位置。LOCATION:BigQuery 資源的位置。SPARK_CONNECTION_ID:Apache Spark 連線的 ID。CATALOG_NAME:您使用的目錄名稱。WAREHOUSE_DIRECTORY:包含資料倉儲的 Cloud Storage 資料夾 URI。NAMESPACE_NAME:您使用的命名空間。