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 las aristas también incluyen propiedades que son pares clave-valor.
Para definir un esquema de Spanner Graph, debes asignar filas de las tablas de entrada a nodos y aristas del grafo. Personalizar etiquetas y propiedades para nodos y aristas, y comprender cómo los cambios en el esquema afectan las dependencias del grafo También puedes administrar 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 del gráfico 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. Las aristas 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 podrías diseñar un grafo para modelar actividades financieras. Este gráfico incluye los siguientes tipos de entidades modeladas como nodos:
- Persona: Representa a una persona física involucrada en transacciones financieras.
- Account: Representa una cuenta bancaria que se usa para las transacciones.
Estas entidades están conectadas por diferentes tipos de relaciones, que se representan con las siguientes aristas dirigidas:
- Es propietario de: 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 desde un nodo fuente hacia un nodo de destino. Por ejemplo, una arista Transfers
conecta un Account
de origen con un Account
de destino, lo que indica el flujo de dinero.
Figura 1. Ejemplo de un gráfico con varios nodos y bordes dirigidos.
Los nodos y las aristas incluyen información adicional en las propiedades. Cada propiedad incluye un nombre y un valor.
- Los nodos Person incluyen las siguientes propiedades:
name
(STRING
)id
(INT64
)
- Las aristas de Transferencias incluyen esta propiedad:
amount
(FLOAT64)
Bordes dirigidos y no dirigidos
El gráfico de ejemplo usa bordes dirigidos que indican una dirección específica en la relación entre entidades. Sin embargo, algunas relaciones, como la relación de amigo en una red social, no están dirigidas y representan una conexión recíproca sin un origen o un extremo distintos. En este caso, puedes modelar las aristas no dirigidas como dos aristas dirigidas, una en cada dirección.
Diseño del esquema 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 grafos de propiedades), que forma parte de los estándares de SQL:2023.
Cómo definir un nodo en un gráfico de propiedades
Para definir un nodo, agrega 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. Spanner Graph asigna filas de la tabla de entrada 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
);
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 la cuenta usa la etiqueta
Account
. - Cada nodo de la cuenta incluye propiedades
[id, create_time]
de las columnas de la tablaAccount
.
Clave del elemento
Una definición de nodo también define la clave del elemento que identifica de forma única un nodo del gráfico.
- De forma predeterminada, la clave del elemento es la clave primaria de la tabla de entrada.
- Puedes usar la cláusula
KEY
para definir explícitamente las claves de los elementos. - Puedes usar columnas con una restricción de índice único como claves de elementos.
En el siguiente ejemplo, se definen el nodo Account
y el nodo Person
.
- De forma predeterminada, el nodo
Account
usa la clave primaria de la tablaAccount
como clave de elemento. - Por otro lado, el nodo
Person
especifica de forma explícita elid
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
);
Asigna una fila de la tabla de entrada a un nodo del grafo
- Cada fila con una clave de elemento no nula se asigna a un nodo único en el grafo, identificado por la clave del elemento.
- Se ignoran las filas con una clave de elemento nula.
Cómo definir 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 de borde solo contiene un nombre de tabla de entrada. Spanner Graph asigna filas de la tabla de entrada a vínculos del grafo.
La etiqueta y las propiedades predeterminadas de las aristas se definen de la misma manera que los nodos.
La clave de cada elemento de borde se define de la misma manera que los nodos.
Referencias de nodos de origen y destino
En el siguiente ejemplo, crearás un gráfico de propiedades FinGraph
con los siguientes elementos:
- Nodos
Person
yAccount
- 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 define la referencia del nodo de origen y destino con 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 borde PersonOwnAccount
conecta un nodo Person
(fuente) a un nodo Account
(destino).
- El nodo fuente de una arista es un nodo
Person
en el que elid
es el mismo que elid
de la arista. - El nodo de destino de una arista es un nodo
Account
en el que elid
es el mismo que elaccount_id
de la arista.
Además, se cumple lo siguiente para la arista 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 arista tiene la etiqueta predeterminada
PersonOwnAccount
.
Asigna una fila de una tabla de entrada de aristas a las aristas del grafo
- Cada fila de la tabla de entrada de aristas, en la que la clave del elemento no es nula, suele asignarse a una arista única en tu grafo.
- Una fila puede corresponder a cero o más de una arista en el gráfico. Por ejemplo, esto ocurre cuando la referencia del nodo fuente coincide con cero o más nodos en la tabla de nodos fuente.
- Puedes usar la misma tabla de entrada en diferentes definiciones de nodos o aristas para crear diferentes conjuntos de nodos o aristas. Para obtener más información, consulta Cómo combinar tablas de entrada de nodos y aristas.
Personaliza etiquetas y propiedades
Puedes usar las cláusulas LABEL y PROPERTIES para personalizar etiquetas y propiedades.
En el siguiente ejemplo, se definen dos nodos: Person
y Account
.
- Los nodos
Person
usan la etiquetaCustomer
para exponer la propiedadaddress
. La propiedadaddress
se define con la expresiónCONCAT(city, ", ", country),
que hace referencia a las columnascity
ycountry
de la tabla de entradaPerson
. - Para
Account
, el nodoAccount
usa la etiquetaAccount
para exponer las propiedadesid
ycreate_time
. Person
yAccount
tienen la etiquetaEntity
con las propiedades [id, name
].- En el caso de
Person
, las propiedadesid
yname
provienen de las columnas de la tabla de entrada. - Para
Account
, la propiedadname
hace referencia a la columnanick_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 etiquetas y propiedades
En un gráfico, 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 bordes. Sin embargo, las etiquetas y las propiedades con el mismo nombre deben cumplir con las siguientes 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 propiedad [id
, name
] con tipos de valor idénticos.
Dependencias entre gráficos y otros objetos del esquema
El grafo creado por CREATE PROPERTY GRAPH
depende de otros objetos del esquema, como las tablas de entrada de las definiciones de nodos y vínculos, y las columnas de la tabla a las que hacen referencia las propiedades. Spanner Graph no permite un cambio de esquema que interrumpa 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 de esquema:
- No puedes soltar la tabla
Account
. Para ello, debes quitar la definición del nodoAccount
. Para obtener más información, consulta Cómo quitar nodos o definiciones de aristas existentes. - No puedes descartar columnas de
create_time
de la tablaAccount
. Para ello, debes quitar la propiedadcreate_time
de la definición del nodoAccount
. Para obtener más información, consulta Cómo actualizar definiciones de nodos o aristas existentes.
Sin embargo, puedes realizar los siguientes cambios en el esquema:
- Modifica el esquema de la tabla
Account
y las columnasid
ycreate_time
si otros requisitos del esquema lo permiten. Para obtener más información, consulta Realiza actualizaciones del esquema.
Cómo ver una visualización del esquema
Puedes ver una visualización del esquema en Spanner Studio después de ejecutar una consulta de Spanner Graph. Para obtener más información, consulta Trabaja con visualizaciones de Spanner Graph.
Administra datos sin esquema
Spanner Graph también admite la administració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 Administra datos sin esquema en Spanner Graph.
¿Qué sigue?
- Crea un esquema de Spanner Graph.
- Actualiza o borra un esquema de Spanner Graph.
- Administra datos sin esquema con Spanner Graph.