Información general sobre el esquema de Spanner Graph

Spanner Graph te permite modelar datos conectados como un gráfico de propiedades que representa la información como una red de nodos y aristas. Los nodos simbolizan entidades y las aristas muestran las conexiones entre ellas. Los nodos y los bordes incluyen etiquetas que los clasifican en conjuntos. Los nodos y los bordes también incluyen propiedades que son pares clave-valor.

Para definir un esquema de Spanner Graph, asigna filas de tablas de entrada a nodos y aristas de gráficos. Personaliza las etiquetas y las propiedades de los nodos y los bordes, y descubre cómo afectan los cambios de esquema a las dependencias de los gráficos. También puedes gestionar datos sin esquema para obtener definiciones de gráficos más flexibles.

Para obtener más información sobre Spanner Graph, consulta la descripción general de Spanner Graph.

Información sobre el modelo de datos de gráfico de propiedades

Un grafo de propiedades te permite modelar datos conectados. Representa la información como una red de nodos y aristas. Los nodos simbolizan entidades de su panorama de datos, como clientes, productos o ubicaciones. Las aristas muestran las conexiones entre esos nodos y capturan relaciones como "comprado", "sigue" o "ubicado en".

Tanto los nodos como los bordes pueden incluir la siguiente información:

  • Etiquetas, que clasifican los nodos y los bordes en conjuntos. Por ejemplo, ciudad.
  • Las propiedades, que son pares clave-valor, como población.

En el ejemplo de la figura 1 se muestra cómo diseñar un gráfico para modelar actividades financieras. Este gráfico incluye los siguientes tipos de entidades modeladas como nodos:

  • Persona: representa a una persona implicada en transacciones financieras.
  • Cuenta: representa una cuenta bancaria que se usa para las transacciones.

Estas entidades están conectadas por diferentes tipos de relaciones, que se representan mediante las siguientes aristas dirigidas:

  • Propietario: una persona es propietaria de una o varias cuentas.
  • Transferencias: el dinero se mueve de una cuenta a otra.

Cada arista dirigida indica una relación unidireccional que va de un nodo de origen a un nodo de destino. Por ejemplo, un borde Transfers conecta un origen Account con un destino Account, lo que indica el flujo de dinero.

Diagrama de resumen del esquema de Spanner Graph.

Imagen 1. Gráfico de ejemplo con varios nodos y aristas dirigidas.

Los nodos y los bordes incluyen información adicional en las propiedades. Cada propiedad incluye un nombre y un valor.

  • Los nodos Person incluyen estas propiedades:
    • name (STRING)
    • id (INT64)
  • Las aristas de transferencias incluyen esta propiedad:
    • amount (FLOAT64)

Aristas dirigidas y no dirigidas

El gráfico de ejemplo usa aristas dirigidas que indican una dirección específica en la relación entre entidades. Sin embargo, algunas relaciones, como la de amigo en una red social, no están dirigidas y representan una conexión recíproca sin un origen ni un punto final definidos. En este caso, puedes modelar las aristas no dirigidas como dos aristas dirigidas, una en cada dirección.

Diseño de esquemas de Spanner Graph

Spanner Graph te permite usar la instrucción CREATE PROPERTY GRAPH para crear un gráfico a partir de tablas. Las tablas que crean gráficos se denominan tablas de entrada. Este enfoque usa SQL/PGQ (consultas de gráficos de propiedades), que forma parte de los estándares de SQL:2023.

Definir un nodo en un gráfico de propiedades

Para definir un nodo, añade una definición de nodo en la cláusula NODE TABLES. La forma más sencilla de definición de nodo contiene solo un nombre de tabla de entrada. Spanner Graph asigna filas de la tabla de entrada a nodos de gráfico.

En el ejemplo siguiente, se usa la cláusula NODE TABLES para definir el nodo Account en el gráfico de propiedades FinGraph. La definición del nodo contiene la tabla de entrada Account.

-- First, create an Account table.
CREATE TABLE Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
) PRIMARY KEY (id);

