Föderierte Abfragen mit Data Boost ausführen

Auf dieser Seite wird beschrieben, wie Sie Spanner Data Boost verwenden, wenn Sie föderierte Abfragen von BigQuery für eine Spanner-Datenbank ausführen. Mit Data Boost werden föderierte Abfragen mit minimalen Auswirkungen auf vorhandene Arbeitslasten auf der bereitgestellten Spanner-Instanz ausgeführt. Bei Data Boost-Abfragen von BigQuery an eine Spanner-Datenbank können BigQuery-Daten mit Spanner-Daten verknüpft werden.

Sie können föderierte Abfragen von BigQuery zu Spanner mit Data Boost mit einer der folgenden Methoden ausführen:

Mit der Spanner-Föderation kann BigQuery Daten in Spanner in Echtzeit abfragen, ohne Daten kopieren oder verschieben zu müssen. Weitere Informationen zu föderierten Spanner-Abfragen finden Sie unter Föderierte Spanner-Abfragen. Weitere Informationen zu Data Boost finden Sie unter Data Boost-Übersicht.

Hinweise

Bevor Sie föderierte Abfragen mit Data Boost ausführen können, müssen Sie die folgenden Aufgaben ausführen:

Spanner-Instanz und -Datenbank erstellen

Wenn Sie keine Spanner-Instanz und -Datenbank haben, folgen Sie der Anleitung unter Datenbank mit der Google Cloud Console erstellen und abfragen, um sie zu erstellen.

BigQuery Connection API aktivieren

Mit der BigQuery Connection API können Sie BigQuery-Verbindungen zu externen Datenquellen wie einer Spanner-Datenbank verwalten.

  • Enable the BigQuery connection API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Weitere Informationen finden Sie in der BigQuery Connection API in der BigQuery-Dokumentation.

IAM-Berechtigungen für Data Boost für Hauptkonten erteilen

Einem Prinzipal müssen die folgenden Berechtigungen erteilt werden, damit er föderierte Abfragen mit Data Boost ausführen kann:

  • spanner.instances.get: Hiermit können Sie die Konfiguration einer Instanz abrufen.
  • spanner.databases.useDataBoost: Damit können Sie die Spanner Data Boost-Rechenressourcen verwenden, um partitionierte Abfragen zu verarbeiten.

Weitere Informationen zu Spanner-Berechtigungen finden Sie unter IAM-Berechtigungen (Identity and Access Management).

Wir empfehlen, die erforderlichen Berechtigungen mit der IAM-Rolle Cloud Spanner Database Reader With DataBoost (roles/spanner.databaseReaderWithDataBoost) zu erteilen. Sie können diese Rolle jedem Hauptkonto zuweisen, das föderierte Abfragen mit Data Boost ausführen muss. Weitere Informationen zu vordefinierten Rollen in Spanner finden Sie unter Vordefinierte Rollen. Informationen zum Erstellen einer benutzerdefinierten IAM-Rolle finden Sie unter Benutzerdefinierte Rolle erstellen.

Föderierte Data Boost-Abfrage ausführen

Wenn Sie eine Data Boost-Abfrage von BigQuery an eine externe Quelle senden möchten, benötigen Sie eine BigQuery-Verbindung zur externen Quelle und die ID der Verbindung. Wenn Sie eine föderierte Spanner-Abfrage mit Data Boost ausführen, ist die externe Quelle eine Spanner-Datenbank. Nachdem Sie die Verbindungs-ID erstellt haben, wird sie von BigQuery verwendet, um eine Data Boost-Abfrage einer Spanner-Datenbank auszuführen.

