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 el gráfico de Spanner, consulta el Descripción general del gráfico de Spanner.
Modelo de datos del grafo de propiedades
Un gráfico de propiedades te permite modelar datos conectados. Representa la información como red de nodos y aristas. Los nodos simbolizan entidades en tu panorama de datos, como “clientes”, “productos” o “ubicaciones”, las aristas muestran las conexiones esos nodos, registrando relaciones como “comprado”, "sigue", o “ubicados en”.
Tanto los nodos como las aristas pueden incluir la siguiente información:
- Etiquetas, que clasifican los nodos y los bordes en conjuntos, por ejemplo, ciudad.
- Propiedades, que son pares clave-valor, por ejemplo, población
El ejemplo de la Figura 1 muestra cómo podrías diseñar un grafo para modelar financieras. Este gráfico incluye los siguientes tipos de entidades se modelan como nodos:
- Persona: Representa a una persona física que participa en transacciones financieras.
- Cuenta: Representa una cuenta bancaria que se usa para 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 borde dirigido indica una relación unidireccional, que fluye desde 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.
Figura 1. Gráfico de ejemplo con varios nodos y bordes dirigidos.
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 del grafo de Spanner
Spanner Graph te permite crear un gráfico a partir de tablas con la instrucció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 nodo contiene solo un nombre de tabla de entrada. Filas de la tabla de entrada se asignan a nodos del gráfico.
En el siguiente ejemplo, usas la cláusula NODE TABLES para definir la
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 su etiqueta y todas las columnas de la tabla de entrada se exponen como propiedades de nodo.
En el ejemplo anterior,
- Cada nodo de la cuenta tiene la etiqueta
Account
. - Cada nodo de la cuenta tiene propiedades
[id, create_time]
creadas a partir delAccount
columnas de la tabla.
Clave del elemento
La definición de un nodo también define la clave del elemento, que identifica de manera inequívoca a un en un nodo del grafo.
- 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 tablaAccount
como su elemento de forma predeterminada. Person
, por otro lado, especifica de forma explícitaid
como la clave del elemento con la cláusulaKEY
.
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 la gráfico, identificado por la clave del elemento.
- Se ignoran las filas con una clave de elemento nula.
Define una arista en un gráfico 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. Filas de la tabla de entrada se asignan a los perímetros del gráfico.
La etiqueta y las propiedades predeterminadas de las aristas son las siguientes: definidas de la misma manera que los nodos.
La clave del elemento de cada arista se define de la misma manera que los nodos.
Referencia del nodo de origen y de destino
En el siguiente ejemplo, se crea un gráfico de propiedades FinGraph
con lo siguiente:
Person
yAccount
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 perimetral debe definir la referencia de nodo de origen y de 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
(origen) a un Account
.
(destino).
- El nodo
SOURCE
de un perímetro es un nodoPerson
cuyoid
es igual a el bordeid
. - El nodo
DESTINATION
de un perímetro es un nodoAccount
cuyoid
es el mismo. que el perímetroaccount_id
.
Además, lo siguiente es verdadero para el perímetro PersonOwnAccount
:
- La clave del 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.
- Se puede usar la misma tabla de entrada en diferentes definiciones de nodo o arista 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
de la propiedadaddress
a través de la etiquetaCustomer
El La propiedadaddress
se define con la expresiónCONCAT(city, ", ", country),
, que hace referencia a las columnascity
ycountry
de la entrada. la tablaPerson
. - Para
Account
, el nodoAccount
exponeid
ycreate_time
. propiedades a través de la etiquetaAccount
. Person
yAccount
tienen la etiquetaEntity
con propiedades [id, name
].- .
- En el caso de
Person
, se incluyen las propiedadesid
yname
. de las columnas de la tabla de entrada. - Para
Account
, la propiedadname
hace referencia anick_name
. de la tabla de entrada.
- En el caso de
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 manera inequívoca por sus nombres. Las etiquetas y propiedades con el mismo nombre pueden aparecer en varios nodos o aristas definiciones Sin embargo, las etiquetas y 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 Person
y
Account
nodos. En ambas definiciones, tienen el mismo conjunto de nombres de propiedades.
[id
, name
] con los tipos de valores idénticos.
Dependencias entre grafos 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 uno de estos
las dependencias, el cambio no está permitido.
La siguiente sentencia crea una dependencia de FinGraph
a Account
.
y las columnas id
, 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:
- Descarta la tabla
Account
, a menos que primero quites el nodoAccount
definición. Para obtener más información, consulta Quita nodos existentes o definiciones perimetrales. - Quita
create_time
columnas de la tablaAccount
, a menos que primero lo hagas Quita la propiedadcreate_time
de la definición del nodoAccount
. Para más información, consulta Actualiza las definiciones de aristas o nodos existentes.
Sin embargo, puedes realizar los siguientes cambios de esquema:
- Modifica la tabla
Account
y el esquema de las columnasid
ycreate_time
, siempre que otros requisitos del esquema lo permitan. Para ver más información, consulta Realiza actualizaciones del esquema.