-- Next, use the Account table as input table of Account node definition.
CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account
  );

Etiquetas y propiedades predeterminadas

De forma predeterminada, todos los nodos usan el nombre de la tabla de entrada como etiqueta y Spanner Graph expone todas las columnas de la tabla de entrada como propiedades de nodo.

En el ejemplo anterior,

  • Cada nodo de cuenta usa la etiqueta Account.
  • Cada nodo de cuenta incluye propiedades [id, create_time] de las columnas de la tabla Account.

Clave de elemento

Una definición de nodo también define la clave de elemento que identifica de forma única un nodo de gráfico.

  • De forma predeterminada, la clave del elemento es la clave principal de la tabla de entrada.
  • Puedes usar la cláusula KEY para definir explícitamente las claves de los elementos.
  • Puede usar columnas con una restricción de índice único como claves de elemento.

En el siguiente ejemplo se definen los nodos Account y Person.

  • El nodo Account usa la clave principal de la tabla Account como clave de elemento de forma predeterminada.
  • Por otro lado, el nodo Person especifica explícitamente el id como clave del elemento con la cláusula KEY.
CREATE TABLE Person (
  id           INT64 NOT NULL,
  name         STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
) PRIMARY KEY (id);

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id),
    Account
  );

Asigna una fila de la tabla de entrada a un nodo del gráfico

  • Cada fila con una clave de elemento no nula se asigna a un nodo único del gráfico, identificado por la clave de elemento.
  • Las filas con una clave de elemento nula se ignoran.

Definir un borde en un gráfico de propiedades

Para definir un borde, añade una definición de borde a la cláusula EDGE TABLES. La forma más sencilla de definición de arista solo contiene un nombre de tabla de entrada. Spanner Graph asigna filas de la tabla de entrada a aristas del gráfico.

Referencias de nodos de origen y destino

En el siguiente ejemplo, se crea un gráfico de propiedades FinGraph con lo siguiente:

  • Nodos Person y Account
  • Borde PersonOwnAccount
CREATE TABLE Person (
 id            INT64 NOT NULL,
 name          STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
 id            INT64 NOT NULL,
 create_time   TIMESTAMP,
) PRIMARY KEY (id);

CREATE TABLE PersonOwnAccount (
 id            INT64 NOT NULL,
 account_id    INT64 NOT NULL,
 create_time   TIMESTAMP,
 FOREIGN KEY (account_id) REFERENCES Account (id)
) PRIMARY KEY (id, account_id),
  INTERLEAVE IN PARENT Person;

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person,
    Account
  )
  EDGE TABLES (
    PersonOwnAccount
      SOURCE KEY (id) REFERENCES Person (id)
      DESTINATION KEY (account_id) REFERENCES Account (id)
  );

Una definición de arista define la referencia de nodo de origen y de destino mediante las cláusulas SOURCE KEY, DESTINATION KEY y REFERENCES. En el siguiente ejemplo se usa la definición de borde de PersonOwnAccount para ilustrar este concepto:

EDGE TABLES (
  PersonOwnAccount
    SOURCE KEY (id) REFERENCES Person (id)
    DESTINATION KEY (account_id) REFERENCES Account (id)
)

Cada PersonOwnAccount arista conecta un Person (fuente) con un nodo Account (destino).

  • El nodo de origen de un borde es un nodo Person en el que el id es el mismo que el id del borde.
  • El nodo de destino de una arista es un nodo Account en el que el id es el mismo que el account_id de la arista.

Además, se cumple lo siguiente en el PersonOwnAccount:

  • La clave del elemento es la clave principal de la tabla PersonOwnAccount, es decir, (id, account_id).
  • Cada arista tiene el mismo conjunto de propiedades que las columnas de la tabla PersonOwnAccount.
  • Cada arista tiene la etiqueta PersonOwnAccount predeterminada.

