Externe Spanner-Datasets erstellen

In diesem Dokument wird beschrieben, wie Sie ein externes Dataset (auch als föderiertes Dataset bezeichnet) in BigQuery erstellen, das mit einer vorhandenen Datenbank in Spanner verknüpft ist.

Ein externes Dataset ist eine Verbindung zwischen BigQuery und einer externen Datenquelle auf Datasetebene. Sie können damit transaktionsbezogene Daten in Spanner-Datenbanken mit GoogleSQL abfragen, ohne alle Daten aus Spanner in den BigQuery-Speicher kopieren oder importieren zu müssen. Diese Abfrageergebnisse werden in BigQuery gespeichert.

Die Tabellen in einem externen Datenpool werden automatisch aus den Tabellen in der entsprechenden externen Datenquelle gefüllt. Sie können diese Tabellen direkt in BigQuery abfragen, aber keine Änderungen vornehmen, etwas hinzufügen oder löschen. Alle Änderungen, die Sie in der externen Datenquelle vornehmen, werden jedoch automatisch in BigQuery übernommen.

Wenn Sie Spanner abfragen, werden die Abfrageergebnisse standardmäßig in temporären Tabellen gespeichert. Sie können optional auch als neue BigQuery-Tabelle gespeichert, mit anderen Tabellen verknüpft oder mithilfe von DML mit vorhandenen Tabellen zusammengeführt werden.

Erforderliche Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Nutzer (roles/bigquery.user) zuzuweisen, um die Berechtigung zu erhalten, die Sie zum Erstellen eines externen Datasets benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigung bigquery.datasets.create, die zum Erstellen eines externen Datasets erforderlich ist.

Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.

CLOUD_RESOURCE-Verbindung verwenden

Optional können externe Spanner-Datasets eine CLOUD_RESOURCE-Verbindung verwenden, um mit Ihrer Spanner-Datenbank zu interagieren. So können Sie Nutzern über BigQuery Zugriff auf Spanner-Daten gewähren, ohne ihnen direkten Zugriff auf die Spanner-Datenbank zu gewähren. Da das Dienstkonto aus der CLOUD_RESOURCE-Verbindung das Abrufen von Daten aus Spanner übernimmt, müssen Sie Nutzern nur Zugriff auf das externe Spanner-Dataset gewähren.

Führen Sie vor dem Erstellen externer Spanner-Datasets mit einer CLOUD_RESOURCE-Verbindung die folgenden Schritte aus:

Verbindung herstellen

Sie können eine CLOUD_RESOURCE-Verbindung erstellen oder eine vorhandene verwenden, um eine Verbindung zu Spanner herzustellen. Folgen Sie der Anleitung auf der Seite Cloud-Ressourcen-Verbindung erstellen, um die Cloud-Ressourcen-Verbindung zu erstellen.

Öffnen Sie die Verbindung nach dem Erstellen und kopieren Sie im Bereich Verbindungsinformationen die Dienstkonto-ID. Sie benötigen diese ID, wenn Sie Berechtigungen für die Verbindung konfigurieren. Wenn Sie eine Verbindungsressource erstellen, erstellt BigQuery ein eindeutiges Systemdienstkonto und ordnet es der Verbindung zu.

Zugriff einrichten

Sie müssen der neuen Verbindung Lesezugriff auf Ihre Spanner-Instanz oder ‑Datenbank gewähren. Wir empfehlen, die vordefinierte IAM-Rolle „Cloud Spanner Database Reader with DataBoost“ (roles/spanner.databaseReaderWithDataBoost) zu verwenden.

