BigLake Metastore mit dem Iceberg REST-Katalog verwenden

Der verwaltete Apache Iceberg REST-Katalog in BigLake Metastore sorgt für Interoperabilität zwischen allen Ihren Abfrage-Engines, da er eine einzige Quelle der Wahrheit für alle Ihre Iceberg-Daten bietet. Damit können Abfrage-Engines wie Apache Spark Iceberg-Tabellen auf konsistente Weise erkennen, Metadaten daraus lesen und sie verwalten.

Die Iceberg-Tabellen, die Sie mit dem Iceberg REST-Katalog verwenden, werden als BigLake-Tabellen für Apache Iceberg (Vorabversion) bezeichnet. Dies sind Iceberg-Tabellen, die Sie mit Open-Source-Engines erstellen und in Cloud Storage speichern. Sie können von Open-Source-Engines oder BigQuery gelesen werden. Schreibvorgänge werden nur von Open-Source-Engines unterstützt. In diesem Dokument werden diese Tabellen als BigLake-Iceberg-Tabellen bezeichnet.

Hinweise

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

    So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist
  2. Enable the BigLake API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  3. Optional: Bitten Sie einen Administrator, die Bereitstellung von Anmeldedaten zum ersten Mal einzurichten.
  4. Optional: Funktionsweise von BigLake Metastore und Gründe für die Verwendung.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zur Verwendung des Iceberg-REST-Katalogs im BigLake-Metastore benötigen:

  • Administrativen Aufgaben ausführen, z. B. den Nutzerzugriff auf den Katalog, den Speicherzugriff und den Anmeldedatenmodus des Katalogs verwalten:
  • Tabellendaten im Credential Vending-Modus lesen: BigLake-Betrachter (roles/biglake.viewer) für das Projekt
  • Tabellendaten im Credential Vending-Modus schreiben: BigLake-Editor (roles/biglake.editor) für das Projekt
  • Katalogressourcen und Tabellendaten im Modus ohne Bereitstellung von Anmeldedaten lesen:
  • Katalogressourcen verwalten und Tabellendaten im Modus ohne Bereitstellung von Anmeldedaten schreiben:

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.

Modus für Bereitstellung von Anmeldedaten einrichten

Der Modus für die Bereitstellung von Anmeldedaten ist ein Mechanismus zur Delegierung des Speicherzugriffs, mit dem BigLake Metastore-Administratoren Berechtigungen direkt für BigLake Metastore-Ressourcen steuern können. Dadurch ist es nicht erforderlich, dass Katalognutzer direkten Zugriff auf Cloud Storage-Buckets haben. Damit können BigLake-Administratoren Nutzern Berechtigungen für bestimmte Datendateien erteilen.

Ein Katalogadministrator aktiviert die Bereitstellung von Anmeldedaten für den Iceberg REST-Katalogclient.

Als Katalognutzer können Sie dann den Iceberg REST-Katalog anweisen, herabgestufte Speicheranmeldedaten zurückzugeben, indem Sie die Zugriffsdelegierung angeben, die Teil der Iceberg REST Catalog API-Spezifikation ist. Weitere Informationen finden Sie unter Abfrage-Engine mit dem Iceberg-REST-Katalog konfigurieren.