Asignar una fila de una tabla de entrada de aristas a las aristas del gráfico

  • Cada fila de la tabla de entrada de aristas, en la que la clave de elemento no es nula, suele corresponder a una arista única del gráfico.
  • Una fila puede corresponder a cero o a más de una arista del gráfico. Por ejemplo, esto ocurre cuando la referencia del nodo de origen coincide con cero o más nodos de la tabla de nodos de origen.
  • Puede usar la misma tabla de entrada en diferentes definiciones de nodos o aristas para crear distintos conjuntos de nodos o aristas. Para obtener más información, consulta Combinar tablas de entrada de nodos y aristas.

Personalizar etiquetas y propiedades

Puede usar las cláusulas LABEL y PROPERTIES para personalizar las etiquetas y las propiedades.

En el siguiente ejemplo se definen dos nodos: Person y Account.

  • Los nodos Person usan la etiqueta Customer para exponer la propiedad address. La propiedad address se define mediante la expresión CONCAT(city, ", ", country),, que hace referencia a las columnas city y country de la tabla de entrada Person.
  • En el caso de Account, el nodo Account usa la etiqueta Account para exponer las propiedades id y create_time.
  • Person y Account tienen la etiqueta Entity con las propiedades [id, name].
    • En el caso de Person, las propiedades id y name proceden de las columnas de la tabla de entrada.
    • En el caso de Account, la propiedad name hace referencia a la columna nick_name de la tabla de entrada.
CREATE TABLE Person (
 id               INT64 NOT NULL,
 name             STRING(MAX),
 birthday         TIMESTAMP,
 country          STRING(MAX),
 city             STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
 id               INT64 NOT NULL,
 create_time      TIMESTAMP,
 is_blocked       BOOL,
 nick_name        STRING(MAX),
) PRIMARY KEY (id);

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id)
      LABEL Customer
        PROPERTIES (CONCAT(city, ", ", country) AS address)
      LABEL Entity PROPERTIES (id, name),
    Account KEY (id)
      LABEL Account PROPERTIES (id, create_time)
      LABEL Entity PROPERTIES (id, nick_name AS name)
  );

Coherencia de etiquetas y propiedades

En un grafo, las etiquetas y las propiedades se identifican de forma única por sus nombres. Puedes usar etiquetas y propiedades con el mismo nombre en varias definiciones de nodos o aristas. Sin embargo, las etiquetas y las propiedades con el mismo nombre deben cumplir estas reglas:

  • Las propiedades con el mismo nombre usan el mismo tipo de valor.
  • Las etiquetas con el mismo nombre exponen la misma lista de propiedades.

En el ejemplo anterior, la etiqueta Entity se define en los nodos Person y Account. Ambas definiciones incluyen el mismo conjunto de nombres de propiedades [id, name] con tipos de valor idénticos.

Dependencias entre gráficos y otros objetos de esquema

El gráfico creado por CREATE PROPERTY GRAPH depende de otros objetos de esquema, como las tablas de entrada de las definiciones de nodos y aristas, y las columnas de tabla a las que hacen referencia las propiedades. Spanner Graph no permite cambiar un esquema que rompa una de estas dependencias.

La siguiente instrucción hace que FinGraph dependa de la tabla Account y de las columnas id y create_time.

CREATE OR REPLACE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account PROPERTIES (id, create_time)
  );

En este ejemplo, Spanner Graph no permite los siguientes cambios en el esquema:

Sin embargo, puedes hacer los siguientes cambios en el esquema:

  • Modifica el esquema de las columnas Account de la tabla, id y create_time si otros requisitos del esquema lo permiten. Para obtener más información, consulta el artículo Hacer cambios en el esquema.

Ver una visualización de un esquema

Puedes ver una visualización del esquema en Spanner Studio después de ejecutar una consulta de gráfico de Spanner. Para obtener más información, consulta Trabajar con visualizaciones de gráficos de Spanner.

Gestionar datos sin esquema

Spanner Graph también admite la gestión de datos sin esquema, lo que resulta útil cuando necesitas una definición de gráfico más flexible. Para obtener más información, consulta Gestionar datos sin esquema en Spanner Graph.

Siguientes pasos