So gewähren Sie dem Dienstkonto, das Sie zuvor aus der Verbindung kopiert haben, Zugriff auf Rollen auf Datenbankebene:

  1. Rufen Sie die Seite Spanner-Instanzen auf.

    Zur Seite "Instanzen"

  2. Klicken Sie auf den Namen der Instanz, die Ihre Datenbank enthält, um die Seite Instanzdetails aufzurufen.

  3. Klicken Sie auf dem Tab Übersicht das Kästchen der Datenbank an.
    Das Infofeld wird angezeigt.

  4. Klicken Sie auf Hauptkonto hinzufügen.

  5. Geben Sie im Bereich Hauptkonten hinzufügen unter Neue Hauptkonten die Dienstkonto-ID ein, die Sie zuvor kopiert haben.

  6. Wählen Sie im Feld Rolle auswählen die Option Cloud Spanner-Datenbankleser mit DataBoost-Rolle aus.

  7. Klicken Sie auf Speichern.

Externes Dataset erstellen

So erstellen Sie ein externes Dataset:

Console

  1. Öffnen Sie in der Trusted Cloud Console die Seite „BigQuery“.

    Zur Seite "BigQuery"

  2. Wählen Sie im Bereich Explorer das Projekt aus, in dem Sie das Dataset erstellen möchten.

  3. Maximieren Sie die Option Aktionen und klicken Sie auf Dataset erstellen.

  4. Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:

    • Geben Sie für Dataset-ID einen eindeutigen Dataset-Namen ein.
    • Wählen Sie unter Standorttyp einen Standort für das Dataset aus, z. B. us-central1 oder „Mehrere Regionen“ us. Nachdem Sie ein Dataset erstellt haben, kann der Speicherort nicht mehr geändert werden.
    • Gehen Sie für Externes Dataset so vor:

      • Klicken Sie auf das Kästchen neben Link zu einem externen Datensatz.
      • Wählen Sie für Typ des externen Datasets die Option Spanner aus.
      • Geben Sie unter Externe Quelle die vollständige Kennung Ihrer Spanner-Datenbank im folgenden Format ein: projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Beispiel: projects/my_project/instances/my_instance/databases/my_database.
      • Geben Sie unter Datenbankrolle optional den Namen einer Spanner-Datenbankrolle ein. Weitere Informationen finden Sie unter Datenbankrollen zum Erstellen von Spanner-Verbindungen.
      • Sie können das Kästchen neben Cloud-Ressourcenverbindung verwenden aktivieren, um den externen Datensatz mit einer Verbindung zu erstellen.
    • Übernehmen Sie die anderen Einstellungen.

  5. Klicken Sie auf Dataset erstellen.

SQL

Verwenden Sie die Datendefinitionssprachen-Anweisung (DDL) CREATE EXTERNAL SCHEMA.

  1. Rufen Sie in der Trusted Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE EXTERNAL SCHEMA DATASET_NAME
      OPTIONS (
        external_source = 'SPANNER_EXTERNAL_SOURCE',
        location = 'LOCATION');
    /*
      Alternatively, create with a connection:
    */
    CREATE EXTERNAL SCHEMA DATASET_NAME
      WITH CONNECTION PROJECT_ID.LOCATION.CONNECTION_NAME
      OPTIONS (
        external_source = 'SPANNER_EXTERNAL_SOURCE',
        location = 'LOCATION');

    Ersetzen Sie Folgendes:

    • DATASET_NAME: der Name Ihres neuen Datasets in BigQuery.
    • SPANNER_EXTERNAL_SOURCE: der vollständige, qualifizierte Name der Spanner-Datenbank mit einem Präfix, das die Quelle identifiziert, im folgenden Format: google-cloudspanner://[DATABASE_ROLE@]/projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Beispiel: google-cloudspanner://admin@/projects/my_project/instances/my_instance/databases/my_database oder google-cloudspanner:/projects/my_project/instances/my_instance/databases/my_database.
    • LOCATION: der Speicherort Ihres neuen Datasets in BigQuery, z. B. us-central1. Nachdem Sie ein Dataset erstellt haben, können Sie seinen Standort nicht mehr ändern.
    • Optional:CONNECTION_NAME: der Name der Cloud-Ressourcenverbindung.

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

bq

Erstellen Sie in einer Befehlszeilenumgebung mit dem Befehl bq mk ein externes Dataset:

bq --location=LOCATION mk --dataset \
    --external_source SPANNER_EXTERNAL_SOURCE \
    DATASET_NAME