Verwenden Sie eine der folgenden Optionen, um eine BigQuery-Verbindungs-ID zu erstellen, und führen Sie dann mit der Verbindungs-ID eine Data Boost-Abfrage aus BigQuery aus:

  1. In Spanner beginnen: Erstellen Sie die ID der externen BigQuery-Verbindung in der Spanner-Konsole. Nachdem Ihre Verbindungs-ID in der Spanner-Konsole erstellt wurde, werden Sie zur BigQuery-Konsole weitergeleitet, um eine föderierte Data Boost-Abfrage für eine Spanner-Datenbank auszuführen.

  2. In BigQuery beginnen: Erstellen Sie die externe Verbindungs-ID für Data Boost in der BigQuery-Konsole oder mit dem Befehlszeilentool bq. Nachdem Sie die Verbindungs-ID erstellt haben, bleiben Sie in der BigQuery-Konsole, um eine föderierte Data Boost-Abfrage für eine Spanner-Datenbank auszuführen.

Data Boost-Abfrage in Spanner ausführen

So führen Sie eine föderierte Data Boost-Abfrage über Spanner Studio aus:

  1. Rufen Sie in derGoogle Cloud Console die Seite Spanner-Instanzen auf.

    Zur Seite "VM-Instanzen"

    In der Console wird eine Liste Ihrer Spanner-Instanzen angezeigt.

  2. Wählen Sie eine Spanner-Instanz und dann eine Datenbank aus.

  3. Klicken Sie auf der Seite Datenbankübersicht im Navigationsmenü auf Spanner Studio.

  4. Klicken Sie auf In BigQuery ansehen.

  5. Geben Sie im Dialogfeld In BigQuery ansehen eine Verbindungs-ID ein.

    Die Verbindungs-ID wird verwendet, um eine neue externe BigQuery-Verbindung zu Ihrer Spanner-Datenbank herzustellen. Sie verweisen mit dem folgenden Muster auf Ihre externe Verbindung:

    PROJECT-ID.LOCATION.CONNECTION-ID
    

    Ein Fehler tritt auf, wenn die ID bereits vorhanden ist.

  6. Füllen Sie den Rest des Dialogfelds aus und gehen Sie so vor:

    • Wählen Sie Daten gleichzeitig lesen aus.
    • Wählen Sie Spanner Data Boost verwenden aus.
  7. Klicken Sie auf In BigQuery ansehen.

    BigQuery Studio wird mit der folgenden Abfrage geöffnet:

    SELECT * FROM EXTERNAL_QUERY("PROJECT-ID.LOCATION.CONNECTION-ID", "SELECT * FROM INFORMATION_SCHEMA.TABLES;");
    

    Sie können diese durch Ihre föderierte Abfrage ersetzen. Sie könnten beispielsweise eine Abfrage ähnlich dem folgenden Beispiel erstellen. In diesem Beispiel wird eine föderierte Abfrage für eine Tabelle namens orders in einer Spanner-Datenbank ausgeführt und die Ergebnisse werden mit einer BigQuery-Tabelle namens mydataset.customers verknüpft.

    SELECT c.customer_id, c.name, rq.first_order_date
    FROM mydataset.customers AS c
    LEFT OUTER JOIN EXTERNAL_QUERY(
      'my-project.us.example-db',
      '''SELECT customer_id, MIN(order_date) AS first_order_date
      FROM orders
      GROUP BY customer_id''') AS rq
      ON rq.customer_id = c.customer_id
    GROUP BY c.customer_id, c.name, rq.first_order_date;

Data Boost-Abfrage in BigQuery ausführen

Wenn Sie eine externe Datenverbindung von BigQuery zu einer Spanner-Datenbank erstellen und diese Verbindung verwenden möchten, um eine föderierte Data Boost-Abfrage aus BigQuery auszuführen, wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie in der BigQuery-Dokumentation Spanner-Verbindungen erstellen auf und folgen Sie der Anleitung auf dem Tab Console.

  2. Führen Sie im Bereich Externe Datenquelle die folgenden Schritte aus:

    • Wählen Sie Daten gleichzeitig lesen aus.
    • Wählen Sie Spanner Data Boost verwenden aus.

