Einstieg in Cloud Spanner mit REST

Lernziele

In dieser Anleitung werden Sie durch die folgenden Schritte mit der Cloud Spanner API mit REST geführt:

  • Cloud Spanner-Instanz und -Datenbank erstellen
  • SQL-Abfragen für Daten in der Datenbank schreiben, lesen und ausführen
  • Datenbankschema aktualisieren
  • Sekundären Index für die Datenbank hinzufügen
  • Mit dem Index Daten lesen und SQL-Abfragen ausführen
  • Daten über eine schreibgeschützte Transaktion abrufen

Wenn Sie die Cloud Spanner-Clientbibliotheken anstelle der REST API verwenden möchten, finden Sie weitere Informationen in den Anleitungen.

Kosten

In dieser Anleitung wird Cloud Spanner verwendet, eine kostenpflichtige Komponente von Google Cloud. Informationen zu den Kosten der Nutzung von Cloud Spanner finden Sie unter Preise.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

Methoden zum Durchführen von REST-Aufrufen

Sie haben folgende Möglichkeiten, Cloud Spanner REST-Aufrufe durchzuführen:

Auf dieser Seite verwendete Konventionen

  • In den Beispielen wird [PROJECT_ID] als Google Cloud-Projekt-ID verwendet. Ersetzen Sie [PROJECT_ID] durch Ihre Google Cloud-Projekt-ID. Umgeben Sie die Projekt-ID nicht mit [ und ].

  • In den Beispielen wird eine Instanz-ID von test-instance erstellt und verwendet. Ersetzen Sie diese Angabe durch Ihre Instanz-ID, wenn Sie test-instance nicht verwenden.

  • In den Beispielen wird eine Datenbank-ID von example-db erstellt und verwendet. Ersetzen Sie diese Angabe, wenn Sie example-db nicht verwenden.

  • Die Beispiele enthalten [SESSION] als Teil eines Sitzungsnamens. Ersetzen Sie [SESSION] durch den Wert, den Sie erhalten, wenn Sie eine Sitzung erstellen. Umgeben Sie den Sitzungsnamen nicht mit [ und ].

  • In den Beispielen wird als Transaktions-ID [TRANSACTION_ID] verwendet. Ersetzen Sie [TRANSACTION_ID] durch den Wert, den Sie erhalten, wenn Sie eine Transaktion erstellen. Umgeben Sie die Transaktions-ID nicht mit [ und ].

  • Mit der Funktion Jetzt testen! können einzelne HTTP-Request-Felder interaktiv hinzugefügt werden. In den meisten Beispielen in diesem Thema wird der gesamte Request angegeben und nicht beschrieben, wie dem Request einzelne Felder interaktiv hinzugefügt werden.

Instanzen

Wenn Sie Cloud Spanner zum ersten Mal verwenden, müssen Sie eine Instanz erstellen. Dabei handelt es sich um eine Zuordnung von Ressourcen, die von Cloud Spanner-Datenbanken verwendet werden. Wenn Sie eine Instanz erstellen, legen Sie fest, wo die Daten gespeichert und wie viel Rechenkapazität die Instanz hat.

Instanzkonfigurationen auflisten

Wenn Sie eine Instanz erstellen, geben Sie eine Instanzkonfiguration an, mit der die geografische Platzierung und Replikation der Datenbanken in der Instanz definiert wird. Sie können eine regionale Konfiguration wählen, die Daten in einer Region speichert, oder eine multiregionale Konfiguration, die Daten über mehrere Regionen verteilt. Weitere Informationen dazu finden Sie unter Instanzen.