Alternativ können Sie auch eine Verbindung erstellen:

bq --location=LOCATION mk --dataset \
    --external_source SPANNER_EXTERNAL_SOURCE \
    --connection_id PROJECT_ID.LOCATION.CONNECTION_NAME \
    DATASET_NAME

Ersetzen Sie Folgendes:

  • LOCATION: der Speicherort Ihres neuen Datasets in BigQuery, z. B. us-central1. Nachdem Sie ein Dataset erstellt haben, können Sie seinen Standort nicht mehr ändern. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.
  • SPANNER_EXTERNAL_SOURCE: Der vollständige, qualifizierte Name der Spanner-Datenbank mit einem Präfix, das die Quelle identifiziert, im folgenden Format: google-cloudspanner://[DATABASE_ROLE@]/projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Beispiel: google-cloudspanner://admin@/projects/my_project/instances/my_instance/databases/my_database oder google-cloudspanner:/projects/my_project/instances/my_instance/databases/my_database.
  • DATASET_NAME: der Name Ihres neuen Datasets in BigQuery. Wenn Sie ein Dataset in einem anderen Projekt als dem Standardprojekt erstellen möchten, fügen Sie die Projekt-ID im Format PROJECT_ID:DATASET_NAME dem Dataset-Namen hinzu.
  • Optional:CONNECTION_NAME: der Name der Cloud-Ressourcenverbindung.

Terraform

Verwenden Sie die Ressource google_bigquery_dataset:

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Im folgenden Beispiel wird ein externes Spanner-Dataset erstellt:

resource "google_bigquery_dataset" "default" {
  dataset_id    = "my_external_dataset"
  friendly_name = "My external dataset"
  description   = "This is a test description."
  location      = "US"
  external_dataset_reference {
    # The full identifier of your Spanner database.
    external_source = "google-cloudspanner:/projects/my_project/instances/my_instance/databases/my_database"
    # Must be empty for a Spanner external dataset.
    connection = ""
  }
}

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Trusted Cloud -Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Trusted Cloud Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Trusted Cloud Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Trusted Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

API

Rufen Sie die Methode datasets.insert mit einer definierten Dataset-Ressource und dem externalDatasetReference-Feld für Ihre Spanner-Datenbank auf.

Bei den Namen der Tabellen in den externen Datasets wird die Groß-/Kleinschreibung nicht berücksichtigt.

Wenn Sie die externen Datasets mit einer CLOUD_RESOURCE-Verbindung erstellen, benötigen Sie die Berechtigung bigquery.connections.delegate (über die Rolle „BigQuery Connection Admin“ verfügbar) für die Verbindung, die von den externen Datasets verwendet wird.

Zugriff auf Tabellen steuern

Externe Spanner-Datasets unterstützen Anmeldedaten von Endnutzern. Das bedeutet, dass der Zugriff auf die Spanner-Tabellen aus externen Datasets von Spanner gesteuert wird. Nutzer können diese Tabellen nur abfragen, wenn sie in Spanner Zugriff erhalten haben.

Externe Spanner-Datasets unterstützen auch die Zugriffsdelegierung. Durch die Zugriffsdelegation wird der Zugriff auf die Spanner-Tabellen von externen Datasets und der direkte Zugriff auf die zugrunde liegenden Spanner-Tabellen entkoppelt. Für den Verbindungsaufbau zu Spanner wird eine Cloud-Ressourcenverbindung verwendet, die mit einem Dienstkonto verknüpft ist. Nutzer können diese Spanner-Tabellen aus externen Datensätzen abfragen, auch wenn ihnen in Spanner kein Zugriff gewährt wurde.

Tabellen in einem externen Dataset auflisten

Eine Liste der Tabellen, die in Ihrem externen Dataset für Abfragen verfügbar sind, finden Sie unter Datasets auflisten.

Tabelleninformationen abrufen

Informationen zu den Tabellen in Ihrem externen Datensatz, z. B. Schemadetails, finden Sie unter Tabelleninformationen abrufen.

Spanner-Daten abfragen