bq

  1. Rufen Sie in der BigQuery-Dokumentation Spanner-Verbindungen erstellen auf und folgen Sie der Anleitung auf dem Tab bq*.

  2. Legen Sie die folgenden Verbindungsattribute auf true fest:

    • useParallelism
    • useDataBoost

Im folgenden Beispiel wird mit dem Befehl bq mk eine neue Verbindung mit dem Namen my_connection mit den beiden erforderlichen Eigenschaften für Data Boost erstellt:

bq mk --connection --connection_type='CLOUD_SPANNER' --location='us' \
--properties='{"database":"projects/my-project/instances/my-instance/databases/my-database", "useParallelism":true, "useDataBoost": true}' my_connection

Data Boost mit externen Datasets verwenden

Wenn Sie eine Data Boost-Abfrage von BigQuery nach Spanner als externe Quelle ausführen möchten, können Sie in BigQuery ein externes Dataset (auch als föderiertes Dataset bezeichnet) erstellen, das mit einer vorhandenen GoogleSQL- oder PostgreSQL-Datenbank in Spanner verknüpft ist.

CLOUD_RESOURCE-Verbindung verwenden

Standardmäßig werden für externe Spanner-Datasets Endnutzeranmeldedaten verwendet. Dazu müssen die Nutzer direkten Zugriff auf ihre Spanner-Datenbanken haben. Nutzer können diese Datasets abfragen, wenn sie in Spanner Zugriff haben.

Optional können für externe Spanner-Datasets eine CLOUD_RESOURCE-Verbindung verwendet werden, um mit Ihrer Spanner-Datenbank zu interagieren. So können Sie einem Nutzer über BigQuery Zugriff auf Spanner-Daten gewähren, ohne ihm direkten Zugriff auf die Spanner-Datenbank zu geben. 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. Durch diese Zugriffsdelegation wird der Zugriff auf die Spanner-Tabellen von externen Datasets und dem direkten 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 Datasets abfragen, auch wenn sie in Spanner keinen Zugriff haben.

Führen Sie vor dem Erstellen externer Cloud 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. Erstellen Sie die Verbindung am selben Speicherort, an dem Sie das externe Cloud Spanner-Dataset erstellen möchten.

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie im linken Bereich auf Explorer:

    Hervorgehobener Button für den Explorer-Bereich.

    Wenn das linke Steuerfeld nicht angezeigt wird, klicken Sie auf  Linkes Steuerfeld maximieren, um es zu öffnen.

  3. Maximieren Sie im Bereich Explorer den Namen Ihres Projekts und klicken Sie dann auf Verbindungen.

  4. Klicken Sie auf der Seite Verbindungen auf Verbindung erstellen.

  5. Wählen Sie als Verbindungstyp die Option Vertex AI-Remote-Modelle, Remote-Funktionen, BigLake und Cloud Spanner (Cloud-Ressource) aus.

  6. Geben Sie im Feld Verbindungs-ID einen Namen für die Verbindung ein.

  7. Wählen Sie unter Standorttyp einen Standort für die Verbindung aus. Die Verbindung sollte sich am selben Ort wie Ihre anderen Ressourcen, z. B. Datasets, befinden.

  8. Klicken Sie auf Verbindung erstellen.

  9. Klicken Sie auf Zur Verbindung.

  10. Kopieren Sie im Bereich Verbindungsinformationen die Dienstkonto-ID zur Verwendung in einem späteren Schritt.

