Descripción general del esquema de Spanner Graph

En este documento, se describe el esquema del gráfico de Spanner y se proporcionan ejemplos para ilustraremos conceptos clave. Para obtener más información sobre Spanner Graph, consulta la descripción general de Spanner Graph.

Modelo de datos del grafo de propiedades

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

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

  • Etiquetas, que clasifican nodos y aristas en conjuntos, por ejemplo, Ciudad.
  • Propiedades, que son pares clave-valor, por ejemplo, población

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

  • Persona: Representa a una persona involucrada en transacciones financieras.
  • Cuenta: Representa una cuenta bancaria que se usa para realizar transacciones.

Estas entidades están conectadas por distintos tipos de relaciones, que son representados por las siguientes aristas dirigidas:

  • Es propietario: Una persona es propietaria de una o más cuentas.
  • Transferencias: El dinero se mueve de una cuenta a otra.

Cada arista dirigida indica una relación unidireccional que fluye de un nodo fuente a un nodo de destino. Por ejemplo, un perímetro Transfers conecta un origen Account a un destino Account, que indica el flujo de dinero.

Diagrama de descripción general del esquema de Spanner Graph.

Figura 1. Ejemplo de grafo con varios nodos y aristas dirigidas.

Los nodos y las aristas pueden contener información adicional en forma de propiedades. Cada propiedad tiene un nombre y un valor.

  • Los nodos Person tienen las siguientes propiedades:
    • name (STRING)
    • id (INT64)
  • Las aristas de transferencias tienen la siguiente propiedad:
    • amount (FLOAT64)

Bordes dirigidos y no dirigidos

El gráfico de ejemplo utiliza aristas dirigidas, que indican una dirección específica en la relación entre entidades. Sin embargo, algunas relaciones, como la "amigo" relación en una red social, no están dirigidos a personas y representan un conexión recíproca sin un origen o extremo distinto. En este caso, puede modelar aristas no dirigidas como dos aristas dirigidas, una arista en cada dirección.

Diseño del esquema de Spanner Graph

Spanner Graph te permite crear un grafo a partir de tablas con el Declaración CREATE PROPERTY GRAPH. Las tablas usadas para crear gráficos se llaman tablas de entrada. Este enfoque se basa en SQL/PGQ (consultas de grafos de propiedades), que es parte de los estándares SQL:2023.

Define un nodo en un gráfico de propiedades

Para definir un nodo, debes agregar una definición de nodo en la cláusula NODE TABLES. La forma más simple de definición de nodos solo contiene un nombre de tabla de entrada. Filas de la tabla de entrada se asignan a nodos del gráfico.

En el siguiente ejemplo, 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
  );

Etiqueta y propiedades predeterminadas

De forma predeterminada, todos los nodos usan el nombre de la tabla de entrada como etiqueta, y todas las columnas de la tabla de entrada se exponen como propiedades del nodo.

En el ejemplo anterior,

  • Cada nodo de cuenta tiene la etiqueta Account.
  • Cada nodo de cuenta tiene propiedades [id, create_time] creadas a partir de las columnas de la tabla Account.

Clave del 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 primaria de la tabla de entrada.
  • Las claves de elementos se pueden definir de forma explícita con la cláusula KEY.
  • Las columnas con restricciones de unicidad UNIQUE INDEX se pueden se usan como claves de elementos.

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

  • El nodo Account usa la clave primaria de la tabla Account como su elemento de forma predeterminada.
  • Person, por otro lado, especifica de forma explícita id como la 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
  );

Cómo asignar 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 en el graph, identificado por la clave de elemento.
  • Se ignoran las filas con una clave de elemento nula.

Cómo definir un borde en un grafo de propiedades

Para definir una arista, agrega una definición de arista a la cláusula EDGE TABLES. La forma más simple de definición perimetral contiene solo un nombre de tabla de entrada. Las filas de la tabla de entrada se asignan a los bordes del grafo.

Referencia del nodo de origen y de destino

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

  • Person y Account nodos
  • Borde de 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 borde debe definir la referencia del nodo de origen y destino con las cláusulas SOURCE KEY, DESTINATION KEY y REFERENCES. Lo siguiente usa la definición de borde de PersonOwnAccount para ilustrar el este concepto:

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

Cada borde PersonOwnAccount conecta un Person (fuente) a un nodo Account (destino).

  • El nodo SOURCE de un borde es un nodo Person cuyo id es el mismo que el id del borde.
  • El nodo DESTINATION de un perímetro es un nodo Account cuyo id es el mismo. que el perímetro account_id.

Además, lo siguiente es verdadero para el perímetro PersonOwnAccount:

  • La clave de elemento es la clave primaria 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 borde tiene la etiqueta PersonOwnAccount predeterminada.

Asignación de una fila en una tabla de entrada de aristas a las aristas del gráfico

  • Cada fila de la tabla de entrada perimetral, cuya clave de elemento no es nula, generalmente se asigna a una arista única en tu gráfico.
  • Una fila puede corresponder a cero o más de una arista en el gráfico, por por ejemplo, cuando referencia del nodo de origen coincide con cero o más nodos de la tabla de nodos de origen.
  • La misma tabla de entrada se puede usar en diferentes definiciones de nodos o aristas para crear diferentes conjuntos de nodos o aristas. Para obtener más información, consulta Combinación de entrada de nodo y borde tablas.

Personaliza etiquetas y propiedades

Puedes usar la LABEL y PROPIEDADES para personalizar etiquetas y propiedades.

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

  • Los nodos Person expose la propiedad address a través de la etiqueta Customer. El La propiedad address se define con la expresión CONCAT(city, ", ", country),, que hace referencia a las columnas city y country de la entrada. la tabla Person.
  • Para Account, el nodo Account expone las propiedades id y create_time a través de la etiqueta Account.
  • Person y Account tienen la etiqueta Entity con propiedades [id, name].
    • En el caso de Person, las propiedades id y name provienen de las columnas de la tabla de entrada.
    • Para 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 etiqueta y propiedad

En un gráfico, las etiquetas y las propiedades se identifican de forma única por sus nombres. Las etiquetas y propiedades con el mismo nombre pueden aparecer en varios nodos o aristas definiciones Sin embargo, las etiquetas y las propiedades con el mismo nombre deben seguir estas reglas:

  • Las propiedades con el mismo nombre deben tener el mismo tipo de valor.
  • Las etiquetas con el mismo nombre deben exponer la misma lista de propiedades.

En el ejemplo anterior, la etiqueta Entity se define en los nodos Person y Account. En ambas definiciones, tienen el mismo conjunto de nombres de propiedades [id, name] con los mismos tipos de valores.

Dependencias entre gráficos y otros objetos de esquema

El gráfico que creó CREATE PROPERTY GRAPH depende de otro esquema como las tablas de entrada de las definiciones de arista y nodo, y la tabla a las que hacen referencia las propiedades. Si un cambio de esquema rompe una de estas dependencias, no se permite el cambio.

La siguiente sentencia crea una dependencia de FinGraph a la tabla Account y a las columnas id y create_time.

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

Los siguientes son ejemplos de cambios de esquema que no puedes realizar:

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

  • Modifica la tabla Account y el esquema de las columnas id y create_time, siempre que otros requisitos del esquema lo permitan. Para obtener más información, consulta Cómo realizar actualizaciones de esquemas.

¿Qué sigue?