Ermitteln Sie anhand von projects.instanceConfigs.list, welche Konfigurationen für Ihr Google Cloud-Projekt verfügbar sind.

  1. Klicken Sie auf projects.instanceConfigs.list.
  2. Geben Sie für parent (übergeordnet) Folgendes ein:

    projects/[PROJECT_ID]
    
  3. Klicken Sie auf Execute (Ausführen). Die verfügbaren Instanzkonfigurationen werden in der Antwort angezeigt. Hier wird eine Beispielantwort dargestellt (Ihr Projekt kann andere Instanzkonfigurationen umfassen):

    {
      "instanceConfigs": [
        {
          "name": "projects/[PROJECT_ID]/instanceConfigs/regional-asia-south1",
          "displayName": "asia-south1"
        },
        {
          "name": "projects/[PROJECT_ID]/instanceConfigs/regional-asia-east1",
          "displayName": "asia-east1"
        },
        {
          "name": "projects/[PROJECT_ID]/instanceConfigs/regional-asia-northeast1",
          "displayName": "asia-northeast1"
        },
        {
          "name": "projects/[PROJECT_ID]/instanceConfigs/regional-europe-west1",
          "displayName": "europe-west1"
        },
        {
          "name": "projects/[PROJECT_ID]/instanceConfigs/regional-us-east4",
          "displayName": "us-east4"
        },
        {
          "name": "projects/[PROJECT_ID]/instanceConfigs/regional-us-central1",
          "displayName": "us-central1"
        }
      ]
    }
    

Sie verwenden den Wert name für eine der Instanzkonfigurationen, wenn Sie die Instanz erstellen.

Instanz erstellen

  1. Klicken Sie auf projects.instances.create.
  2. Geben Sie für parent (übergeordnet) Folgendes ein:

    projects/[PROJECT_ID]
    
  3. Klicken Sie auf Add request body parameters (Anfragetextparameter hinzufügen) und wählen Sie instance aus.

  4. Klicken Sie auf eines der Infofelder für instance (Instanz), um mögliche Felder anzuzeigen. Fügen Sie Werte für die folgenden Felder hinzu:

    1. nodeCount: Geben Sie 1 ein.
    2. config: Geben Sie den Wert name von einer der regionalen Instanzkonfigurationen ein, die zurückgegeben werden, wenn Sie Instanzkonfigurationen auflisten.
    3. displayName: Geben Sie Test Instance ein.
  5. Klicken Sie auf das Infofeld, das nach der schließenden Klammer für instance (Instanz) angezeigt wird, und wählen Sie instanceId aus.

  6. Geben Sie für instanceId den Wert test-instance ein.
    Die Instanzerstellungsseite der Funktion Jetzt testen! sollte nun etwa so aussehen:

    Screenshot der Instanzerstellung

  7. Klicken Sie auf Ausführen. Als Antwort wird ein lange laufender Vorgang zurückgegeben, den Sie abfragen können, um seinen Status zu überprüfen.

Sie können Ihre Instanzen mit projects.instances.list auflisten.

Datenbank erstellen

