Iceberg-Tabellen mit Lakehouse-Laufzeitkatalog, Spark und BigQuery abfragen

Hier erfahren Sie, wie Sie Lakehouse for Apache Iceberg verwenden, indem Sie einen Lakehouse-Laufzeitkatalog mit einem Katalog für mehrere Buckets erstellen. Mit dieser Konfiguration wird eine verwaltete Metadatenebene eingerichtet, die Open-Source Verarbeitungs-Engines mit Google Cloudverbindet.

Anschließend führen Sie einen Managed Service for Apache Spark-PySpark-Job aus, um eine Lakehouse Iceberg REST-Katalogtabelle mit dem Apache Iceberg REST-Katalog-Endpunkt zu erstellen.

Danach können Sie die resultierende Tabelle direkt über die Google Cloud Konsole in BigQuery mit der project.catalog.namespace.table Syntax abfragen.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigLake, Dataproc APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigLake, Dataproc APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

IAM-Rollen zuweisen

Damit der Managed Service for Apache Spark-PySpark-Job und der Lakehouse-Laufzeitkatalog mit Cloud Storage und BigQuery verwendet werden können, weisen Sie den entsprechenden Principals die erforderlichen Rollen zu:

  1. Klicken Sie in der Google Cloud Console auf Cloud Shell aktivieren.

    Cloud Shell aktivieren

  2. Klicken Sie auf Autorisieren.

  3. Weisen Sie dem Compute Engine standardmäßigen Dienstkonto des Projekts die Rolle Dataproc-Worker zu. Dieses wird standardmäßig von Managed Service for Apache Spark verwendet, wie unter Dienstkonten für Managed Service for Apache Spark beschrieben.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
        --role="roles/dataproc.worker"
  4. Weisen Sie dem standardmäßigen Compute Engine-Dienstkonto des Projekts die Rolle Nutzer der Dienstnutzung zu.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
        --role="roles/serviceusage.serviceUsageConsumer"
  5. Weisen Sie dem standardmäßigen Compute Engine-Dienstkonto des Projekts die Rolle BigLake-Editor zu.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
        --role="roles/biglake.editor"
  6. Weisen Sie dem standardmäßigen Compute Engine-Dienstkonto des Projekts die Rolle BigQuery Data Editor zu.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \
        --role="roles/bigquery.dataEditor"

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Google Cloud Projekt-ID

Lakehouse-Laufzeitkatalog erstellen