So initialisieren Sie den Katalog und aktivieren den Modus für die Bereitstellung von Anmeldedaten:

  1. Initialisieren Sie den Katalog mit dem folgenden Befehl:

    curl -H "x-goog-user-project: PROJECT_ID" -H "Accept: application/json" -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/config?warehouse=gs://CLOUD_STORAGE_BUCKET_NAME

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die ID Ihres Google Cloud Projekts.
    • CLOUD_STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Bucket, in dem die Iceberg-Tabelle gespeichert ist.

    Die Ausgabe des curl-Befehls sieht in etwa so aus: Der Wert für das Katalogpräfix befindet sich in der Antwort im Feld overrides.prefix:

    {
      "overrides": {
        "catalog_credential_mode": "CREDENTIAL_MODE_END_USER",
        "prefix": "projects/PROJECT_ID/catalogs/CLOUD_STORAGE_BUCKET_NAME"
      },
      "endpoints": [
        "GET /v1/{prefix}/namespaces",
        "POST /v1/{prefix}/namespaces",
        "GET /v1/{prefix}/namespaces/{namespace}",
        "HEAD /v1/{prefix}/namespaces/{namespace}",
        "DELETE /v1/{prefix}/namespaces/{namespace}",
        "POST /v1/{prefix}/namespaces/{namespace}/properties",
        "GET /v1/{prefix}/namespaces/{namespace}/tables",
        "POST /v1/{prefix}/namespaces/{namespace}/tables",
        "GET /v1/{prefix}/namespaces/{namespace}/tables/{table}",
        "HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table}",
        "POST /v1/{prefix}/namespaces/{namespace}/tables/{table}",
        "DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}"
      ]
    }
    
  2. Aktivieren Sie den Modus für die Bereitstellung von Anmeldedaten und extrahieren Sie das Dienstkonto, dem Sie Berechtigungen erteilen möchten, mit dem folgenden Befehl:

    curl -X PATCH -H "Content-Type: application/json" -H "x-goog-user-project: PROJECT_ID" -H "Accept: application/json" -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/PREFIX?update_mask=credential_mode -d '{"credential_mode":"CREDENTIAL_MODE_VENDED_CREDENTIALS"}'

    Ersetzen Sie PREFIX durch das Feld prefix aus der Ausgabe des vorherigen Befehls.

    Die Ausgabe des Befehls curl enthält das Dienstkonto, das in etwa so aussieht:

    {
      "name": "projects/PROJECT_ID/catalogs/CLOUD_STORAGE_BUCKET_NAME",
      "credential_mode": "CREDENTIAL_MODE_VENDED_CREDENTIALS",
      "biglake-service-account": "BIGLAKE_SERVICE_ACCOUNT"
    }
    
  3. Damit das BigLake-Dienstkonto, das Sie im vorherigen Schritt extrahiert haben, die erforderlichen Berechtigungen zur Verwendung des Anmeldedaten-Vending-Modus hat, bitten Sie Ihren Administrator, ihm die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) für den Speicher-Bucket zuzuweisen.

Beschränkungen

Für den Iceberg-REST-Katalog gelten die folgenden Einschränkungen:

  • Multiregionale Buckets, biregionale Buckets und Buckets mit benutzerdefinierter Regionsplatzierung werden nicht unterstützt.
  • Wenn Sie den Modus für die Bereitstellung von Anmeldedaten verwenden, müssen Sie das Attribut io-impl auf org.apache.iceberg.gcp.gcs.GCSFileIO festlegen. Der Standardwert org.apache.iceberg.hadoop.HadoopFileIO wird nicht unterstützt.

Iceberg-REST-Katalog konfigurieren

Cluster

Wenn Sie Spark mit dem Iceberg-REST-Katalog in Dataproc verwenden möchten, erstellen Sie zuerst einen Cluster mit der Iceberg-Komponente:

gcloud dataproc clusters create CLUSTER_NAME \
    --enable-component-gateway \
    --project=PROJECT_ID \
    --region=REGION \
    --optional-components=ICEBERG \
    --image-version=DATAPROC_VERSION

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: ein Name für Ihren Cluster.
  • PROJECT_ID: Projekt-ID in Google Cloud .
  • REGION: die Region für den Dataproc-Cluster.
  • DATAPROC_VERSION: die Dataproc-Image-Version, z. B. 2.2.

Nachdem Sie den Cluster erstellt haben, konfigurieren Sie Ihre Spark-Sitzung für die Verwendung des Iceberg-REST-Katalogs:

import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
  .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
  .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \
  .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
  .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \
  .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \
  .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \
  .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
  .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \
  .getOrCreate()

