Iceberg-Ressourcen im BigLake Metastore verwalten

BigLake Metastore ist ein einzelner, gemeinsam genutzter Metastore, der die gemeinsame Nutzung von Daten über Datenverarbeitungs-Engines hinweg ermöglicht. So müssen Sie keine separaten Metastores für Ihre Open-Source-Arbeitslasten verwalten.

In diesem Dokument wird beschrieben, wie Sie Iceberg-Ressourcen in BigLake Metastore erstellen, ansehen, ändern und löschen.

Hinweise

  1. Make sure 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 BigQuery, BigQuery Storage, and Dataproc APIs.

    Enable the APIs

  3. 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 das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwalten von Iceberg-Ressourcen im BigLake-Metastore 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.

Metastore-Ressourcen erstellen

In den folgenden Abschnitten wird beschrieben, wie Sie Ressourcen im BigLake-Metastore erstellen.

Namespaces erstellen

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die Methode datasets.insert und geben Sie das Feld ExternalCatalogDatasetOptions 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

Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: der Name Ihres Spark-Katalogs
  • NAMESPACE: der Name des 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.

Iceberg-Tabellen erstellen

Wählen Sie eine der folgenden Optionen aus:

API

Verwenden Sie die Methode tables.insert und geben Sie das Feld ExternalCatalogTableOptions 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 Zieltabelle enthält.
  • DATASET_ID: die ID des Datasets, das Ihre Zieltabelle enthält.
  • TABLE_ID: Die ID Ihrer Zieltabelle.
  • METADATA_URI: Der Cloud Storage-URI für die aktuelle Iceberg-Metadatendatei. Beispiel: gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID: die ID Ihrer Verbindung zu Cloud Storage.

Spark SQL

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

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: der Name Ihres Spark-Katalogs
  • NAMESPACE ist der Name Ihres Namespace
  • TABLE: Name der 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 Zieltabelle.
  • STORAGE_URI: Der Cloud Storage-URI, unter dem die Tabellendaten gespeichert sind, beginnend mit gs://.
  • METADATA_URI: Der Cloud Storage-URI für die aktuelle Iceberg-Metadatendatei. Beispiel: gs://mybucket/mytable/metadata/1234.metadata.json.

Metastore-Ressourcen aufrufen

In den folgenden Abschnitten wird beschrieben, wie Sie Ressourcen im BigLake-Metastore ansehen.

Namespaces ansehen

Wählen Sie eine der folgenden Optionen aus:

API

Mit der Methode datasets.list können Sie alle Namespaces aufrufen. Mit der Methode datasets.get können Sie Informationen zu einem definierten Namespace aufrufen.

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 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 Spark-Katalogs
  • NAMESPACE ist der Name Ihres Namespace

Tabellen anzeigen

Wählen Sie eine der folgenden Optionen aus:

API

Mit der Methode tables.list können Sie alle Tabellen in einem Namespace aufrufen. Mit der Methode tables.get können Sie Informationen zu einer bestimmten Tabelle aufrufen.

Spark SQL

Mit der folgenden Anweisung können Sie alle Tabellen in einem Namespace aufrufen:

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: der Name Ihres Spark-Katalogs
  • NAMESPACE ist der Name Ihres Namespace

Mit der folgenden Anweisung können Sie Informationen zu einer definierten Tabelle aufrufen:

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: der Name Ihres Spark-Katalogs
  • NAMESPACE ist der Name Ihres Namespace
  • TABLE: Name Ihrer Tabelle

Metastore-Ressourcen ändern

In den folgenden Abschnitten wird beschrieben, wie Sie Ressourcen im BigLake-Metastore ä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.

Spark SQL

Verwenden Sie die Anweisung ALTER DATABASE.

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.

Wenn Sie das Schema oder die Metadatendatei aktualisieren möchten, verwenden Sie die Methode tables.patch und setzen Sie das Attribut autodetect_schema auf „true“:

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 mit der Tabelle, 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 Metadatenspeicherort der 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 Iceberg-Metadatendatei. Beispiel: gs://mybucket/mytable/metadata/1234.metadata.json.

Spark SQL

Verwenden Sie die Anweisung ALTER TABLE.

Metastore-Ressourcen löschen

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

Namespaces löschen

Wählen Sie eine der folgenden Optionen aus:

API

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

Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: der Name Ihres Spark-Katalogs
  • NAMESPACE ist 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.

Spark SQL

Wenn Sie nur die Tabelle löschen möchten, verwenden Sie die folgende Anweisung:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Ersetzen Sie Folgendes:

  • SPARK_CATALOG: der Name Ihres Spark-Katalogs
  • NAMESPACE ist 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 entfernen:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Ersetzen Sie Folgendes:

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

Nächste Schritte