Erstellen Sie einen Lakehouse-Laufzeitkatalog, um Metadaten für Ihre Iceberg-Tabellen zu verwalten.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um Ihren Katalog für mehrere Buckets (bl://) mit der Bereitstellung von Anmeldedaten zu erstellen:

    gcloud biglake iceberg catalogs create LAKEHOUSE_CATALOG_ID \
        --project=PROJECT_ID \
        --catalog-type=biglake \
        --default-location=gs://BUCKET_NAME \
        --credential-mode=vended-credentials

    Ersetzen Sie Folgendes:

    • LAKEHOUSE_CATALOG_ID: ein eindeutiger Name für Ihren Katalog.
    • PROJECT_ID: Ihre Google Cloud Projekt-ID.
    • BUCKET_NAME: der Name des Cloud Storage-Bucket, der Ihre PySpark-Anwendungsdatei enthält.
  2. Gewähren Sie dem Dienstkonto des Katalogs Berechtigungen für den Bucket:

    1. Rufen Sie in der Google Cloud Console Lakehouse auf.

      Lakehouse aufrufen

    2. Klicken Sie auf den Namen des gerade erstellten Katalogs (LAKEHOUSE_CATALOG_ID).

    3. Klicken Sie unter Authentifizierungsmethode auf Bucket-Berechtigungen festlegen.

    4. Klicken Sie im Dialogfeld auf Bestätigen. Dadurch wird bestätigt, dass das Dienstkonto Ihres Katalogs die Rolle „Storage-Objekt-Nutzer“ für Ihren Bucket hat.

PySpark-Job erstellen und ausführen

Um eine Iceberg-Tabelle zu erstellen und abzufragen, erstellen Sie zuerst einen PySpark-Job mit den erforderlichen Spark SQL-Anweisungen. Führen Sie dann den Job mit Managed Service for Apache Spark aus.

PySpark-Skript mit einem Namespace und einer Tabelle erstellen

Erstellen Sie in einem Texteditor eine Datei mit dem Namen quickstart.py und dem folgenden Inhalt.

Dieses PySpark-Skript initialisiert eine Spark-Sitzung, um mehrere Vorgänge für einen Iceberg-Katalog auszuführen. Das Skript erstellt zuerst einen Namespace, falls noch keiner vorhanden ist. Anschließend wird eine Iceberg-Tabelle mit dem Namen quickstart_table mit einem einfachen Schema erstellt. Nachdem die Tabelle erstellt wurde, fügt das Skript drei Datenzeilen ein. Zum Schluss wird die Tabelle abgefragt, um alle eingefügten Datensätze abzurufen.

Diese Werte werden dann im nächsten Schritt verwendet, wenn Sie den gcloud dataproc batches submit pyspark Job ausführen.

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("quickstart").getOrCreate()

# Create a namespace (dataset) if it doesn't exist
spark.sql("CREATE NAMESPACE IF NOT EXISTS `quickstart_catalog`.quickstart_namespace")

# Create the table
spark.sql("""
    CREATE OR REPLACE TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table (
        id INT,
        name STRING
    )
    USING iceberg
""")

# Insert data into the table
spark.sql("""
    INSERT INTO `quickstart_catalog`.quickstart_namespace.quickstart_table
    VALUES (1, 'one'), (2, 'two'), (3, 'three')
""")

Skript in Ihren Cloud Storage-Bucket hochladen

Nachdem Sie das Skript quickstart.py erstellt haben, laden Sie es in den Cloud Storage-Bucket hoch.

  1. Rufen Sie in der Google Cloud Console Cloud Storage-Buckets auf.

    Buckets aufrufen

  2. Klicken Sie auf den Namen Ihres Buckets.

  3. Klicken Sie auf dem Tab Objekte auf Hochladen > Dateien hochladen.

  4. Wählen Sie im Dateibrowser die Datei quickstart.py aus und klicken Sie dann auf Öffnen.

PySpark-Job ausführen

Nachdem Sie das Skript quickstart.py hochgeladen haben, führen Sie es als Managed Service for Apache Spark-Batchjob aus.

  1. Führen Sie in Cloud Shell den folgenden Managed Service for Apache Spark-Batchjob mit dem Skript quickstart.py aus.

    gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \
        --project=PROJECT_ID \
        --region=REGION \
        --version=2.2 \
        --properties="\
    spark.sql.defaultCatalog=quickstart_catalog,\
    spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\
    spark.sql.catalog.quickstart_catalog.type=rest,\
    spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
    spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\
    spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\
    spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\
    spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
    spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\
    spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\
    spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: der Name des Cloud Storage-Bucket, der Ihre PySpark-Anwendungsdatei enthält.

    • LAKEHOUSE_CATALOG_ID: der Name Ihres BigLake-Katalogs. Dieser Name wird später verwendet, wenn Sie Ihren Katalog in BigQuery mit der Syntax P.C.N.T abfragen. Beispiel: my-project.biglake-catalog.quickstart_namespace.quickstart_table.

    • PROJECT_ID: Ihre Google Cloud Projekt-ID.

    • REGION: die Region, in der die Managed Service for Apache Spark-Batcharbeitslast ausgeführt werden soll.

    Wenn der Job abgeschlossen ist, wird eine ähnliche Ausgabe wie die folgende angezeigt:

    Batch [cb9d84e9489d408baca4f9e7ab4c64ff] finished.
    metadata:
    '@type': type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata
    batch: projects/your-project/locations/us-central1/batches/cb9d84e9489d408baca4f9e7ab4c64ff
    batchUuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9
    createTime: '2026-01-24T00:10:50.224097Z'
    description: Batch
    labels:
        goog-dataproc-batch-id: cb9d84e9489d408baca4f9e7ab4c64ff
        goog-dataproc-batch-uuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9
        goog-dataproc-drz-resource-uuid: batch-54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9
        goog-dataproc-location: us-central1
    operationType: BATCH
    name: projects/your-project/regions/us-central1/operations/32287926-5f61-3572-b54a-fbad8940d6ef
    

Tabelle aus BigQuery abfragen

  1. Wechseln Sie in der Google Cloud Console zu BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein. Die Abfrage verwendet die Syntax project.catalog.namespace.table.

    SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.quickstart_namespace.quickstart_table`;
    

    Ersetzen Sie:

    • PROJECT_ID: Ihre Google Cloud Projekt ID.

    • LAKEHOUSE_CATALOG_ID: die Katalog-ID, die in BigQuery-Abfragen verwendet werden soll.

  3. Klicken Sie auf Ausführen.

    In den Abfrageergebnissen werden die Daten angezeigt, die Sie mit dem PySpark-Job eingefügt haben.

Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud -Konto die auf dieser Seite verwendeten Ressourcen in Rechnung gestellt werden:

  1. Aktualisieren Sie quickstart.py, um den Namespace (das Dataset) und die Tabelle zu löschen:

    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder.appName("quickstart").getOrCreate()
    
    # Delete the table first, then the namespace (dataset)
    spark.sql("DROP TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table")
    spark.sql("DROP NAMESPACE `quickstart_catalog`.quickstart_namespace")
    

    Laden Sie es in den Cloud Storage-Bucket hoch:

    1. Rufen Sie in der Google Cloud Console Cloud Storage-Buckets auf.

      Buckets aufrufen

    2. Klicken Sie auf den Namen Ihres Buckets.

    3. Klicken Sie auf dem Tab Objekte auf Hochladen > Dateien hochladen.

    4. Wählen Sie im Dateibrowser die Datei quickstart.py aus und klicken Sie dann auf Öffnen.

    Führen Sie in Cloud Shell einen weiteren Managed Service for Apache Spark Batchjob mit dem aktualisierten quickstart.py Skript aus.

    gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \
        --project=PROJECT_ID \
        --region=REGION \
        --version=2.2 \
        --properties="\
    spark.sql.defaultCatalog=quickstart_catalog,\
    spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\
    spark.sql.catalog.quickstart_catalog.type=rest,\
    spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
    spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\
    spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\
    spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\
    spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
    spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\
    spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\
    spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: der Name des Cloud Storage-Bucket, der Ihre PySpark-Anwendungsdatei enthält.

    • LAKEHOUSE_CATALOG_ID: der Name Ihres BigLake-Katalogs.

    • PROJECT_ID: Ihre Google Cloud Projekt-ID.

    • REGION: die Region, in der die Managed Service for Apache Spark-Batcharbeitslast ausgeführt werden soll.

  2. Rufen Sie Lakehouse auf.

    Lakehouse aufrufen

  3. Wählen Sie Ihren Katalog LAKEHOUSE_CATALOG_ID aus und klicken Sie dann auf Löschen.

  4. Rufen Sie Cloud Storage-Buckets auf.

    Buckets aufrufen

  5. Wählen Sie Ihren Bucket aus und klicken Sie auf Löschen.

Nächste Schritte