Die Abfrage von Tabellen in externen Datasets funktioniert genauso wie die Abfrage von Tabellen in anderen BigQuery-Datasets. DML-Vorgänge (Data Manipulation Language) werden jedoch nicht unterstützt.

Für Abfragen in Tabellen in externen Spanner-Datasets wird standardmäßig Data Boost verwendet. Diese Einstellung kann nicht geändert werden. Daher benötigen Sie zusätzliche Berechtigungen, um solche Abfragen auszuführen.

Ansicht in einem externen Dataset erstellen

Sie können keine Ansicht in einem externen Datensatz erstellen. Sie können jedoch eine Ansicht in einem Standard-Dataset erstellen, die auf einer Tabelle in einem externen Dataset basiert. Weitere Informationen finden Sie unter Ansichten erstellen.

Externes Dataset löschen

Das Löschen eines externen Datasets funktioniert genauso wie das Löschen eines anderen BigQuery-Datasets. Das Löschen externer Datasets hat keine Auswirkungen auf Tabellen in der Spanner-Datenbank. Weitere Informationen finden Sie unter Datasets löschen.

Beschränkungen

  • Es gelten die Einschränkungen für föderierte BigQuery-Abfragen.
  • In BigQuery sind nur Tabellen aus einem Standard-Spanner-Schema zugänglich. Tabellen aus Namensschemata werden nicht unterstützt.
  • In der Spanner-Datenbank definierte Primär- und Fremdschlüssel sind in BigQuery nicht sichtbar.
  • Wenn eine Tabelle in der Spanner-Datenbank eine Spalte eines Typs enthält, der von BigQuery nicht unterstützt wird, ist auf diese Spalte in BigQuery kein Zugriff möglich.
  • In Tabellen in einem externen Spanner-Dataset können keine Daten oder Metadaten hinzugefügt, gelöscht oder aktualisiert werden.
  • In einem externen Spanner-Dataset können keine neuen Tabellen, Ansichten oder materialisierten Ansichten erstellt werden.
  • INFORMATION_SCHEMA-Aufrufe werden nicht unterstützt.
  • Metadaten-Caching wird nicht unterstützt.
  • Einstellungen auf Dataset-Ebene, die sich auf Standardeinstellungen für die Tabellenerstellung beziehen, wirken sich nicht auf externe Datasets aus, da Tabellen nicht manuell erstellt werden können.
  • Spanner-Datenbanken, die den PostgreSQL-Dialekt verwenden, werden nicht unterstützt.
  • Write API und Read API werden nicht unterstützt.
  • Sicherheit auf Zeilen- und Spaltenebene sowie Datenmaskierung werden nicht unterstützt.
  • Materialisierte Ansichten, die auf Tabellen aus externen Spanner-Datasets basieren, werden nicht unterstützt.
  • Die Integration mit Dataplex Universal Catalog wird nicht unterstützt. Datenprofile und Datenqualitätsscans werden beispielsweise nicht unterstützt.
  • Tags auf Tabellenebene werden nicht unterstützt.
  • Die automatische Vervollständigung von SQL funktioniert bei externen Spanner-Tabellen nicht, wenn Sie Abfragen schreiben.
  • Mit Schutz sensibler Daten scannen wird für externe Datasets nicht unterstützt.
  • Die Freigabe mit BigQuery Sharing (früher Analytics Hub) wird für externe Datasets nicht unterstützt.
  • Wenn für das externe Spanner-Dataset Anmeldedaten von Endnutzern verwendet werden, können Sie eine autorisierte Ansicht erstellen, die auf das externe Dataset verweist. Wenn diese Ansicht jedoch abgefragt wird, werden die EUC einer Person, die eine Abfrage ausführt, an Spanner gesendet.
  • Wenn für das externe Spanner-Dataset eine Cloud-Ressourcenverbindung für die Zugriffsdelegierung verwendet wird, können Sie eine autorisierte Ansicht oder eine autorisierte Routine erstellen, die auf das externe Dataset verweist.

Nächste Schritte