bq

  1. Erstellen Sie in einer Befehlszeilenumgebung eine Verbindung:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    Der Parameter --project_id überschreibt das Standardprojekt.

    Ersetzen Sie dabei Folgendes:

    • REGION: Ihre Verbindungsregion
    • PROJECT_ID: Ihre Google Cloud Projekt-ID
    • CONNECTION_ID: eine ID für Ihre Verbindung

    Wenn Sie eine Verbindungsressource herstellen, erstellt BigQuery ein eindeutiges Systemdienstkonto und ordnet es der Verbindung zu.

    Fehlerbehebung:Wird der folgende Verbindungsfehler angezeigt, aktualisieren Sie das Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Rufen Sie die Dienstkonto-ID ab und kopieren Sie sie zur Verwendung in einem späteren Schritt:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    Die Ausgabe sieht etwa so aus:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Spanner finden Sie unter Cloud Spanner-Clientbibliotheken.

Richten Sie zur Authentifizierung bei Cloud Spanner die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import google.api_core.exceptions
from google.cloud import bigquery_connection_v1

client = bigquery_connection_v1.ConnectionServiceClient()


def create_connection(
    project_id: str,
    location: str,
    connection_id: str,
):
    """Creates a BigQuery connection to a Cloud Resource.

    Cloud Resource connection creates a service account which can then be
    granted access to other Google Cloud resources for federated queries.

    Args:
        project_id: The Google Cloud project ID.
        location: The location of the connection (for example, "us-central1").
        connection_id: The ID of the connection to create.
    """

    parent = client.common_location_path(project_id, location)

    connection = bigquery_connection_v1.Connection(
        friendly_name="Example Connection",
        description="A sample connection for a Cloud Resource.",
        cloud_resource=bigquery_connection_v1.CloudResourceProperties(),
    )

    try:
        created_connection = client.create_connection(
            parent=parent, connection_id=connection_id, connection=connection
        )
        print(f"Successfully created connection: {created_connection.name}")
        print(f"Friendly name: {created_connection.friendly_name}")
        print(
            f"Service Account: {created_connection.cloud_resource.service_account_id}"
        )

    except google.api_core.exceptions.AlreadyExists:
        print(f"Connection with ID '{connection_id}' already exists.")
        print("Please use a different connection ID.")
    except Exception as e:
        print(f"An unexpected error occurred while creating the connection: {e}")

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Cloud Spanner finden Sie unter Cloud Spanner-Clientbibliotheken.

Richten Sie zur Authentifizierung bei Cloud Spanner die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

const {ConnectionServiceClient} =
  require('@google-cloud/bigquery-connection').v1;
const {status} = require('@grpc/grpc-js');

const client = new ConnectionServiceClient();

/**
 * Creates a new BigQuery connection to a Cloud Resource.
 *
 * A Cloud Resource connection creates a service account that can be granted access
 * to other Google Cloud resources.
 *
 * @param {string} projectId The Google Cloud project ID. for example, 'example-project-id'
 * @param {string} location The location of the project to create the connection in. for example, 'us-central1'
 * @param {string} connectionId The ID of the connection to create. for example, 'example-connection-id'
 */
async function createConnection(projectId, location, connectionId) {
  const parent = client.locationPath(projectId, location);

  const connection = {
    friendlyName: 'Example Connection',
    description: 'A sample connection for a Cloud Resource',
    // The service account for this cloudResource will be created by the API.
    // Its ID will be available in the response.
    cloudResource: {},
  };

  const request = {
    parent,
    connectionId,
    connection,
  };

  try {
    const [response] = await client.createConnection(request);

    console.log(`Successfully created connection: ${response.name}`);
    console.log(`Friendly name: ${response.friendlyName}`);

    console.log(`Service Account: ${response.cloudResource.serviceAccountId}`);
  } catch (err) {
    if (err.code === status.ALREADY_EXISTS) {
      console.log(`Connection '${connectionId}' already exists.`);
    } else {
      console.error(`Error creating connection: ${err.message}`);
    }
  }
}

Terraform

Verwenden Sie die Ressource google_bigquery_connection:

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 eine Cloud-Ressourcenverbindung mit dem Namen my_cloud_resource_connection in der Region US erstellt:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

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

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Standardprojekt Google Cloud 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 Google Cloud -Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

