BigQuery mit Katalogföderation abfragen

Lakehouse bietet Interoperabilität mit BigQuery über ein Feature namens BigQuery-Katalogföderation. Mit diesem Feature können Sie Tabellen, die von BigQuery verwaltet werden, z. B. von Iceberg verwaltete Tabellen, für externe Open-Source-Engines (OSS) wie Apache Spark und Trino verfügbar machen.

Anstatt einen dedizierten Lakehouse-Katalogcontainer zum Speichern von Metadaten zu erstellen, fungiert der Apache Iceberg REST-Katalogendpunkt lediglich als Proxy-Gateway. Wenn externe Engines eine Verbindung mit dem Warehouse-Präfix bq:// herstellen, leitet das Gateway ihre Kataloganfragen direkt an den internen Katalog von BigQuery weiter. So können Sie Tabellen direkt in BigQuery mit der Standard-DDL oder den APIs von BigQuery erstellen und verwalten und gleichzeitig externen OSS-Engines schreibgeschützten Zugriff auf diese Tabellen über den REST-Katalogendpunkt gewähren.

Funktionsweise der BigQuery-Katalogföderation

Mit der BigQuery-Katalogföderation können Sie BigQuery-Tabellen wie von Iceberg verwaltete Tabellen und BigQuery-Metastore-Tabellen über den Apache Iceberg REST-Katalogendpunkt des Lakehouse-Laufzeitkatalogs verfügbar machen.

Der Ablauf der BigQuery-Katalogföderation sieht so aus:

  1. Tabelle im BigQuery-Katalog erstellen: Sie erstellen eine von Iceberg verwaltete Tabelle in BigQuery mit DDL-Anweisungen. Diese Tabelle ist im BigQuery-Katalog vorhanden, unterliegt den BigQuery-Zugriffskontrolllisten (Access Control Lists, ACLs) und fungiert als BigQuery-REST-Ressource.
  2. Aus dem Lakehouse-Laufzeitkatalog in das BigQuery-Warehouse föderieren: Mit der Apache Iceberg REST API des Lakehouse-Laufzeitkatalogs können Sie in ein Warehouse föderieren, das durch das bq://projects/PROJECT_ID Warehouse-Pfadformat (oder die regionale Version, bq://projects/PROJECT_ID/locations/LOCATION) angegeben wird. So können Sie über die Lakehouse API von Compute-Engines wie Apache Spark auf die BigQuery-Tabelle zugreifen. In dieser Konfiguration haben Sie in Spark schreibgeschützten Zugriff, in BigQuery jedoch Lese- und Schreibzugriff.

Hinweise

  • Da bei der BigQuery-Katalogföderation keine dedizierte Lakehouse-Katalogressource erstellt wird, gelten andere Konzepte und Konfigurationen auf Katalogebene wie die Ressourcenhierarchie, Bucket- und Katalogregionen sowie die vierteilige Namensstruktur P.C.N.T nicht für diese Methode. In der zugrunde liegenden API entspricht dies der Konfiguration CATALOG_TYPE_BIGQUERY. Die Delegierung des Speicherzugriffs (Anbieten von Anmeldedaten) wird für föderierte BigQuery-Kataloge nicht unterstützt.

  • Die BigQuery-Katalogföderation unterscheidet sich von der Funktion für den cloudübergreifenden Datenzugriff von Borderless Lakehouse. Während bei der BigQuery-Katalogföderation Google Cloud-Tabellen für externe OSS-Engines verfügbar gemacht werden, verbindet Lakehouse Google Cloud mit externen Remote-Katalogen wie Databricks Unity Catalog, um Daten abzufragen, die bei anderen Cloud-Anbietern gespeichert sind. Dies erfolgt direkt aus BigQuery und OSS-Engines, ohne dass Daten migriert werden müssen. Weitere Informationen zu diesem Workflow finden Sie unter Cloudübergreifender Datenzugriff.

Vergleich mit Tabellen, die vom Apache Iceberg REST-Katalogendpunkt verwaltet werden

