Ressourcen im Lakehouse-Laufzeitkatalog erstellen und verwalten

Lakehouse für Apache Iceberg unterstützt die Ressourcenverwaltung über den Lakehouse-Laufzeitkatalog.

Mit diesem freigegebenen Katalog müssen nicht mehrere Kataloge für Open-Source-Arbeitslasten in verschiedenen Datenverarbeitungs-Engines verwaltet werden. Zu den unterstützten Vorgängen gehören das Erstellen, Aufrufen, Ändern und Löschen von Ressourcen wie Namespaces und Tabellen.

Hinweis

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

  2. Aktivieren Sie die BigQuery API, die BigQuery Storage API und die Managed Service for Apache Spark API.

    Erforderliche Rollen zum Aktivieren von APIs

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Informationen zum Zuweisen von Rollen.

    APIs aktivieren

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwalten von Apache Iceberg-Ressourcen im Lakehouse-Laufzeitkatalog benötigen:

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.

Katalogressourcen erstellen

In den folgenden Abschnitten wird beschrieben, wie Sie Ressourcen im Lakehouse-Laufzeitkatalog erstellen.

Namespaces erstellen

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die datasets.insert Methode, und geben Sie das ExternalCatalogDatasetOptions Feld in der Dataset-Ressource an, die Sie übergeben.

{
  "datasetReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID"
  },
  "externalCatalogDatasetOptions": {
    "defaultStorageLocationUri": "URI",
    "parameters": {
      ...
    }
  },
  "location": "LOCATION"
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, das Ihr Ziel-Dataset enthält.
  • DATASET_ID: Die ID Ihres Ziel-Datasets.
  • URI: Der Cloud Storage-URI für alle Tabellen im Dataset.
  • LOCATION: Der BigQuery-Standort, an dem Sie das Dataset erstellen möchten.

Apache Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: Der Name Ihres Apache Spark-Katalogs.
  • NAMESPACE: Der Name Ihres neuen Namespace.

Terraform

provider "google" {
  project = "PROJECT_ID"
}