Nachdem Sie die Verbindung erstellt haben, öffnen Sie sie 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 dem Dienstkonto, das mit der neuen Verbindung verknüpft ist, Lesezugriff auf Ihre Spanner-Instanz oder -Datenbank gewähren. Es wird empfohlen, die vordefinierte IAM-Rolle „Cloud Spanner Database Reader with Data Boost“ (roles/spanner.databaseReaderWithDataBoost) zu verwenden.

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

  1. Rufen Sie die Spanner-Seite 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 Rolle Cloud Spanner Database Reader with DataBoost aus.

  7. Klicken Sie auf Speichern.

Externes Dataset erstellen

So erstellen Sie ein externes Dataset:

Console

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

    Zur Seite "BigQuery"

  2. Klicken Sie im linken Bereich auf  Explorer:

    Hervorgehobener Button für den Explorer-Bereich.

    Wenn Sie den linken Bereich nicht sehen, klicken Sie auf  Linken Bereich maximieren, um ihn zu öffnen.

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

  4. Klicken Sie auf Aktionen ansehen und dann auf Dataset erstellen.

  5. 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 us (mehrere Regionen). Nachdem Sie ein Dataset erstellt haben, kann der Standort nicht mehr geändert werden.
    • Gehen Sie für Externes Dataset so vor:

      • Klicken Sie auf das Kästchen neben Link zu einem externen Dataset.
      • Wählen Sie als Typ des externen Datasets die Option Spanner aus.
      • Geben Sie unter Externe Quelle die vollständige ID 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 optional unter Datenbankrolle den Namen einer Spanner-Datenbankrolle ein. Weitere Informationen finden Sie unter Datenbankrollen zum Erstellen von Spanner-Verbindungen.
      • Optional können Sie das Kästchen neben Cloud-Ressourcenverbindung verwenden anklicken, um das externe Dataset mit einer Verbindung zu erstellen.
    • Übernehmen Sie die anderen Einstellungen.

  6. Klicken Sie auf Dataset erstellen.

SQL

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

  1. Rufen Sie in der Google 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 Spanner-Datenbankname 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 Ihrer 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 ein externes Dataset mit dem Befehl bq mk:

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

Alternativ können Sie 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 Spanner-Datenbankname 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 Ihrer 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 Google Cloud -Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Standardprojekt Google Cloud 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 Google Cloud -Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google 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 Feld externalDatasetReference 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.

Nicht inkrementelle materialisierte Ansicht basierend auf Tabellen aus einem externen Dataset erstellen

Bevor Sie fortfahren, müssen Sie das zugrunde liegende externe Spanner-Dataset mit einer CLOUD_RESOURCE-Verbindung erstellen.

Mit der Option allow_non_incremental_definition können Sie nicht inkrementelle materialisierte Ansichten erstellen, die auf externen Spanner-Dataset-Tabellen verweisen. Im folgenden Beispiel wird eine Spanner-Basistabelle für externe Datasets verwendet:

/*
  You must create the spanner_external_dataset with a CLOUD_RESOURCE connection.
*/
CREATE MATERIALIZED VIEW sample_dataset.sample_spanner_mv
  OPTIONS (
      enable_refresh = true, refresh_interval_minutes = 60,
      max_staleness = INTERVAL "24" HOUR,
        allow_non_incremental_definition = true)
AS
  SELECT COUNT(*) cnt FROM spanner_external_dataset.spanner_table;

Nur nicht inkrementelle materialisierte BigQuery-Ansichten können externe Spanner-Dataset-Tabellen als Basistabellen haben. Wenn die letzte Aktualisierung einer nicht inkrementellen materialisierten Ansicht außerhalb des Intervalls max_staleness erfolgt ist, werden die Basistabellen des externen Spanner-Datasets gelesen. Weitere Informationen zu nicht inkrementellen materialisierten Ansichten in BigQuery

Nächste Schritte