Für neue Workflows empfehlen wir die Verwendung des Endpunkts Apache Iceberg REST-Katalog im Lakehouse-Laufzeitkatalog.
Dieser Endpunkt dient als zentrale Informationsquelle und ermöglicht eine nahtlose Interoperabilität zwischen Ihren Abfrage-Engines. Damit können Engines wie Apache Spark Ihre Google Cloud Lakehouse-Tabellen einheitlich ermitteln, lesen und verwalten.
Dieser Ansatz ist eine gute Wahl, wenn Sie Open-Source-Engines für den Zugriff auf Daten in Cloud Storage verwenden und Interoperabilität mit anderen Engines, einschließlich BigQuery, benötigen. Es unterstützt Funktionen wie Credential Vending für eine detaillierte Zugriffssteuerung und regionenübergreifende Replikation und Notfallwiederherstellung.
Im Gegensatz dazu ist der benutzerdefinierte Apache Iceberg-Katalog für BigQuery-Endpunkt eine frühere Integration. Vorhandene Workflows können weiterhin darauf zugreifen, aber der REST-Katalog bietet eine standardisierte und funktionsreiche Umgebung.
Hinweis
Machen Sie sich mit dem Lakehouse-Laufzeitkatalog und der Übersicht über Iceberg-REST-Katalogendpunkte vertraut, bevor Sie fortfahren.
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
-
Aktivieren Sie die BigLake API.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Weitere Informationen zum Zuweisen von Rollen
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwenden des Apache Iceberg REST-Katalogendpunkts im Lakehouse-Laufzeitkatalog benötigen:
-
Administrativen Aufgaben ausführen, z. B. den Nutzerzugriff auf den Katalog, den Speicherzugriff und den Modus für die Bereitstellung von Anmeldedaten des Katalogs verwalten:
- BigLake-Administrator (
roles/biglake.admin) für das Projekt - Storage-Administrator (
roles/storage.admin) für den Cloud Storage-Bucket
- BigLake-Administrator (
-
Tabellendaten im Credential Vending-Modus lesen:
BigLake-Betrachter (
roles/biglake.viewer) für das Projekt. Wenn Sie Abfrage-Engines wie Managed Service for Apache Spark, Managed Service for Apache Spark oder Dataflow zum Lesen von Tabellendaten verwenden, weisen Sie diese Rolle dem Dienstkonto zu, mit dem Sie Jobs in dieser Engine ausführen. -
Tabellendaten im Credential Vending-Modus schreiben:
BigLake-Editor (
roles/biglake.editor) für das Projekt. Wenn Sie Abfrage-Engines wie Managed Service for Apache Spark, Managed Service for Apache Spark oder Dataflow zum Schreiben von Tabellendaten verwenden, weisen Sie diese Rolle dem Dienstkonto zu, mit dem Sie Jobs in dieser Engine ausführen. -
Verwenden Sie das automatisch bereitgestellte Dienstkonto für den Lakehouse-Laufzeitkatalog im Credential Vending-Modus:
Storage Object User (
roles/storage.objectUser) für den Ziel-Cloud Storage-Bucket. Nachdem Sie den Katalog erstellt haben, weisen Sie dem automatisch bereitgestellten Dienstkonto des Lakehouse-Laufzeitkatalogs die Rolle „Storage Object User“ (roles/storage.objectUser) für Ihren Speicher-Bucket zu. -
Katalogressourcen und Tabellendaten im Modus ohne Bereitstellung von Anmeldedaten lesen:
- BigLake-Betrachter (
roles/biglake.viewer) für das Projekt - Storage Object Viewer (
roles/storage.objectViewer) für den Cloud Storage-Bucket
- BigLake-Betrachter (
-
Katalogressourcen verwalten und Tabellendaten im Modus ohne Bereitstellung von Anmeldedaten schreiben:
- BigLake Editor (
roles/biglake.editor) für das Projekt - Storage-Objekt-Nutzer (
roles/storage.objectUser) für den Cloud Storage-Bucket
- BigLake Editor (
-
DML-Vorgänge (Datenbearbeitungssprache) mit der BigQuery-Katalogföderation ausführen:
- BigQuery-Datenbearbeiter (
roles/bigquery.dataEditor) für das Projekt - Storage-Administrator (
roles/storage.admin) für den Cloud Storage-Bucket. Wenn Sie Abfrage-Engines wie Managed Service for Apache Spark verwenden, um DML-Vorgänge auszuführen, weisen Sie dem Dienstkonto, mit dem Sie Jobs in dieser Engine ausführen, diese Rollen zu.
- BigQuery-Datenbearbeiter (
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.
Beschränkungen
Der Apache Iceberg-REST-Katalogendpunkt unterliegt den folgenden Einschränkungen:
Allgemeine Einschränkungen
- Trino wird nur mit der BigQuery-Katalogföderation unterstützt, wenn Sie Managed Service for Apache Spark auf Compute Engine-Image-Versionen 2.3.16 und höher verwenden.
- Wenn Sie den Modus für die Bereitstellung von Anmeldedaten verwenden, müssen Sie das Attribut
io-implauforg.apache.iceberg.gcp.gcs.GCSFileIOfestlegen. Der Standardwertorg.apache.iceberg.hadoop.HadoopFileIOwird nicht unterstützt.
Tabellenbeschränkungen
- Tabellen, die über den Apache Iceberg REST-Katalogendpunkt verwaltet werden, unterstützen keine detaillierte Zugriffssteuerung (Fine-Grained Access Control, FGAC), z. B. Sicherheit auf Zeilen- und Spaltenebene.
Dateneinschränkungen
- Es werden nur Parquet-Dateien unterstützt. Weitere Informationen dazu, wie BigQuery Parquet-Dateien verarbeitet, finden Sie unter Parquet-Daten aus Cloud Storage laden.
- Die Dateigröße für Iceberg-
metadata.json-Dateien ist auf 1 MB begrenzt. Wenn Sie eine Erhöhung dieses Limits beantragen möchten, wenden Sie sich an Ihr Google-Account-Team.
Abfragebeschränkungen
- Ansichten über Apache Iceberg-Tabellen, die vom Apache Iceberg REST-Katalogendpunkt verwaltet werden, können nicht in BigQuery erstellt werden.
- Apache Iceberg-Metadatentabellen (z. B.
.snapshotsoder.files) können in BigQuery nicht mit fünfteiligen Namens-IDs abgefragt werden. Sie können diese Tabellen mit Spark abfragen.
Iceberg-REST-Katalogendpunkt einrichten
Bevor Sie Ihren Katalog einrichten, sollten Sie sich die Übersicht über Apache Iceberg REST-Katalogendpunkte ansehen, um die Ressourcenhierarchie, die Katalogtypen und die Namensstruktur zu verstehen.
Im Folgenden finden Sie die allgemeinen Schritte, die Sie ausführen müssen, wenn Sie den Apache Iceberg REST-Katalogendpunkt im Lakehouse-Laufzeitkatalog verwenden:
- Wählen Sie anhand der Übersicht über Iceberg-REST-Katalogendpunkte den Speicherort Ihres Katalog-Data Warehouse aus (entweder Cloud Storage oder BigQuery).
- Wenn Sie ein
gs://-Warehouse in Cloud Storage verwenden, erstellen Sie einen Katalog, der auf den Speicherort Ihres Warehouses verweist. - Konfigurieren Sie Ihre Clientanwendung für die Verwendung des Apache Iceberg-REST-Katalogendpunkts.
- Erstellen Sie einen Namespace oder ein Schema, um Ihre Tabellen zu organisieren.
- Tabellen mit dem konfigurierten Client erstellen und abfragen
Katalog erstellen
Sie können einen Katalog erstellen, der entweder Anmeldedaten von Endnutzern oder den Modus für die Bereitstellung von Anmeldedaten verwendet.
Mit Endnutzeranmeldedaten übergibt der Katalog die Identität des Endnutzers, der darauf zugreift, zur Autorisierungsprüfung an Cloud Storage.
Die Bereitstellung von Anmeldedaten ist ein Mechanismus zur Delegierung des Speicherzugriffs, mit dem Administratoren des Lakehouse-Laufzeitkatalogs Berechtigungen direkt für Ressourcen des Lakehouse-Laufzeitkatalogs steuern können. Dadurch ist es nicht erforderlich, dass Katalognutzer direkten Zugriff auf Cloud Storage-Buckets haben. Damit können Lakehouse-Administratoren in Google Cloud Nutzern Berechtigungen für bestimmte Datendateien erteilen.
Hinweise
Machen Sie sich mit den Standortanforderungen vertraut, bevor Sie einen Katalog erstellen.
Wenn Sie einen Namespace erstellen, wird automatisch dieselbe Region wie für Ihren Katalog verwendet.
Wenn Ihr Katalog einen multiregionalen Bucket verwendet und Sie ihn mit den BigQuery-Multiregionen (
USoderEU) verwenden möchten, müssen Sie den Katalog löschen und neu erstellen, um den primären Standort anzugeben.
Anmeldedaten für Endnutzer
Console
Öffnen Sie in der Google Cloud Console die Seite Lakehouse.
Klicken Sie auf Katalog erstellen.
Geben Sie im Feld Cloud Storage-Bucket auswählen den Namen des Cloud Storage-Buckets ein, der für Ihren Katalog verwendet werden soll. Alternativ können Sie auf Durchsuchen klicken, um einen vorhandenen Bucket auszuwählen oder einen neuen zu erstellen. Sie können nur einen Katalog pro Cloud Storage-Bucket haben.
Wählen Sie unter Authentication method (Authentifizierungsmethode) die Option End-user credentials (Anmeldedaten von Endnutzern) aus.
Klicken Sie auf Erstellen.
gcloud
Führen Sie den Befehl gcloud biglake iceberg catalogs create aus.
gcloud biglake iceberg catalogs create \ CATALOG_NAME \ --project PROJECT_ID \ --catalog-type gcs-bucket \ --credential-mode end-user \ [--primary-location LOCATION]
Ersetzen Sie Folgendes:
CATALOG_NAME: ein Name für Ihren Katalog. Bei Apache Iceberg-Tabellen, die vom Lakehouse-Laufzeitkatalog unterstützt werden, stimmt dieser Name häufig mit der Cloud Storage-Bucket-ID überein, die mit dem REST-Katalog verwendet wird. Wenn Ihr Bucket beispielsweisegs://bucket-idist, lautet der Katalognamen möglicherweisebucket-id. Dieser Name wird auch als Katalog-ID verwendet, wenn diese Tabellen in BigQuery abgefragt werden.PROJECT_ID: Projekt-ID in Google Cloud .LOCATION: (Optional) Die primäre Region für den Katalog, um die Interoperabilität mit BigQuery zu gewährleisten. Für Cloud Storage-Buckets in der Region USA (z. B.USoderus-central1) oder in der Region EU (z. B.EUodereurope-west4) geben SieUSbzw.EUan, damit der Katalog aus den entsprechenden BigQuery-Multiregionen aufgerufen und abgefragt werden kann. Weitere Informationen finden Sie unter Bucket- und Katalogregionen.
Modus für Bereitstellung von Anmeldedaten
Ein Katalogadministrator aktiviert die Bereitstellung von Anmeldedaten beim Erstellen oder Aktualisieren eines Katalogs. Als Katalognutzer können Sie dann den Apache Iceberg-REST-Katalogendpunkt anweisen, eingeschränkte Speicheranmeldedaten zurückzugeben. Dazu geben Sie die Zugriffsdelegierung an, wenn Sie den Apache Iceberg-REST-Katalogendpunkt konfigurieren.
Für das automatisch bereitgestellte Dienstkonto des Lakehouse-Laufzeitkatalogs ist die explizite Rolle „Storage Object User“ (roles/storage.objectUser) für den Ziel-Cloud Storage-Bucket erforderlich. Standardmäßig wird sie mit Betrachterzugriff erstellt.
Ohne diese Rolle haben die bereitgestellten Anmeldedaten nicht genügend Berechtigungen, um in den Speicher zu schreiben. Wenn Sie Tools wie gcloud oder Terraform verwenden, müssen Sie diese Rolle manuell zuweisen.
Console
Öffnen Sie in der Google Cloud Console die Seite Lakehouse.
Klicken Sie auf Katalog erstellen. Die Seite Katalog erstellen wird geöffnet.
Geben Sie unter Cloud Storage-Bucket auswählen den Namen des Cloud Storage-Buckets ein, der für Ihren Katalog verwendet werden soll. Alternativ können Sie auf Durchsuchen klicken, um einen Bucket aus einer Liste vorhandener Buckets auszuwählen oder einen neuen Bucket zu erstellen. Sie können nur einen Katalog pro Cloud Storage-Bucket haben.
Wählen Sie unter Authentication method (Authentifizierungsmethode) die Option Credential vending mode (Modus für Bereitstellung von Anmeldedaten) aus.
Klicken Sie auf Erstellen.
Ihr Katalog wird erstellt und die Seite Katalogdetails wird geöffnet.
Klicken Sie unter Authentifizierungsmethode auf Bucket-Berechtigungen festlegen.
Klicken Sie im Dialogfeld auf Bestätigen.
So wird überprüft, ob das Dienstkonto Ihres Katalogs die Rolle „Storage-Objekt-Administrator“ für Ihren Speicher-Bucket hat.
gcloud
Führen Sie den Befehl gcloud biglake iceberg catalogs create aus.
gcloud biglake iceberg catalogs create \ CATALOG_NAME \ --project PROJECT_ID \ --catalog-type gcs-bucket \ --credential-mode vended-credentials \ [--primary-location LOCATION]
Ersetzen Sie Folgendes:
CATALOG_NAME: ein Name für Ihren Katalog. Dieser Name entspricht oft der Cloud Storage-Bucket-ID, die mit dem REST-Katalog verwendet wird. Wenn Ihr Bucket beispielsweisegs://bucket-idist, lautet der Katalogname möglicherweisebucket-id. Dieser Name wird auch als Katalog-ID verwendet, wenn diese Tabellen in BigQuery abgefragt werden.PROJECT_ID: Ihre Google Cloud Projekt-ID.LOCATION: (Optional) Die primäre Region für den Katalog, um die Interoperabilität mit BigQuery zu gewährleisten. Geben Sie für Cloud Storage-Buckets in der Region „US“ (z. B.USoderus-central1) oder in der Region „EU“ (z. B.EUodereurope-west4)USbzw.EUan, damit der Katalog aus den entsprechenden BigQuery-Multiregionen aufgerufen und abgefragt werden kann. Weitere Informationen finden Sie unter Bucket- und Katalogregionen.Nachdem Sie den Katalog erstellt haben, weisen Sie dem automatisch bereitgestellten Dienstkonto des Lakehouse-Laufzeitkatalogs die Rolle Storage Object User (
roles/storage.objectUser) für Ihren Speicher-Bucket explizit zu.
Clientanwendung konfigurieren
Nachdem Sie einen Katalog erstellt haben, konfigurieren Sie Ihre Clientanwendung für die Verwendung des Katalogs. In diesen Beispielen wird gezeigt, wie Sie die Konfiguration mit oder ohne Bereitstellung von Anmeldedaten vornehmen.
Cluster
Wenn Sie Spark mit dem Apache Iceberg REST-Katalogendpunkt in Managed Service for Apache Spark verwenden möchten, können Sie die Konfiguration mit Eigenschaften vereinfachen oder die Sitzung manuell konfigurieren.
Vereinfachte Konfiguration mithilfe von Properties (empfohlen)
Cluster mit der Katalog-Property erstellen:
gcloud dataproc clusters create CLUSTER_NAME \ --enable-component-gateway \ --project=PROJECT_ID \ --region=REGION \ --optional-components=ICEBERG \ --image-version=DATAPROC_VERSION \ --properties="dataproc:dataproc.lakehouse.catalog.CATALOG_NAME=projects/PROJECT_ID/catalogs/CATALOG_ID"
Ersetzen Sie Folgendes:
CLUSTER_NAME: Ein Name für Ihren Cluster.PROJECT_ID: Ihre Google Cloud Projekt-IDREGION: Die Region des Managed Service for Apache Spark-Clusters.DATAPROC_VERSION: Die Image-Version von Managed Service for Apache Spark, z. B.2.2.CATALOG_NAME: Ein Name für den Lakehouse-Katalog, der in Spark verwendet werden soll. Er kann mit CATALOG_ID identisch sein.CATALOG_ID: Die ID des von Ihnen erstellten Lakehouse-Katalogs.
Erstellen Sie dann eine Spark-Sitzung, ohne manuelle Katalogparameter anzugeben:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("APP_NAME").getOrCreate()
Manuelle Konfiguration
Wenn Sie das Clusterattribut nicht verwenden, erstellen Sie einen Cluster wie oben beschrieben (ohne das Flag --properties) und konfigurieren Sie dann Ihre Spark-Sitzung manuell:
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/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'WAREHOUSE_PATH') \ .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('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
Ersetzen Sie Folgendes:
CATALOG_NAME: Der Name des Apache Iceberg-REST-Katalogendpunkts.APP_NAME: Ein Name für Ihre Spark-Sitzung.REST_API_VERSION: aufv1für die stabile Version der API festgelegt. Aufv1betasetzen, wenn Sie ein bekanntes Problem bei der Generierung des Datenursprungs umgehen müssen.WAREHOUSE_PATH: Der Pfad zu Ihrem Warehouse. Verwenden Siegs://CLOUD_STORAGE_BUCKET_NAME. Informationen zur Verwendung der BigQuery-Katalogföderation finden Sie unter Katalogföderation mit BigQuery verwenden.PROJECT_ID: Das Projekt, das für die Verwendung des Apache Iceberg REST-Katalogendpunkts abgerechnet wird. Dies kann sich vom Projekt unterscheiden, zu dem der Cloud Storage-Bucket gehört. Weitere Informationen zur Projektkonfiguration bei Verwendung einer REST API finden Sie unter Systemparameter.
Mit Bereitstellung von Anmeldedaten konfigurieren
Wenn Sie die Bereitstellung von Anmeldedaten verwenden möchten, müssen Sie einen Katalog im Modus für die Bereitstellung von Anmeldedaten verwenden und 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/REST_API_VERSION/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('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
Weitere Informationen finden Sie in der Apache Iceberg-Dokumentation im Abschnitt Headers in the RESTCatalog section.
Managed Service for Apache Spark-Cluster unterstützen Google-Autorisierungsabläufe für Apache Iceberg in den folgenden Versionen:
- Managed Service for Apache Spark in Compute Engine 2.2-Image-Versionen 2.2.65 und höher.
- Managed Service for Apache Spark in Compute Engine 2.3-Image-Versionen 2.3.11 und höher.
Serverlos
Senden Sie eine PySpark-Batcharbeitslast an Managed Service for Apache Spark. Verwenden Sie dazu Attribute, um die Konfiguration zu vereinfachen (empfohlen), oder geben Sie alle Parameter an.
Vereinfachte Konfiguration mit Properties (empfohlen)
Senden Sie einen Batchjob mit der Katalog-Property:
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="dataproc:dataproc.lakehouse.catalog.CATALOG_NAME=projects/PROJECT_ID/catalogs/CATALOG_ID"
Manuelle Konfiguration
Wenn Sie alle Properties lieber manuell angeben möchten, verwenden Sie die folgende 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/REST_API_VERSION/restcatalog,\ spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_PATH,\ spark.sql.catalog.CATALOG_NAME.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ 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"
Ersetzen Sie Folgendes:
PYSPARK_FILE: Dergs://Cloud Storage-Pfad zu Ihrer PySpark-Anwendungsdatei.PROJECT_ID: Projekt-ID in Google Cloud .REGION: die Region für die Managed Service for Apache Spark-Batcharbeitslast.RUNTIME_VERSION: die Laufzeitversion von Managed Service for Apache Spark, z. B.2.2.CATALOG_NAME: Der Name des Apache Iceberg-REST-Katalogendpunkts.REST_API_VERSION: aufv1für die stabile Version der API festgelegt. Aufv1betasetzen, wenn Sie ein bekanntes Problem bei der Generierung des Datenursprungs umgehen müssen.WAREHOUSE_PATH: Der Pfad zu Ihrem Warehouse. Verwenden Siegs://CLOUD_STORAGE_BUCKET_NAME. Informationen zur Verwendung der BigQuery-Katalogföderation finden Sie unter Katalogföderation mit BigQuery verwenden.
Mit Bereitstellung von Anmeldedaten konfigurieren
Wenn Sie die Bereitstellung von Anmeldedaten verwenden möchten, müssen Sie einen Katalog im Modus für die Bereitstellung von Anmeldedaten verwenden und den Header X-Iceberg-Access-Delegation den Apache Iceberg-REST-Katalogendpunktanfragen mit dem Wert vended-credentials hinzufügen. Fügen Sie dazu die folgende Zeile den Managed Service 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/REST_API_VERSION/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.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token, \ spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials"
Weitere Informationen finden Sie im Abschnitt Headers in the RESTCatalog der Apache Iceberg-Dokumentation.
Managed Service for Apache Spark unterstützt Google-Autorisierungsabläufe für Apache Iceberg in den folgenden Laufzeitversionen:
- Managed Service for Apache Spark 2.2-Laufzeiten 2.2.60 und höher
- Managed Service for Apache Spark 2.3-Laufzeiten 2.3.10 und höher
Trino
Wenn Sie Trino mit dem Apache Iceberg REST-Katalogendpunkt verwenden möchten, erstellen Sie einen Managed Service for Apache Spark-Cluster mit der Trino-Komponente und konfigurieren Sie die Katalogeigenschaften 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/REST_API_VERSION/restcatalog,\ trino-catalog:CATALOG_NAME.iceberg.rest-catalog.warehouse=WAREHOUSE_PATH,\ 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 Managed Service for Apache Spark-Clusters.DATAPROC_VERSION: Die Image-Version von Managed Service for Apache Spark, z. B.2.2.NETWORK_ID: Cluster-Netzwerk-ID. Weitere Informationen finden Sie unter Netzwerkkonfiguration für Managed Service for Apache Spark-Cluster.CATALOG_NAME: Der Name Ihres Trino-Katalogs mit dem Apache Iceberg-REST-Katalogendpunkt.REST_API_VERSION: aufv1für die stabile Version der API festgelegt. Aufv1betasetzen, wenn Sie ein bekanntes Problem bei der Generierung des Datenursprungs umgehen müssen.WAREHOUSE_PATH: Der Pfad zu Ihrem Warehouse. Verwenden Siegs://CLOUD_STORAGE_BUCKET_NAME.PROJECT_ID: Ihre Google Cloud Projekt-ID für den Lakehouse-Laufzeitkatalog.
Stellen Sie nach dem Erstellen des Clusters eine Verbindung zur Haupt-VM-Instanz her und verwenden Sie die Trino-Befehlszeile:
trino --catalog=CATALOG_NAME
Managed Service for Apache Spark Trino unterstützt Google-Autorisierungsabläufe für Apache Iceberg in den folgenden Versionen:
- Managed Service for Apache Spark in Compute Engine 2.2-Laufzeitversionen 2.2.65 und höher
- Managed Service for Apache Spark in Compute Engine-Laufzeitversionen 2.3 2.3.11 und höher
- Managed Service for Apache Spark in Compute Engine 3.0 wird nicht unterstützt.
Mit Bereitstellung von Anmeldedaten konfigurieren
Die Bereitstellung von Anmeldedaten wird nur in Trino-Version 481 und höher unterstützt.
Apache Iceberg 1.10 oder höher
Open-Source-Versionen von Apache 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 Spark für die Verwendung des Lakehouse-Laufzeitkatalogs und des Apache Iceberg-REST-Katalogendpunkts.
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/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'WAREHOUSE_PATH') \ .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('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
Ersetzen Sie Folgendes:
CATALOG_NAME: Der Name des Apache Iceberg-REST-Katalogendpunkts.APP_NAME: Ein Name für Ihre Spark-Sitzung.REST_API_VERSION: aufv1für die stabile Version der API festgelegt. Aufv1betasetzen, wenn Sie ein bekanntes Problem bei der Generierung des Datenursprungs umgehen müssen.WAREHOUSE_PATH: Der Pfad zu Ihrem Warehouse. Verwenden Siegs://CLOUD_STORAGE_BUCKET_NAME. Informationen zur Verwendung der BigQuery-Katalogföderation finden Sie unter Katalogföderation mit BigQuery verwenden.PROJECT_ID: Das Projekt, das für die Verwendung des Apache Iceberg-REST-Katalogendpunkts abgerechnet wird. Dies kann sich vom Projekt unterscheiden, zu dem der Cloud Storage-Bucket gehört. Weitere Informationen zur Projektkonfiguration bei Verwendung einer REST API finden Sie unter Systemparameter.
Mit Bereitstellung von Anmeldedaten konfigurieren
Im vorherigen Beispiel wird keine Bereitstellung von Anmeldedaten verwendet. Wenn Sie die Bereitstellung von Anmeldedaten verwenden möchten, müssen Sie einen Katalog im Modus für die Bereitstellung von Anmeldedaten verwenden und den Header X-Iceberg-Access-Delegation mit dem Wert vended-credentials zu den Apache Iceberg REST-Katalogendpunktanfragen 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/REST_API_VERSION/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('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
Weitere Informationen finden Sie im Abschnitt Headers in the RESTCatalog der Apache Iceberg-Dokumentation.
Frühere Apache Iceberg-Releases
Für Open-Source-Apache Iceberg-Releases vor Version 1.10 können Sie die standardmäßige OAuth-Authentifizierung konfigurieren, indem Sie eine Sitzung mit Folgendem 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/REST_API_VERSION/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'WAREHOUSE_PATH') \ .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('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
Ersetzen Sie Folgendes:
CATALOG_NAME: Der Name des Apache Iceberg-REST-Katalogendpunkts.APP_NAME: Ein Name für Ihre Spark-Sitzung.REST_API_VERSION: aufv1für die stabile Version der API festgelegt. Aufv1betasetzen, wenn Sie ein bekanntes Problem bei der Generierung des Datenursprungs umgehen müssen.WAREHOUSE_PATH: Der Pfad zu Ihrem Warehouse. Verwenden Siegs://CLOUD_STORAGE_BUCKET_NAME. Informationen zur Verwendung der BigQuery-Katalogföderation finden Sie unter Katalogföderation mit BigQuery verwenden.PROJECT_ID: Das Projekt, das für die Verwendung des Apache Iceberg-REST-Katalogendpunkts abgerechnet wird. Dies kann sich vom Projekt unterscheiden, zu 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 mitgcloud auth application-default print-access-tokengeneriertes Token.
Mit Bereitstellung von Anmeldedaten konfigurieren
Im vorherigen Beispiel wird keine Bereitstellung von Anmeldedaten verwendet. Wenn Sie die Bereitstellung von Anmeldedaten verwenden möchten, müssen Sie einen Katalog im Modus für die Bereitstellung von Anmeldedaten verwenden und den Header X-Iceberg-Access-Delegation mit dem Wert vended-credentials zu den Apache Iceberg REST-Katalogendpunktanfragen 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/REST_API_VERSION/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('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \ .getOrCreate()
Weitere Informationen finden Sie im Abschnitt Headers in the RESTCatalog der Apache Iceberg-Dokumentation.
Namespace oder Schema erstellen
Nachdem Sie Ihren Client konfiguriert haben, erstellen Sie einen Namespace oder ein Schema, um Ihre Tabellen zu organisieren. Die Syntax zum Erstellen eines Namespace oder Schemas variiert je nach Abfrage-Engine. In den folgenden Beispielen wird gezeigt, wie Sie sie mit Spark und Trino erstellen.
Spark
Cloud Storage-Warehouse
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
Cloud Storage-Warehouse
CREATE SCHEMA IF NOT EXISTS CATALOG_NAME.SCHEMA_NAME; USE CATALOG_NAME.SCHEMA_NAME;
Ersetzen Sie Folgendes:
CATALOG_NAME: Der Name Ihres Trino-Katalogs mit dem Apache Iceberg-REST-Katalogendpunkt.SCHEMA_NAME: Ein Name für Ihr Schema.
Nächste Schritte
Informationen zum Abfragen von Tabellen und zur Verwendung der Katalogföderation mit BigQuery
Informationen zum Verwalten von Katalogen in der Google Cloud Konsole
Weitere Informationen zu Lakehouse-REST-Katalogtabellen für Apache Iceberg