Erstellen Sie eine Datenbank mit dem Namen example-db.

  1. Klicken Sie auf projects.instances.databases.create.
  2. Geben Sie für parent (übergeordnet) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance
    
  3. Klicken Sie auf Add request body parameters (Anfragetextparameter hinzufügen) und wählen Sie createStatement aus.

  4. Geben Sie unter createStatement Folgendes ein:

    CREATE DATABASE `example-db`
    

    Der Datenbankname example-db enthält einen Bindestrich, deshalb muss er in Graviszeichen (`) stehen.

  5. Klicken Sie auf Ausführen. Als Antwort wird ein lange laufender Vorgang zurückgegeben, den Sie abfragen können, um seinen Status zu überprüfen.

Sie können Ihre Datenbanken mit projects.instances.databases.list auflisten.

Schema erstellen

Verwenden Sie die Datendefinitionssprache (DDL) von Cloud Spanner, um Tabellen zu erstellen, zu ändern oder zu verwerfen und Indexe zu erstellen oder zu verwerfen.

  1. Klicken Sie auf projects.instances.databases.updateDdl.
  2. Geben Sie für database (Datenbank) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "statements": [
        "CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId)",
        "CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX)) PRIMARY KEY (SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE"
      ]
    }
    

    Das Array statements enthält die DDL-Anweisungen für die Schemadefinition.

  4. Klicken Sie auf Ausführen. Als Antwort wird ein lange laufender Vorgang zurückgegeben, den Sie abfragen können, um seinen Status zu überprüfen.

Mit dem Schema werden außerdem die beiden Tabellen Singers und Albums für eine einfache Musikanwendung definiert. Die Tabellen werden im weiteren Verlauf dieser Seite verwendet. Sehen Sie sich das Beispielschema an, falls Sie es noch nicht getan haben.

Sie können Ihr Schema mit projects.instances.databases.getDdl abrufen.

Sitzung erstellen

Bevor Sie Daten hinzufügen, aktualisieren, löschen oder abfragen können, müssen Sie eine Sitzung erstellen. Dabei handelt es sich um einen Kommunikationskanal mit dem Cloud Spanner-Datenbankdienst. Sie verwenden eine Sitzung nicht direkt, wenn Sie die Cloud Spanner-Clientbibliothek einsetzen, da die Sitzungen von der Clientbibliothek in Ihrem Namen verwaltet werden.

  1. Klicken Sie auf projects.instances.databases.sessions.create.
  2. Geben Sie für database (Datenbank) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. Klicken Sie auf Execute (Ausführen).

  4. Die Antwort enthält die erstellte Sitzung in der folgenden Form:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    Sie verwenden diese Sitzung, wenn Sie Daten aus der Datenbank lesen oder in sie schreiben.

Sitzungen sollen langlebig sein. Der Cloud Spanner-Datenbankdienst kann eine Sitzung löschen, wenn die Sitzung länger als eine Stunde inaktiv ist. Beim Versuch, eine gelöschte Sitzung zu verwenden, wird NOT_FOUND zurückgegeben. Wenn dieser Fehler auftritt, erstellen und verwenden Sie eine neue Sitzung. Mit projects.instances.databases.sessions.get können Sie feststellen, ob eine Sitzung noch aktiv ist. Weitere Informationen finden Sie unter Eine inaktive Sitzung offen halten.

Im nächsten Schritt werden Daten in die Datenbank geschrieben.

Daten schreiben

Daten werden mit dem Typ Mutation geschrieben. Eine Mutation ist ein Container für Mutationsvorgänge. Eine Mutation stellt eine Folge von Einfügungs-, Aktualisierungs-, Lösch- und anderen Vorgängen dar, die in kleinstmöglichen Schritten auf verschiedene Zeilen und Tabellen in einer Cloud Spanner-Datenbank angewendet werden können.

  1. Klicken Sie auf projects.instances.databases.sessions.commit.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "singleUseTransaction": {
        "readWrite": {}
      },
      "mutations": [
        {
          "insertOrUpdate": {
            "table": "Singers",
            "columns": [
              "SingerId",
              "FirstName",
              "LastName"
            ],
            "values": [
              [
                "1",
                "Marc",
                "Richards"
              ],
              [
                "2",
                "Catalina",
                "Smith"
              ],
              [
                "3",
                "Alice",
                "Trentor"
              ],
              [
                "4",
                "Lea",
                "Martin"
              ],
              [
                "5",
                "David",
                "Lomond"
              ]
            ]
          }
        },
        {
          "insertOrUpdate": {
            "table": "Albums",
            "columns": [
              "SingerId",
              "AlbumId",
              "AlbumTitle"
            ],
            "values": [
              [
                "1",
                "1",
                "Total Junk"
              ],
              [
                "1",
                "2",
                "Go, Go, Go"
              ],
              [
                "2",
                "1",
                "Green"
              ],
              [
                "2",
                "2",
                "Forever Hold Your Peace"
              ],
              [
                "2",
                "3",
                "Terrified"
              ]
            ]
          }
        }
      ]
    }
    
  4. Klicken Sie auf Execute (Ausführen). In der Antwort wird der Commit-Zeitstempel angegeben.

In diesem Beispiel wurde insertOrUpdate verwendet. Weitere Vorgänge für Mutations sind insert, update, replace und delete.

Weitere Informationen zum Codieren von Datentypen finden Sie unter "TypeCode".

Daten mit SQL abfragen

  1. Klicken Sie auf projects.instances.databases.sessions.executeSql.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums"
    }
    
  4. Klicken Sie auf Execute (Ausführen). In der Antwort werden die Abfrageergebnisse angegeben.

Daten mit der Lese-API auslesen

  1. Klicken Sie auf projects.instances.databases.sessions.read.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "table": "Albums",
      "columns": [
        "SingerId",
        "AlbumId",
        "AlbumTitle"
      ],
      "keySet": {
        "all": true
      }
    }
    
  4. Klicken Sie auf Execute (Ausführen). In der Antwort werden die gelesenen Ergebnisse dargestellt.

Datenbankschema aktualisieren

Beispiel: Sie möchten der Tabelle Albums eine neue Spalte mit dem Namen MarketingBudget hinzufügen. Dazu muss das Datenbankschema aktualisiert werden. Cloud Spanner unterstützt Schemaaktualisierungen für Datenbanken, ohne dass die Traffic-Bereitstellung unterbrochen werden muss. Bei einer Schemaaktualisierung muss die Datenbank nicht offline geschaltet und es müssen keine ganzen Tabellen oder Spalten gesperrt werden. Sie können während des Vorgangs weiter Daten in die Datenbank schreiben.

Spalte hinzufügen

  1. Klicken Sie auf projects.instances.databases.updateDdl.
  2. Geben Sie für database (Datenbank) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "statements": [
        "ALTER TABLE Albums ADD COLUMN MarketingBudget INT64"
      ]
    }
    

    Das Array statements enthält die DDL-Anweisungen für die Schemadefinition.

  4. Klicken Sie auf Ausführen. Dieser Vorgang kann einige Minuten dauern, selbst wenn der REST-Aufruf eine Antwort zurückgibt. Als Antwort wird ein lange laufender Vorgang zurückgegeben, den Sie abfragen können, um seinen Status zu überprüfen.

Daten in die neue Spalte schreiben

Mit dem folgenden Code werden Daten in die neue Spalte geschrieben. Er legt für MarketingBudget den Wert 100000 für den Zeilenschlüssel fest, der durch Albums(1, 1) angegeben wird, und 500000 für den Zeilenschlüssel, der durch Albums(2, 2) angegeben wird.

  1. Klicken Sie auf projects.instances.databases.sessions.commit.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "singleUseTransaction": {
        "readWrite": {}
      },
      "mutations": [
        {
          "update": {
            "table": "Albums",
            "columns": [
              "SingerId",
              "AlbumId",
              "MarketingBudget"
            ],
            "values": [
              [
                "1",
                "1",
                "100000"
              ],
              [
                "2",
                "2",
                "500000"
              ]
            ]
          }
        }
      ]
    }
    
  4. Klicken Sie auf Execute (Ausführen). In der Antwort wird der Commit-Zeitstempel angegeben.

Sie können auch eine SQL-Abfrage oder einen Leseaufruf ausführen, um die Werte abzurufen, die Sie gerade geschrieben haben.

So führen Sie die Abfrage aus:

  1. Klicken Sie auf projects.instances.databases.sessions.executeSql.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "sql": "SELECT SingerId, AlbumId, MarketingBudget FROM Albums"
    }
    
  4. Klicken Sie auf Ausführen. In einem Teil der Antwort sind zwei Zeilen mit den aktualisierten Werten für MarketingBudget enthalten:

    "rows": [
      [
        "1",
        "1",
        "100000"
      ],
      [
        "1",
        "2",
        null
      ],
      [
        "2",
        "1",
        null
      ],
      [
        "2",
        "2",
        "500000"
      ],
      [
        "2",
        "3",
        null
      ]
    ]
    

Sekundären Index verwenden

Beispiel: Sie möchten alle Zeilen aus Albums abrufen, deren Wert für AlbumTitle in einem bestimmten Bereich liegen. Sie könnten dazu alle Werte aus der Spalte AlbumTitle mit einer SQL-Anweisung oder einem Leseaufruf lesen und dann die Zeilen verwerfen, die die Kriterien nicht erfüllen. Dieser vollständige Tabellenscan wäre jedoch sehr kostspielig, insbesondere bei Tabellen mit vielen Zeilen. Stattdessen können Sie einen sekundären Index für die Tabelle erstellen und damit das Abrufen von Zeilen beim Suchen über Spalten mit nicht primärem Schlüssel beschleunigen.

Damit ein sekundärer Index einer vorhandenen Tabelle hinzugefügt werden kann, muss das Schema aktualisiert werden. Wie bei anderen Schemaaktualisierungen kann mit Cloud Spanner ein Index hinzugefügt werden, ohne dass die Traffic-Bereitstellung unterbrochen werden muss. Cloud Spanner verwendet dann automatisch die vorhandenen Daten, um einen Backfill für den Index auszuführen. Backfills können einige Minuten dauern. Sie müssen aber die Datenbank nicht offline schalten und können während des Vorgangs weiter in alle Tabellen oder Spalten schreiben. Weitere Informationen finden Sie unter Index-Backfill.

Nachdem Sie einen sekundären Index hinzugefügt haben, verwendet Cloud Spanner diesen automatisch für SQL-Abfragen, die mit dem Index sehr wahrscheinlich schneller ausgeführt werden. Wenn Sie die Leseschnittstelle verwenden, müssen Sie den Index angeben, den Sie nutzen möchten.

Sekundären Index hinzufügen

Sie können einen Index mit updateDdl hinzufügen.

  1. Klicken Sie auf projects.instances.databases.updateDdl.
  2. Geben Sie für database (Datenbank) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. Verwenden Sie Folgendes für Request body (Requesttext):

    {
      "statements": [
        "CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle)"
      ]
    }
    
  4. Klicken Sie auf Execute (Ausführen). Dieser Vorgang kann einige Minuten dauern, selbst wenn der REST-Aufruf eine Antwort zurückgibt. Als Antwort wird ein lange laufender Vorgang zurückgegeben, den Sie abfragen können, um seinen Status zu überprüfen.

Abfrage mit dem Index

  1. Klicken Sie auf projects.instances.databases.sessions.executeSql.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "sql": "SELECT AlbumId, AlbumTitle, MarketingBudget FROM Albums WHERE AlbumTitle >= 'Aardvark' AND AlbumTitle < 'Goo'"
    }
    
  4. Klicken Sie auf Execute (Ausführen). In einem Teil der Antwort sind die folgenden Zeilen enthalten:

    "rows": [
      [
        "2",
        "Go, Go, Go",
        null
      ],
      [
        "2",
        "Forever Hold Your Peace",
        "500000"
      ]
    ]
    

Mit dem Index auslesen

  1. Klicken Sie auf projects.instances.databases.sessions.read.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "table": "Albums",
      "columns": [
        "AlbumId",
        "AlbumTitle"
      ],
      "keySet": {
        "all": true
      },
      "index": "AlbumsByAlbumTitle"
    }
    
  4. Klicken Sie auf Execute (Ausführen). In einem Teil der Antwort sind die folgenden Zeilen enthalten:

    "rows": [
      [
        "2",
        "Forever Hold Your Peace"
      ],
      [
        "2",
        "Go, Go, Go"
      ],
      [
        "1",
        "Green"
      ],
      [
        "3",
        "Terrified"
      ],
      [
        "1",
        "Total Junk"
      ]
    ]
    

Index mit einer STORING-Klausel hinzufügen

Vielleicht haben Sie bemerkt, dass im obigen Beispiel das Lesen der Spalte MarketingBudget nicht enthalten ist. Die Leseschnittstelle von Cloud Spanner unterstützt nicht die Möglichkeit, einen Index mit einer Datentabelle zu verbinden, um Werte zu suchen, die nicht im Index gespeichert sind.

Erstellen Sie eine alternative Definition von AlbumsByAlbumTitle, die eine Kopie von MarketingBudget im Index speichert.

Sie können einen STORING-Index mit updateDdl hinzufügen.

  1. Klicken Sie auf projects.instances.databases.updateDdl.
  2. Geben Sie für database (Datenbank) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. Verwenden Sie Folgendes für Request body (Requesttext):

    {
      "statements": [
        "CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget)"
      ]
    }
    
  4. Klicken Sie auf Execute (Ausführen). Dieser Vorgang kann einige Minuten dauern, selbst wenn der REST-Aufruf eine Antwort zurückgibt. Als Antwort wird ein lange laufender Vorgang zurückgegeben, den Sie abfragen können, um seinen Status zu überprüfen.

Sie können jetzt einen Lesevorgang ausführen, der die Spalten AlbumId, AlbumTitle und MarketingBudget aus dem Index AlbumsByAlbumTitle2 abruft:

  1. Klicken Sie auf projects.instances.databases.sessions.read.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "table": "Albums",
      "columns": [
        "AlbumId",
        "AlbumTitle",
        "MarketingBudget"
      ],
      "keySet": {
        "all": true
      },
      "index": "AlbumsByAlbumTitle2"
    }
    
  4. Klicken Sie auf Execute (Ausführen). In einem Teil der Antwort sind die folgenden Zeilen enthalten:

    "rows": [
      [
        "2",
        "Forever Hold Your Peace",
        "500000"
      ],
      [
        "2",
        "Go, Go, Go",
        null
      ],
      [
        "1",
        "Green",
        null
      ],
      [
        "3",
        "Terrified",
        null
      ],
      [
        "1",
        "Total Junk",
        "100000"
      ]
    ]
    

Daten mit schreibgeschützten Transaktionen abrufen

Angenommen, Sie möchten mehr als einen Lesevorgang mit demselben Zeitstempel ausführen. Bei schreibgeschützten Transaktionen wird ein gleichbleibendes Präfix des Commit-Verlaufs der Transaktionen beibehalten, damit die Anwendung immer konsistente Daten erhält.

Schreibgeschützte Transaktion erstellen

  1. Klicken Sie auf projects.instances.databases.sessions.beginTransaction.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    
  3. Verwenden Sie Folgendes für Request body (Requesttext):

    {
      "options": {
        "readOnly": {}
      }
    }
    
  4. Klicken Sie auf Execute (Ausführen).

  5. Die Antwort enthält die ID der erstellten Transaktion.

Sie können nun mit einer schreibgeschützten Transaktion Daten mit einem konsistenten Zeitstempel abrufen, selbst wenn sich die Daten seit der Erstellung der schreibgeschützten Transaktion geändert haben.

Abfrage mit der schreibgeschützten Transaktion ausführen

  1. Klicken Sie auf projects.instances.databases.sessions.executeSql.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums",
      "transaction": {
        "id": "[TRANSACTION_ID]"
      }
    }
    
  4. Klicken Sie auf Execute (Ausführen). Die Antwort sollte Zeilen ähnlich den folgenden enthalten:

    "rows": [
      [
        "2",
        "2",
        "Forever Hold Your Peace"
      ],
      [
        "1",
        "2",
        "Go, Go, Go"
      ],
      [
        "2",
        "1",
        "Green"
      ],
      [
        "2",
        "3",
        "Terrified"
      ],
      [
        "1",
        "1",
        "Total Junk"
      ]
    ]
    

Mit der schreibgeschützten Transaktion auslesen

  1. Klicken Sie auf projects.instances.databases.sessions.read.
  2. Geben Sie für session (Sitzung) Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    

    (Sie erhalten diesen Wert, wenn Sie eine Sitzung erstellen.)

  3. Verwenden Sie Folgendes für Request body (Anfragetext):

    {
      "table": "Albums",
      "columns": [
        "SingerId",
        "AlbumId",
        "AlbumTitle"
      ],
      "keySet": {
        "all": true
      },
      "transaction": {
        "id": "[TRANSACTION_ID]"
      }
    }
    
  4. Klicken Sie auf Execute (Ausführen). Die Antwort sollte Zeilen ähnlich den folgenden enthalten:

    "rows": [
      [
        "1",
        "1",
        "Total Junk"
      ],
      [
        "1",
        "2",
        "Go, Go, Go"
      ],
      [
        "2",
        "1",
        "Green"
      ],
      [
        "2",
        "2",
        "Forever Hold Your Peace"
      ],
      [
        "2",
        "3",
        "Terrified"
      ]
    ]
    

Cloud Spanner unterstützt auch Lese-Schreib-Transaktionen, bei denen eine Reihe von Lese- und Schreibvorgängen in kleinstmöglichen Schritten zu einem einzigen logischen Zeitpunkt ausgeführt werden. Weitere Informationen finden Sie unter Lese-Schreib-Transaktionen. Die Funktion Jetzt testen! eignet sich nicht für die Demonstration einer Lese-Schreib-Transaktion.

Bereinigen

Löschen Sie die Datenbank und die erstellte Instanz, um zu vermeiden, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden.

Datenbank löschen

  1. Klicken Sie auf projects.instances.databases.dropDatabase.
  2. Geben Sie unter Name Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. Klicken Sie auf Execute (Ausführen).

Instanz löschen

  1. Klicken Sie auf projects.instances.delete.
  2. Geben Sie unter Name Folgendes ein:

    projects/[PROJECT_ID]/instances/test-instance
    
  3. Klicken Sie auf Execute (Ausführen).

Nächste Schritte