Ersetzen Sie Folgendes:

  • CATALOG_NAME: Ein Name für Ihren Iceberg-REST-Katalog.
  • APP_NAME: Ein Name für Ihre Spark-Sitzung.
  • CLOUD_STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Bucket, in dem die BigLake Iceberg-Tabellen gespeichert sind.
  • PROJECT_ID: Das Projekt, das für die Verwendung des Iceberg-REST-Katalogs abgerechnet wird. Dies kann sich vom Projekt unterscheiden, in dem sich der Cloud Storage-Bucket befindet. Weitere Informationen zur Projektkonfiguration bei Verwendung einer REST API finden Sie unter Systemparameter.

In diesem Beispiel wird kein Credential Vending verwendet. Wenn Sie die Bereitstellung von Anmeldedaten verwenden möchten, müssen Sie den Header X-Iceberg-Access-Delegation mit dem Wert vended-credentials zu Iceberg REST-Kataloganfragen hinzufügen. Fügen Sie dazu die folgende Zeile zum SparkSession-Builder hinzu:

.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials')

Beispiel mit Bereitstellung von Anmeldedaten

Im folgenden Beispiel wird die Abfrage-Engine mit der Bereitstellung von Anmeldedaten konfiguriert:

import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
  .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
  .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \
  .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
  .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \
  .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \
  .config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials') \
  .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \
  .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
  .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \
  .getOrCreate()

Weitere Informationen finden Sie in der Iceberg-Dokumentation im Abschnitt Header in RESTCatalog.

Dataproc-Cluster unterstützen Google-Autorisierungsabläufe für Iceberg in den folgenden Releases:

  • Dataproc in Compute Engine-Image-Versionen 2.2.65 und höher.
  • Dataproc in Compute Engine-Image-Versionen 2.3.11 und höher.

Serverlos

Senden Sie eine PySpark-Batcharbeitslast an Google Cloud Serverless for Apache Spark mit der folgenden Konfiguration:

gcloud dataproc batches submit pyspark PYSPARK_FILE \
    --project=PROJECT_ID \
    --region=REGION \
    --version=RUNTIME_VERSION \
    --properties="\
    spark.sql.defaultCatalog=CATALOG_NAME,\
    spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\
    spark.sql.catalog.CATALOG_NAME.type=rest,\
    spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
    spark.sql.catalog.CATALOG_NAME.warehouse=gs://CLOUD_STORAGE_BUCKET_NAME,\
    spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\
    spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
    spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\
    spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false"

Ersetzen Sie Folgendes:

  • PYSPARK_FILE: Der gs:// Cloud Storage-Pfad zu Ihrer PySpark-Anwendungsdatei.
  • PROJECT_ID: Projekt-ID in Google Cloud .
  • REGION: die Region für die Dataproc-Batcharbeitslast.
  • RUNTIME_VERSION: die Laufzeitversion von Serverless for Apache Spark, z. B. 2.2.
  • CATALOG_NAME: Ein Name für Ihren Iceberg-REST-Katalog.
  • CLOUD_STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Bucket, in dem die BigLake Iceberg-Tabellen gespeichert sind.

Wenn Sie die Bereitstellung von Anmeldedaten verwenden möchten, müssen Sie den Header X-Iceberg-Access-Delegation zu Iceberg REST-Kataloganfragen mit dem Wert vended-credentials hinzufügen. Fügen Sie dazu die folgende Zeile zu den Serverless for Apache Spark-Konfigurationen hinzu:

.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials')

Beispiel mit Bereitstellung von Anmeldedaten

Im folgenden Beispiel wird die Abfrage-Engine mit der Bereitstellung von Anmeldedaten konfiguriert:

gcloud dataproc batches submit pyspark PYSPARK_FILE \
    --project=PROJECT_ID \
    --region=REGION \
    --version=RUNTIME_VERSION \
    --properties="\
    spark.sql.defaultCatalog=CATALOG_NAME,\
    spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\
    spark.sql.catalog.CATALOG_NAME.type=rest,\
    spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
    spark.sql.catalog.CATALOG_NAME.warehouse=gs://CLOUD_STORAGE_BUCKET_NAME,\
    spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\
    spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
    spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\
    spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,
    spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials"

Weitere Informationen finden Sie in der Iceberg-Dokumentation im Abschnitt Header in RESTCatalog.

Serverless for Apache Spark unterstützt Google-Autorisierungsabläufe für Iceberg in den folgenden Laufzeitversionen:

  • Serverless for Apache Spark 2.2-Laufzeiten 2.2.60 und höher
  • Serverless for Apache Spark 2.3-Laufzeiten 2.3.10 und höher

Trino

Wenn Sie Trino mit dem Iceberg-REST-Katalog verwenden möchten, erstellen Sie einen Dataproc-Cluster mit der Trino-Komponente und konfigurieren Sie die Katalogattribute mit dem Flag gcloud dataproc clusters create --properties. Im folgenden Beispiel wird ein Trino-Katalog mit dem Namen CATALOG_NAME erstellt:

gcloud dataproc clusters create CLUSTER_NAME \
    --enable-component-gateway \
    --region=REGION \
    --image-version=DATAPROC_VERSION \
    --network=NETWORK_ID \
    --optional-components=TRINO \
    --properties="\
trino-catalog:CATALOG_NAME.connector.name=iceberg,\
trino-catalog:CATALOG_NAME.iceberg.catalog.type=rest,\
trino-catalog:CATALOG_NAME.iceberg.rest-catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
trino-catalog:CATALOG_NAME.iceberg.rest-catalog.warehouse=gs://CLOUD_STORAGE_BUCKET_NAME,\
trino-catalog:CATALOG_NAME.iceberg.rest-catalog.biglake.project-id=PROJECT_ID,\
trino-catalog:CATALOG_NAME.iceberg.rest-catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager"

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: ein Name für Ihren Cluster.
  • REGION: die Region des Dataproc-Clusters.
  • DATAPROC_VERSION: Dataproc-Image-Version, z. B. 2.2.
  • NETWORK_ID: Cluster-Netzwerk-ID. Weitere Informationen finden Sie unter Dataproc-Cluster-Netzwerkkonfiguration.
  • CATALOG_NAME: Ein Name für Ihren Trino-Katalog, der den Iceberg REST-Katalog verwendet.
  • CLOUD_STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Bucket, in dem die BigLake Iceberg-Tabellen gespeichert sind.
  • PROJECT_ID: Ihre Google Cloud Projekt-ID, die für BigLake Metastore verwendet werden soll.

Nachdem der Cluster erstellt wurde, stellen Sie über SSH eine Verbindung zur Haupt-VM-Instanz her und verwenden Sie dann die Trino-Befehlszeile so:

trino

Dataproc Trino unterstützt Google-Autorisierungsabläufe für Iceberg in den folgenden Releases:

  • Dataproc in Compute Engine 2.2-Laufzeitversionen 2.2.65 und höher
  • Dataproc in Compute Engine-Laufzeitversionen 2.3.11 und höher
  • Dataproc auf Compute Engine 3.0 wird nicht unterstützt.

Iceberg 1.10 oder höher

Open-Source-Versionen von Iceberg 1.10 und höher bieten integrierte Unterstützung für Google-Autorisierungsabläufe in GoogleAuthManager. Im Folgenden sehen Sie ein Beispiel für die Konfiguration von Apache Spark zur Verwendung des Iceberg REST Catalog von BigLake Metastore.

import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
  .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
  .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \
  .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
  .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \
  .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \
  .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \
  .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
  .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \
  .getOrCreate()