resource "google_bigquery_dataset" "default" {
  dataset_id = "DATASET_ID"
  location   = "LOCATION"

  external_catalog_dataset_options {
    default_storage_location_uri = "URI"
    parameters = {
      ...
    }
  }
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, das Ihr Ziel-Dataset enthält.
  • DATASET_ID: Die ID Ihres Ziel-Datasets.
  • LOCATION: Der BigQuery-Standort, an dem Sie das Dataset erstellen möchten.
  • URI: Der Cloud Storage-URI für alle Tabellen im Dataset.

Apache Iceberg-Tabellen erstellen

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die tables.insert Methode, und geben Sie das ExternalCatalogTableOptions Feld in der Tabellenressource an, die Sie übergeben.

{
  "tableReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID",
    "tableId": "TABLE_ID"
  },
  "externalCatalogTableOptions": {
    "parameters": {
      "table_type": "iceberg",
      "metadata_location": "METADATA_URI"
    },
    "connection_id": "CONNECTION_ID"
  }
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, das Ihre Ziel-Tabelle enthält.
  • DATASET_ID: Die ID des Datasets, das Ihre Ziel-Tabelle enthält.
  • TABLE_ID: Die ID Ihrer Ziel-Tabelle.
  • METADATA_URI: Der Cloud Storage-URI für die neueste Apache Iceberg-Metadatendatei. Beispiel: gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID: Die ID Ihrer Verbindung zu Cloud Storage.

Apache Spark SQL

CREATE TABLE SPARK_CATALOG.NAMESPACE.TABLE
  (id bigint, data string) USING iceberg;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: Der Name Ihres Apache Spark-Katalogs.
  • NAMESPACE: Der Name Ihres Namespace.
  • TABLE: Der Name Ihrer neuen Tabelle.

Terraform

resource "google_bigquery_table" "default" {
  deletion_protection = false
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "TABLE"

  external_catalog_table_options {
    storage_descriptor {
      location_uri  = "STORAGE_URI"
      input_format  = "org.apache.hadoop.mapred.FileInputFormat"
      output_format = "org.apache.hadoop.mapred.FileOutputFormat"
    }
    parameters = {
      "table_type"        = "iceberg"
      "metadata_location" = "METADATA_URI"
      "write.parquet.compression-codec" : "zstd"
      "EXTERNAL" : "TRUE"
    }
  }
}

Ersetzen Sie Folgendes:

  • TABLE: Der Name der Ziel-Tabelle.
  • STORAGE_URI: Der Cloud Storage-URI, unter dem die Tabellendaten gespeichert sind, beginnend mit gs://.
  • METADATA_URI: Der Cloud Storage-URI für die neueste Apache Iceberg-Metadatendatei. Beispiel: gs://mybucket/mytable/metadata/1234.metadata.json.

Katalogressourcen aufrufen

In den folgenden Abschnitten wird beschrieben, wie Sie Ressourcen im Lakehouse-Laufzeitkatalog aufrufen.

Namespaces aufrufen

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die datasets.list Methode um alle Namespaces aufzurufen, oder verwenden Sie die datasets.get Methode um Informationen zu einem definierten Namespace aufzurufen.

Apache Spark SQL

Verwenden Sie die folgende Anweisung, um alle Namespaces in einem Katalog aufzurufen:

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

Ersetzen Sie SPARK_CATALOG durch den Namen Ihres Apache Spark-Katalogs.

Verwenden Sie die folgende Anweisung, um Informationen zu einem definierten Namespace aufzurufen:

DESCRIBE { DATABASE | NAMESPACE } [EXTENDED]
SPARK_CATALOG.NAMESPACE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: Der Name Ihres Apache Spark-Katalogs.
  • NAMESPACE: Der Name Ihres Namespace.

Tabellen aufrufen

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die tables.list Methode um alle Tabellen in einem Namespace aufzurufen, oder verwenden Sie die tables.get Methode um Informationen zu einer definierten Tabelle aufzurufen.

Apache Spark SQL

Verwenden Sie die folgende Anweisung, um alle Tabellen in einem Namespace aufzurufen:

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: Der Name Ihres Apache Spark-Katalogs.
  • NAMESPACE: Der Name Ihres Namespace.

Verwenden Sie die folgende Anweisung, um Informationen zu einer definierten Tabelle aufzurufen:

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: Der Name Ihres Apache Spark-Katalogs.
  • NAMESPACE: Der Name Ihres Namespace.
  • TABLE: Der Name Ihrer Tabelle.

Katalogressourcen ändern

In den folgenden Abschnitten wird beschrieben, wie Sie Ressourcen im Lakehouse-Laufzeitkatalog ändern.

Namespaces aktualisieren

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die datasets.patch Methode, und aktualisieren Sie das ExternalCatalogDatasetOptions Feld in der Dataset-Ressource. Die Methode datasets.update wird nicht empfohlen, da sie die gesamte Dataset-Ressource ersetzt.

Apache Spark SQL

Verwenden Sie die ALTER DATABASE Anweisung.

Apache Iceberg-Tabellen aktualisieren

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die tables.patch Methode, und aktualisieren Sie das ExternalCatalogTableOptions Feld in der Tabellenressource. Die Methode tables.update wird nicht empfohlen, da sie die gesamte Tabellenressource ersetzt.

Verwenden Sie die Methode tables.patch und legen Sie das Attribut autodetect_schema auf „true“ fest, um das Schema oder die Metadatendatei zu aktualisieren:

PATCH https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID?autodetect_schema=true

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, das die Tabelle enthält, die Sie aktualisieren möchten.
  • DATASET_ID: Die ID des Datasets, das die Tabelle enthält, die Sie aktualisieren möchten.
  • TABLE_ID: Die ID der Tabelle, die Sie aktualisieren möchten.

Geben Sie im Anfragetext den aktualisierten Wert für jedes Feld an. Wenn Sie beispielsweise den Metadatenstandort der Apache Iceberg-Tabelle aktualisieren möchten, geben Sie den aktualisierten Wert für das Feld metadata_location an:

{
  "externalCatalogTableOptions": {
    "parameters": {"metadata_location": "METADATA_URI"}
  },
  "schema": null
}'

Ersetzen Sie METADATA_URI durch den Cloud Storage-URI für die neueste Apache Iceberg-Metadatendatei. Beispiel: gs://mybucket/mytable/metadata/1234.metadata.json.

Apache Spark SQL

Verwenden Sie die ALTER TABLE Anweisung.

Katalogressourcen löschen

In den folgenden Abschnitten wird beschrieben, wie Sie Ressourcen im Lakehouse-Laufzeitkatalog löschen.

Namespaces löschen

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die datasets.delete Methode. Legen Sie den Parameter deleteContents auf „true“ fest, um die Tabellen in Ihrem Namespace zu löschen.

Apache Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: Der Name Ihres Apache Spark-Katalogs.
  • NAMESPACE: Der Name Ihres Namespace.

Tabellen löschen

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die tables.delete Methode und geben Sie den Namen der Tabelle an. Mit dieser Methode werden die zugehörigen Dateien in Cloud Storage nicht gelöscht.

Apache Spark SQL

Verwenden Sie die folgende Anweisung, um nur die Tabelle zu löschen:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: Der Name Ihres Apache Spark-Katalogs.
  • NAMESPACE: Der Name Ihres Namespace.
  • TABLE: Der Name der zu löschenden Tabelle.

Verwenden Sie die folgende Anweisung, um die Tabelle zu löschen und die zugehörigen Dateien in Cloud Storage zu löschen:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: Der Name Ihres Apache Spark-Katalogs.
  • NAMESPACE: Der Name Ihres Namespace.
  • TABLE: Der Name der zu löschenden Tabelle.

Nächste Schritte