Die BigQuery-Katalogföderation unterscheidet sich in folgenden Punkten von Workflows, bei denen der Lakehouse-Laufzeitkatalog den Apache Iceberg REST-Katalogendpunkt verwendet:

  • Ressourcenverwaltung und Katalogspeicher: Föderierte Tabellen befinden sich als BigQuery-REST-Ressourcen im BigQuery-Katalog und der Lakehouse-Laufzeitkatalog fungiert als Proxy-Gateway. Wenn der Lakehouse-Laufzeitkatalog den Apache Iceberg REST-Katalogendpunkt verwendet, werden Tabellen direkt im Katalog als Lakehouse-REST-Ressourcen gespeichert.
  • Zugriffssteuerung: Föderierte Tabellen verwenden BigQuery-IAM- Berechtigungen und -Zugriffskontrolllisten (ACLs). Wenn der Lakehouse-Laufzeitkatalog den Apache Iceberg REST-Katalogendpunkt verwendet, verwenden Tabellen Lakehouse-ACLs.
  • Lese- und Schreibfunktionen der Engine: Föderierte Tabellen bieten Lese- und Schreibzugriff über BigQuery, aber schreibgeschützten Zugriff von externen Engines wie Spark. Wenn der Lakehouse-Laufzeitkatalog den Apache Iceberg REST-Katalogendpunkt verwendet, unterstützen Tabellen Lese- und Schreibvorgänge sowohl von BigQuery APIs als auch von externen Engines wie Spark.

Hinweis

  1. Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.

  2. Aktivieren Sie die BigLake API.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen.

    API aktivieren

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie für die Verwendung der Katalogföderation in BigQuery benötigen:

  • Katalogressourcen lesen und Tabellendaten abfragen:
  • DML-Vorgänge (Data Manipulation Language) mit der BigQuery-Katalogföderation ausführen:
    • BigQuery Data Editor (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 diese Rollen dem Dienstkonto zu, mit dem Sie Jobs in dieser Engine ausführen.

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.

BigQuery-Katalogföderation einrichten

Wenn Sie die BigQuery-Katalogföderation aktivieren möchten, konfigurieren Sie Ihren Client (z. B. Apache Spark oder Trino) mit dem bq://projects/PROJECT_ID Warehouse-Format in dem WAREHOUSE_PATH Feld in den Clientkonfigurationsbeispielen unter Clientanwendung konfigurieren.

Sie können auch einen BigQuery-Standort angeben, um zukünftige Anfragen auf einen einzelnen Standort zu beschränken. Verwenden Sie dazu das bq://projects/PROJECT_ID/locations/LOCATION Format.

Da diese Ressourcen von BigQuery verwaltet werden, müssen Sie die entsprechenden erforderlichen Berechtigungen haben.

Namespaces für föderierte Tabellen erstellen

Nachdem Sie Ihren Client für die BigQuery-Katalogföderation konfiguriert haben, können Sie einen Namespace für Ihre föderierten Tabellen erstellen.

Spark

Wenn Sie die BigQuery-Katalogföderation verwenden möchten, fügen Sie die Klauseln LOCATION und DBPROPERTIES ein:

spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME LOCATION 'gs://BUCKET_NAME/NAMESPACE_NAME' WITH DBPROPERTIES ('gcp-region' = 'LOCATION');")
spark.sql("USE NAMESPACE_NAME;")

Ersetzen Sie Folgendes:

  • NAMESPACE_NAME: ein Name für Ihren Namespace.
  • BUCKET_NAME: der Cloud Storage-Bucket, den Sie mit Ihrem Katalog verwenden.
  • LOCATION: ein BigQuery-Standort. Der Standardwert ist die Multiregion US.

Trino

Wenn Sie die BigQuery-Katalogföderation verwenden möchten, fügen Sie die Attribute LOCATION und gcp-region ein:

CREATE SCHEMA IF NOT EXISTS  CATALOG_NAME.SCHEMA_NAME WITH ( LOCATION = 'gs://BUCKET_NAME/SCHEMA_NAME', "gcp-region" = 'LOCATION');
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.
  • BUCKET_NAME: der Cloud Storage-Bucket, den Sie mit Ihrem Katalog verwenden.
  • LOCATION: ein BigQuery-Standort. Der Standardwert ist die Multiregion US.

Föderierte Tabellen in BigQuery abfragen

Tabellen, die Sie unter einem föderierten Katalog erstellen, sind in BigQuery sichtbar und können direkt mit Standard-BigQuery-SQL abgefragt werden (ohne dass ein vierteiliger P.C.N.T-Name erforderlich ist):

SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;

Ersetzen Sie Folgendes:

  • NAMESPACE_NAME: der Name Ihres Namespace.
  • TABLE_NAME: der Name Ihrer Tabelle.

Nächste Schritte