Ersetzen Sie Folgendes:

  • CATALOG_NAME: Ein Name für Ihren Iceberg-REST-Katalog.
  • APP_NAME: Ein Name für Ihre Spark-Sitzung.
  • CLOUD_STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Bucket, in dem die BigLake Iceberg-Tabellen gespeichert sind.
  • PROJECT_ID: Das Projekt, das für die Verwendung des Iceberg REST-Katalogs abgerechnet wird. Dies kann sich vom Projekt unterscheiden, dem der Cloud Storage-Bucket gehört. Weitere Informationen zur Projektkonfiguration bei Verwendung einer REST API finden Sie unter Systemparameter.

Im vorherigen Beispiel wird keine Bereitstellung von Anmeldedaten verwendet. Wenn Sie die Bereitstellung von Anmeldedaten verwenden möchten, müssen Sie den Header X-Iceberg-Access-Delegation mit dem Wert vended-credentials zu Iceberg REST-Kataloganfragen hinzufügen. Fügen Sie dazu die folgende Zeile zum SparkSession-Builder hinzu:

.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials')

Beispiel mit Bereitstellung von Anmeldedaten

Im folgenden Beispiel wird die Abfrage-Engine mit der Bereitstellung von Anmeldedaten konfiguriert:

import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
  .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
  .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \
  .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
  .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \
  .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \
  .config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials') \
  .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \
  .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
  .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \
  .getOrCreate()

Weitere Informationen finden Sie in der Iceberg-Dokumentation im Abschnitt Header in RESTCatalog.

Frühere Iceberg-Releases

Für Open-Source-Iceberg-Releases vor Version 1.10 können Sie die Standard-OAuth-Authentifizierung konfigurieren, indem Sie eine Sitzung mit den folgenden Einstellungen konfigurieren:

import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
  .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.9.1,org.apache.iceberg:iceberg-gcp-bundle:1.9.1') \
  .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
  .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \
  .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
  .config(f"spark.sql.catalog.{catalog_name}.token", "TOKEN") \
  .config(f"spark.sql.catalog.{catalog_name}.oauth2-server-uri", "https://oauth2.googleapis.com/token") \
  .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \
  .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \
  .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
  .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \
  .getOrCreate()

Ersetzen Sie Folgendes:

  • CATALOG_NAME: Ein Name für Ihren Iceberg-REST-Katalog.
  • APP_NAME: Ein Name für Ihre Spark-Sitzung.
  • CLOUD_STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Bucket, in dem die BigLake Iceberg-Tabellen gespeichert sind.
  • PROJECT_ID: Das Projekt, das für die Verwendung des Iceberg REST-Katalogs abgerechnet wird. Dies kann sich vom Projekt unterscheiden, dem der Cloud Storage-Bucket gehört. Weitere Informationen zur Projektkonfiguration bei Verwendung einer REST API finden Sie unter Systemparameter.
  • TOKEN: Ihr Authentifizierungstoken, das eine Stunde lang gültig ist, z. B. ein mit gcloud auth application-default print-access-token generiertes Token.

Im vorherigen Beispiel wird keine Bereitstellung von Anmeldedaten verwendet. Wenn Sie die Bereitstellung von Anmeldedaten verwenden möchten, müssen Sie den Header X-Iceberg-Access-Delegation mit dem Wert vended-credentials zu Iceberg REST-Kataloganfragen hinzufügen. Fügen Sie dazu die folgende Zeile zum SparkSession-Builder hinzu:

.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials')

Beispiel mit Bereitstellung von Anmeldedaten

Im folgenden Beispiel wird die Abfrage-Engine mit der Bereitstellung von Anmeldedaten konfiguriert:

import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
  .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.9.1,org.apache.iceberg:iceberg-gcp-bundle:1.9.1') \
  .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
  .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://CLOUD_STORAGE_BUCKET_NAME') \
  .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
  .config(f"spark.sql.catalog.{catalog_name}.token", "TOKEN") \
  .config(f"spark.sql.catalog.{catalog_name}.oauth2-server-uri", "https://oauth2.googleapis.com/token") \
  .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.gcp.gcs.GCSFileIO') \
  .config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation','vended-credentials') \
  .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \
  .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
  .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \
  .getOrCreate()

