Empezar a usar Cloud Spanner con REST

Cloud Spanner

Objetivos

Con este tutorial, te explicaremos cómo llevar a cabo estos pasos con la API de Cloud Spanner con REST:

  • Crear una instancia y una base de datos de Cloud Spanner.
  • Escribir, leer y ejecutar consultas SQL sobre datos de la base de datos.
  • Actualizar el esquema de la base de datos.
  • Añadir un índice secundario a la base de datos.
  • Usar el índice para leer los datos y ejecutar consultas SQL sobre ellos.
  • Ver datos mediante una transacción de solo lectura.

Si deseas utilizar las bibliotecas cliente de Cloud Spanner en lugar de la API REST, consulta el artículo sobre tutoriales.

Precios

En este tutorial se usa Cloud Spanner, que es un componente facturable de Google Cloud Platform. Si quieres obtener información sobre el coste de usar Cloud Spanner, consulta el apartado de precios.

Antes de empezar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

Maneras de hacer llamadas REST

Puedes realizar llamadas REST de Cloud Spanner de las maneras siguientes:

Convenciones utilizadas en esta página

  • En los ejemplos se utiliza [PROJECT_ID] como el ID del proyecto de GCP. Sustituye el ID de tu proyecto de GCP para [PROJECT_ID]. (No incluyas [ ni ] en el ID del proyecto).

  • En los ejemplos se crea y utiliza un ID de instancia de test-instance. Sustituye el ID de la instancia si no utilizas test-instance.

  • En los ejemplos se crea y utiliza un ID de base de datos de example-db. Sustituye el ID de tu base de datos si no utilizas example-db.

  • En los ejemplos se utiliza [SESSION] como parte de un nombre de sesión. Sustituye el valor que recibas cuando crees una sesión para [SESSION]. (No incluyas [ ni ] en el nombre de la sesión).

  • En los ejemplos se utiliza un ID de transacción de [TRANSACTION_ID]. Sustituye el valor que recibas cuando crees una transacción para [TRANSACTION_ID]. (No incluyas [ ni ] en tu ID de transacción).

  • La función para probar permite añadir de forma interactiva campos de solicitud HTTP individuales. En la mayoría de los ejemplos de este tema se proporciona toda la solicitud en lugar de describir cómo se añaden de forma interactiva campos a la solicitud.

Instancias

Cuando usas Cloud Spanner por primera vez, debes crear una instancia, que es una asignación de recursos usada por las bases de datos de Cloud Spanner. Cuando creas una instancia, eliges dónde se almacenan los datos, así como la cantidad de nodos que se usarán para los datos.

Mostrar lista de configuraciones de instancia

Cuando creas una instancia, especificas una configuración de instancia, que define el emplazamiento geográfico y la replicación de las bases de datos en esa instancia. Puedes elegir una configuración regional, que almacena datos en una región, o una configuración de varias regiones, que distribuye los datos en varias regiones. Más información en el artículo sobre instancias

Utiliza projects.instanceConfigs.list para determinar qué configuraciones tienes a tu disposición para tu proyecto de GCP.

  1. Haz clic en projects.instanceConfigs.list.
  2. En el campo principal, introduce lo siguiente:

    projects/[PROJECT_ID]
    
  3. Haz clic en la opción para ejecutar. Las configuraciones de instancia disponibles se mostrarán en la respuesta. A continuación puedes ver una respuesta de ejemplo. Ten en cuenta que tu proyecto puede tener otras configuraciones de instancia.

    {
      "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"
        }
      ]
    }
    

Utiliza el valor name para una de las configuraciones de instancia cuando crees esta.

Crear una instancia

  1. Haz clic en projects.instances.create.
  2. En el campo principal, introduce lo siguiente:

    projects/[PROJECT_ID]
    
  3. Haz clic en la opción para añadir parámetros del cuerpo de solicitud y selecciona instance.

  4. Haz clic en el cuadro de sugerencia para la instancia para ver los posibles campos. Añade valores a los campos siguientes:
    1. nodeCount: introduce 1.
    2. config: introduce el valor name de una de las configuraciones de instancia regionales devueltas cuando has mostrado las configuraciones de instancia.
    3. displayName: introduce Test Instance.
  5. Haz clic en el cuadro de sugerencia después del corchete de cierre para instance y selecciona instanceId.
  6. Para instanceId, introduce test-instance.
    Tu página de creación de instancia de Probar debería tener este aspecto:

    Captura de pantalla de la creación de instancias

  7. Haz clic en la opción para ejecutar. La respuesta devuelve una operación de larga duración que puedes consultar para comprobar su estado.

