BigLake Metastore mit dem Iceberg REST Catalog 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 Catalog verwenden, werden als BigLake-Tabellen für Apache Iceberg (Vorabversion) bezeichnet. Das 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
-
Make sure that billing is enabled for your Google Cloud project.
So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist. -
Enable the BigLake API.
- Optional: Funktionsweise von BigLake Metastore und Gründe für die Verwendung
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt oder Dienstkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwenden des Iceberg-REST-Katalogs im BigLake-Metastore benötigen:
-
BigLake-Administrator (
roles/biglake.admin
) -
Storage-Administrator (
roles/storage.admin
)
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
Für den Iceberg-REST-Katalog gelten die folgenden Einschränkungen:
- Multiregionale Buckets, biregionale Buckets und Buckets mit benutzerdefinierter Regionsplatzierung werden nicht unterstützt.
Abfrage-Engine mit dem Iceberg REST-Katalog konfigurieren
import google.auth from google.auth.transport.requests import Request from google.oauth2 import service_account import pyspark from pyspark.context import SparkContext from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config("spark.sql.defaultCatalog", catalog_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/v1beta/restcatalog") \ .config(f"spark.sql.catalog.{catalog_name}.warehouse", "gs://STORAGE_URI") \ .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}.header.x-goog-user-project", "PROJECT_ID") \ .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \ .config(f"spark.sql.catalog.{catalog_name}.io-impl","org.apache.iceberg.hadoop.HadoopFileIO") \ .config(f"spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled", "false") \ .getOrCreate()
Ersetzen Sie Folgendes:
CATALOG_NAME
: Ein Name für Ihren Iceberg-REST-Katalog.APP_NAME
: Ein Name für Ihre Spark-Sitzung.STORAGE_URI
: Der URI des Cloud Storage-Buckets, der Ihre BigLake Iceberg-Tabellen enthält.TOKEN
: Ihr Authentifizierungstoken, das eine Stunde lang gültig ist, z. B.gcloud auth application-default print-access-token
.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.
Namespace erstellen
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.
Tabelle erstellen
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 NamespaceTABLE_NAME
: Ein Name für Ihre Tabelle
Tabellen auflisten
spark.sql("SHOW TABLES").show()
Daten in die Tabelle einfügen
Im folgenden Beispiel werden Beispieldaten in die Tabelle eingefügt:
spark.sql("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.sql("SELECT * FROM TABLE_NAME;").show()
Tabellenschema ändern
Im folgenden Beispiel wird der Tabelle eine Spalte hinzugefügt:
spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);") spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()
Tabelle löschen
Im folgenden Beispiel wird die Tabelle aus dem angegebenen Namespace gelöscht:
spark.sql("DROP TABLE TABLE_NAME;")
Preise
Preisdetails finden Sie unter BigLake-Preise.
Nächste Schritte
- Weitere Informationen zum Verwalten von Iceberg-Ressourcen mit dem BigLake Metastore
- Weitere Informationen zu BigLake Metastore-Funktionen