Apache Spark ストアド プロシージャで Lakehouse ランタイム カタログを使用する

Apache Spark ストアド プロシージャは、Lakehouse for Apache Iceberg 内でジョブを実行します。Lakehouse ランタイム カタログに接続することで、これらのプロシージャは基盤となるデータ ウェアハウスに対して Spark SQL コマンドを直接実行します。

始める前に

  1. Google Cloud プロジェクトに対する課金を有効にします。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  2. BigQuery API と Dataproc API を有効にします。

    API を有効にする

必要なロール

Apache Spark ストアド プロシージャを使用するには、ストアド プロシージャに必要なロールを確認し、必要なロールを付与します。

メタデータ サービスとして Lakehouse ランタイム カタログで Apache Spark とストアド プロシージャを使用するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

ストアド プロシージャを作成して実行する

次の例は、Lakehouse ランタイム カタログを使用してストアド プロシージャを作成し、実行する方法を示しています。

  1. [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで、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: 実際の Google Cloud プロジェクト ID。
    • BQ_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: 使用している 名前空間。

次のステップ