Puedes mostrar tus instancias mediante projects.instances.list.

Crear una base de datos

Crea una base de datos llamada example-db.

  1. Haz clic en projects.instances.databases.create.
  2. En el campo principal, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance
    
  3. Haz clic en la opción para añadir parámetros del cuerpo de solicitud y selecciona createStatement.

  4. Para createStatement, introduce:

    CREATE DATABASE `example-db`
    

    (El nombre de la base de datos, example-db, contiene un guion, por lo que debe incluirse entre comillas simples inversas `).

  5. Haz clic en la opción para ejecutar. La respuesta devuelve una operación de larga duración que puedes consultar para comprobar su estado.

Puedes crear una lista de las bases de datos con projects.instances.databases.list.

Crear un esquema

Usa el lenguaje de definición de datos (DDL) de Cloud Spanner para crear, modificar o eliminar tablas y para crear o eliminar índices.

  1. Haz clic en projects.instances.databases.updateDdl.
  2. En el campo base de datos, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "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"
      ]
    }
    

    La matriz statements contiene las declaraciones DDL que definen el esquema.

  4. Haz clic en la opción para ejecutar. La respuesta devuelve una operación de larga duración que puedes consultar para comprobar su estado.

El esquema define dos tablas, Singers y Albums, con las que se crea una aplicación de música básica. Estas tablas se usan en esta página. Echa un vistazo al esquema de ejemplo si aún no lo has hecho.

Puedes acceder al esquema con projects.instances.databases.getDdl.

Crear una sesión

Antes de añadir, actualizar, eliminar o consultar datos, debes crear una sesión que represente un canal de comunicación con el servicio de base de datos de Cloud Spanner. Se recomienda no utilizar directamente una sesión si utilizas una biblioteca cliente de Cloud Spanner porque esta se encarga de gestionar las sesiones en tu nombre.

  1. Haz clic en projects.instances.databases.sessions.create.
  2. En el campo base de datos, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. Haz clic en la opción para ejecutar.

  4. La respuesta muestra la sesión que has creado en la siguiente forma:

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

    Utilizarás esta sesión cuando leas o escribas en tu base de datos.

El objetivo es que las sesiones tengan un largo recorrido. El servicio de base de datos de Cloud Spanner puede eliminar una sesión cuando esta permanezca inactiva durante más de una hora. Intenta usar una sesión eliminada con resultado NOT_FOUND. Si surge este error, crea y usa una sesión nueva. Puedes ver si una sesión sigue activa con projects.instances.databases.sessions.get. Para obtener información relacionada, consulta la sesión Conservar una sesión inactiva.

El siguiente paso consiste en escribir datos en la base de datos.

Escribir datos

Escribe datos con el tipo Mutation. Una Mutation es un contenedor de operaciones de mutación. Una Mutation representa una secuencia de inserciones, actualizaciones, eliminaciones y otras acciones que se pueden aplicar atómicamente a diferentes filas y tablas de una base de datos de Cloud Spanner.

  1. Haz clic en projects.instances.databases.sessions.commit.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "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. Haz clic en la opción para ejecutar. La respuesta muestra la marca de tiempo de confirmación.

En este ejemplo se ha usado insertOrUpdate. Otras operaciones para Mutations son insert, update, replace y delete.

Para obtener información sobre cómo codificar tipos de datos, consulta TypeCode.

Consultar datos mediante SQL

  1. Haz clic en projects.instances.databases.sessions.executeSql.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums"
    }
    
  4. Haz clic en la opción para ejecutar. La respuesta muestra los resultados de la consulta.

Leer datos mediante la API de lectura

  1. Haz clic en projects.instances.databases.sessions.read.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "table": "Albums",
      "columns": [
        "SingerId",
        "AlbumId",
        "AlbumTitle"
      ],
      "keySet": {
        "all": true
      }
    }
    
  4. Haz clic en la opción para ejecutar. La respuesta muestra los resultados de la lectura.

Actualizar el esquema de la base de datos

Supongamos que necesitas añadir una nueva columna llamada MarketingBudget a la tabla Albums que requiere una actualización en el esquema de la base de datos. Cloud Spanner permite realizar actualizaciones de esquema en una base de datos mientras esta sigue atendiendo el tráfico. No hace falta que la base de datos esté desconectada y no se bloquean tablas ni columnas enteras durante la actualización de un esquema; puedes continuar escribiendo datos en la base de datos durante ese periodo.

Añadir una columna

  1. Haz clic en projects.instances.databases.updateDdl.
  2. En el campo base de datos, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

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

    La matriz statements contiene las declaraciones DDL que definen el esquema.

  4. Haz clic en la opción para ejecutar. El proceso puede tardar unos minutos, incluso después de que la llamada REST devuelva una respuesta. La respuesta devuelve una operación de larga duración que puedes consultar para comprobar su estado.

Escribir datos en la nueva columna

El siguiente código sirve para escribir datos en la nueva columna. Establece MarketingBudget en 100000 en la fila marcada como Albums(1, 1), y 500000 en la fila marcada como Albums(2, 2).

  1. Haz clic en projects.instances.databases.sessions.commit.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "singleUseTransaction": {
        "readWrite": {}
      },
      "mutations": [
        {
          "update": {
            "table": "Albums",
            "columns": [
              "SingerId",
              "AlbumId",
              "MarketingBudget"
            ],
            "values": [
              [
                "1",
                "1",
                "100000"
              ],
              [
                "2",
                "2",
                "500000"
              ]
            ]
          }
        }
      ]
    }
    
  4. Haz clic en la opción para ejecutar. La respuesta muestra la marca de tiempo de confirmación.

También puedes ejecutar una consulta SQL o una llamada de lectura para recuperar los valores que acabas de escribir.

La consulta se ejecuta de este modo:

  1. Haz clic en projects.instances.databases.sessions.executeSql.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "sql": "SELECT SingerId, AlbumId, MarketingBudget FROM Albums"
    }
    
  4. Haz clic en la opción para ejecutar. Como parte de la respuesta, debes ver dos filas con los valores de MarketingBudget actualizados:

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

Usar un índice secundario

Supongamos que quieres buscar todas las filas de Albums que tengan valores de AlbumTitle en un intervalo determinado. Puedes leer todos los valores de la columna AlbumTitle mediante una declaración SQL o una lectura de llamada y descartar después las filas que no cumplan los criterios, pero realizar esta búsqueda completa en la tabla resulta caro, especialmente cuando se trata de tablas con muchas filas. En su lugar, puedes acelerar la recuperación de filas al buscar columnas de clave no principales mediante la creación de un índice secundario en la tabla.

Si se desea añadir un índice secundario a una tabla, es preciso actualizar el esquema. Cloud Spanner permite añadir un índice mientras la base de datos continúa atendiendo el tráfico, al igual que sucede con otras actualizaciones de esquema. Cloud Spanner rellena el índice con datos (también conocidos como "reposiciones") desde dentro. Las reposiciones pueden tardar unos minutos en completarse, pero no es necesario que desconectes la base de datos o evites escribir en algunas tablas o columnas durante este proceso. Si quieres obtener más detalles, consulta el apartado sobre reposiciones de índice.

Añadir un índice secundario

Puedes añadir un índice con updateDdl.

  1. Haz clic en projects.instances.databases.updateDdl.
  2. En el campo base de datos, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "statements": [
        "CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle)"
      ]
    }
    
  4. Haz clic en la opción para ejecutar. El proceso puede tardar unos minutos, incluso después de que la llamada REST devuelva una respuesta. La respuesta devuelve una operación de larga duración que puedes consultar para comprobar su estado.

Realizar consultas mediante el índice

  1. Haz clic en projects.instances.databases.sessions.executeSql.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "sql": "SELECT AlbumId, AlbumTitle, MarketingBudget FROM Albums@{FORCE_INDEX=AlbumsByAlbumTitle} WHERE AlbumTitle >= 'Aardvark' AND AlbumTitle < 'Goo'"
    }
    
  4. Haz clic en la opción para ejecutar. Como parte de la respuesta debes ver las filas siguientes:

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

Leer datos mediante el índice

  1. Haz clic en projects.instances.databases.sessions.read.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "table": "Albums",
      "columns": [
        "AlbumId",
        "AlbumTitle"
      ],
      "keySet": {
        "all": true
      },
      "index": "AlbumsByAlbumTitle"
    }
    
  4. Haz clic en la opción para ejecutar. Como parte de la respuesta debes ver las filas siguientes:

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

Añadir un índice con la cláusula STORING

Puede que hayas notado que el ejemplo de lectura anterior no incluye la lectura de la columna MarketingBudget. Esto se debe a que la interfaz de lectura de Cloud Spanner no admite la capacidad de unirse a un índice con una tabla de datos para buscar valores que no están almacenados en él.

Crea una definición alternativa de AlbumsByAlbumTitle que almacene una copia de MarketingBudget en el índice.

Puedes añadir un índice de STORING con updateDdl.

  1. Haz clic en projects.instances.databases.updateDdl.
  2. En el campo base de datos, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "statements": [
        "CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget)"
      ]
    }
    
  4. Haz clic en la opción para ejecutar. El proceso puede tardar unos minutos, incluso después de que la llamada REST devuelva una respuesta. La respuesta devuelve una operación de larga duración que puedes consultar para comprobar su estado.

Ahora puedes ejecutar una lectura que recopile las columnas AlbumId, AlbumTitle y MarketingBudget del índice AlbumsByAlbumTitle2:

  1. Haz clic en projects.instances.databases.sessions.read.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "table": "Albums",
      "columns": [
        "AlbumId",
        "AlbumTitle",
        "MarketingBudget"
      ],
      "keySet": {
        "all": true
      },
      "index": "AlbumsByAlbumTitle2"
    }
    
  4. Haz clic en la opción para ejecutar. Como parte de la respuesta debes ver las filas siguientes:

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

Ver datos mediante transacciones de solo lectura

Supongamos que deseas ejecutar más de una lectura en la misma marca de tiempo. En las transacciones de solo lectura se observa un prefijo uniforme del historial de confirmación de transacción, por lo que la aplicación siempre obtiene datos uniformes.

Crear una transacción de solo lectura

  1. Haz clic en projects.instances.databases.sessions.beginTransaction.
  2. En el campo de sesión, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db/sessions/[SESSION]
    
  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "options": {
        "readOnly": {}
      }
    }
    
  4. Haz clic en la opción para ejecutar.

  5. La respuesta muestra el ID de la transacción que has creado.

Ya puedes usar la transacción de solo lectura para ver los datos en una marca de tiempo coherente, incluso si los datos han cambiado desde la creación de la transacción de solo lectura.

Ejecutar una consulta mediante la transacción de solo lectura

  1. Haz clic en projects.instances.databases.sessions.executeSql.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums",
      "transaction": {
        "id": "[TRANSACTION_ID]"
      }
    }
    
  4. Haz clic en la opción para ejecutar. Deberías ver filas parecidas a las siguientes en la respuesta:

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

Leer mediante la transacción de solo lectura

  1. Haz clic en projects.instances.databases.sessions.read.
  2. En el campo de sesión, introduce lo siguiente:

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

    Recibirás este valor cuando crees una sesión.

  3. En el campo de cuerpo de la petición, utiliza lo siguiente:

    {
      "table": "Albums",
      "columns": [
        "SingerId",
        "AlbumId",
        "AlbumTitle"
      ],
      "keySet": {
        "all": true
      },
      "transaction": {
        "id": "[TRANSACTION_ID]"
      }
    }
    
  4. Haz clic en la opción para ejecutar. Deberías ver filas parecidas a las siguientes en la respuesta:

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

Cloud Spanner también admite transacciones de lectura-escritura que ejecutan un conjunto de lecturas y escrituras en un solo punto temporal lógico. Para obtener más información, consulta el apartado sobre transacciones de lectura-escritura. (La función para probar no es adecuada para demostrar una transacción de lectura-escritura).

Eliminar los recursos utilizados

Si quieres evitar que se generen más costes en la cuenta de GCP debido a los recursos usados en este tutorial, desconecta la base de datos y elimina la instancia que creaste.

Desconectar una base de datos

  1. Haz clic en projects.instances.databases.dropDatabase.
  2. En el campo nombre, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance/databases/example-db
    
  3. Haz clic en la opción para ejecutar.

Eliminar una instancia

  1. Haz clic en projects.instances.delete.
  2. En el campo nombre, introduce lo siguiente:

    projects/[PROJECT_ID]/instances/test-instance
    
  3. Haz clic en la opción para ejecutar.

Siguientes pasos