Weitere Informationen finden Sie in der Iceberg-Dokumentation im Abschnitt Header in RESTCatalog.

Namespace erstellen

Spark

spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;")

spark.sql("USE NAMESPACE_NAME;")

Ersetzen Sie NAMESPACE_NAME durch einen Namen für den Namespace.

Trino

CREATE SCHEMA IF NOT EXISTS  CATALOG_NAME.SCHEMA_NAME;

USE CATALOG_NAME.SCHEMA_NAME;

Ersetzen Sie Folgendes:

  • CATALOG_NAME: Ein Name für Ihren Trino-Katalog, der den Iceberg REST-Katalog verwendet.
  • SCHEMA_NAME: Ein Name für Ihr Schema.

Tabelle erstellen

Spark

spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;")

spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()

Ersetzen Sie Folgendes:

  • NAMESPACE_NAME ist der Name Ihres Namespace
  • TABLE_NAME: Ein Name für Ihre Tabelle

Trino

CREATE TABLE TABLE_NAME (id int, data varchar);

DESCRIBE TABLE_NAME;

Ersetzen Sie TABLE_NAME durch einen Namen für die Tabelle.

Tabellen auflisten

Spark

spark.sql("SHOW TABLES").show()

Trino

SHOW TABLES;

Daten in die Tabelle einfügen

Im folgenden Beispiel werden Beispieldaten in die Tabelle eingefügt:

Spark

spark.sql("INSERT INTO TABLE_NAME VALUES (1, \"first row\"), (2, \"second row\"), (3, \"third row\");")

Trino

INSERT INTO TABLE_NAME VALUES (1, 'first row'), (2, 'second row'), (3, 'third row');

Tabelle abfragen

Im folgenden Beispiel werden alle Daten aus der Tabelle ausgewählt:

Spark

spark.sql("SELECT * FROM TABLE_NAME;").show()

Trino

SELECT * FROM TABLE_NAME;

Im folgenden Beispiel wird dieselbe Tabelle aus BigQuery abgefragt:

SELECT * FROM `CLOUD_STORAGE_BUCKET_NAME>NAMESPACE_OR_SCHEMA_NAME.TABLE_NAME`;

Ersetzen Sie Folgendes:

  • CLOUD_STORAGE_BUCKET_NAME: Der Name des Cloud Storage-Bucket für Ihren Iceberg REST-Katalog. Wenn Ihr URI beispielsweise gs://iceberg_bucket lautet, verwenden Sie iceberg_bucket.
  • NAMESPACE_OR_SCHEMA_NAME: Der Tabellen-Namespace, wenn Sie Spark verwenden, oder der Name des Tabellenschemas, wenn Sie Trino verwenden.

  • TABLE_NAME: Der Name Ihrer Tabelle.

Tabellenschema ändern

Im folgenden Beispiel wird der Tabelle eine Spalte hinzugefügt:

Spark

spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);")
spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()

Ersetzen Sie Folgendes:

  • NAMESPACE_NAME ist der Name Ihres Namespace
  • TABLE_NAME: Ein Name für Ihre Tabelle

Trino

ALTER TABLE TABLE_NAME ADD COLUMN desc varchar;
DESCRIBE SCHEMA_NAME.TABLE_NAME;

Ersetzen Sie Folgendes:

  • SCHEMA_NAME: der Name Ihres Schemas
  • TABLE_NAME: Ein Name für Ihre Tabelle

Tabelle löschen

Im folgenden Beispiel wird die Tabelle aus dem angegebenen Namespace gelöscht:

Spark

spark.sql("DROP TABLE TABLE_NAME;")

Trino

DROP TABLE TABLE_NAME;

Preise

Preisdetails finden Sie unter BigLake-Preise.

Nächste Schritte