Descripción general del esquema
En este documento, se explican los componentes de un esquema de gráfico de propiedades y se muestra cómo crear y administrar un esquema de gráfico.
Los grafos te permiten modelar datos conectados que representan información como una red de nodos y bordes. Un esquema de grafo consta de nodos y aristas, junto con etiquetas que clasifican su tipo y propiedades que los describen. Para definir un esquema de grafo de propiedades, debes asignar filas de tablas de entrada a nodos y vínculos del grafo, y definir etiquetas y propiedades personalizadas. Para obtener más información sobre BigQuery Graph, consulta la descripción general de BigQuery Graph.
Información sobre el modelo de datos del gráfico de propiedades
Un gráfico de propiedades te permite modelar datos conectados como una red de nodos y aristas. Los nodos representan entidades en tus datos, como clientes, productos o ubicaciones. Las aristas representan las conexiones entre esos nodos y capturan relaciones como compras, seguimientos o ubicaciones.
Los nodos y las aristas pueden incluir la siguiente información:
Etiquetas: Clasifican los nodos y los tipos de aristas. Por ejemplo, los estudiantes de una clase pueden tener una etiqueta
Studenty una etiquetaPerson. Si no defines explícitamente una etiqueta para un nodo o un borde, BigQuery Graph usa el nombre de la tabla de entrada como etiqueta predeterminada.Propiedades: Se usan para describir nodos y aristas. Por ejemplo, un nodo que representa a una persona puede tener una propiedad
namecon el valorAlexy una propiedadidcon el valor1.
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.
- Cuenta: 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 aristas dirigidas.
Los nodos y las aristas incluyen información adicional en las propiedades.
Los nodos
Personincluyen estas propiedades:name(STRING)id(INT64)
Los bordes
Transfersincluyen esta propiedad:amount(FLOAT64)
Bordes dirigidos y no dirigidos
Los bordes dirigidos indican una dirección específica en la relación entre entidades. Por ejemplo, una persona es propietaria de una cuenta, pero una cuenta no es propietaria de una persona. Sin embargo, algunas relaciones, como la de amistad en una red social, son no dirigidas y representan una conexión recíproca. En este caso, puedes modelar las aristas no dirigidas como dos aristas dirigidas, una en cada dirección.
Diseña tu esquema
BigQuery Graph te permite usar la declaración CREATE PROPERTY GRAPH para crear un gráfico a partir de tablas. Las tablas que crean gráficos se denominan tablas de entrada.
Cómo definir un nodo
Los nodos se definen por filas en las tablas.
Para definir un nodo, agrega una definición de nodo en la cláusula NODE TABLES.
La forma más simple de una definición de nodo contiene el nombre de una tabla de entrada con una clave primaria.
BigQuery Graph asigna filas de la tabla de entrada a nodos del gráfico.
En el siguiente ejemplo, usarás 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.
-- Create an Account table.
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
-- Use the Account table as the input table for the Account node definition.
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Account
);
De forma predeterminada, BigQuery usa el nombre de la tabla como etiqueta y expone todas las columnas de la tabla de entrada como propiedades.
- Cada nodo de la cuenta usa la etiqueta
Account. - Cada nodo de la cuenta incluye propiedades
idycreate_timede las columnas de la tablaAccount.
Clave del elemento
Una definición de nodo también define la clave de elemento, una colección de columnas 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.
Como alternativa, puedes usar la cláusula KEY para definir de forma explícita las claves de los elementos.
En el siguiente ejemplo, se definen un nodo Account y un nodo Person. El nodo Account usa la clave primaria de la tabla Account como clave de elemento.
El nodo Person especifica de forma explícita la columna id como la clave del elemento con la cláusula KEY.
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person KEY (id),
graph_db.Account
);
- Cada fila con una clave de elemento no nula se asigna a un nodo único en el gráfico identificado por la clave del elemento.
- Se ignoran las filas con una clave de elemento nula.
La misma tabla de entrada se puede usar en varias definiciones de nodos. En este caso, una fila determinada de la tabla de entrada se asigna a un nodo para cada definición de nodo.
Cómo definir un borde
Los bordes se definen por filas en las tablas.
Para definir un borde, agrega una definición de borde a la cláusula EDGE TABLES.
La forma más simple de definición de borde contiene el nombre de una tabla de entrada y define referencias de nodos de origen y destino.
BigQuery Graph usa esta definición para asignar las filas de la tabla de entrada a las aristas del grafo.
De forma predeterminada, BigQuery usa el nombre de la tabla como etiqueta y expone todas las columnas de la tabla de entrada como propiedades.
- La clave de cada elemento de borde se define de la misma manera que los nodos.
Referencias de nodos de origen y destino
Una definición de borde define la referencia del nodo de origen y destino con las cláusulas SOURCE KEY, DESTINATION KEY y REFERENCES.
Debes definir los nodos de origen y destino antes de usarlos en la definición de la arista.
En el siguiente ejemplo, crearás un gráfico de propiedades FinGraph con los siguientes elementos:
- Nodos
PersonyAccount - borde de
PersonOwnAccount
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
FOREIGN KEY (account_id) REFERENCES graph_db.Account (id) NOT ENFORCED,
PRIMARY KEY (id, account_id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person,
graph_db.Account
)
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 de origen de una arista es un nodo
Personen el que la propiedadides la misma que la propiedadidde la arista. - El nodo de destino de una arista es un nodo
Accounten el que la propiedadides la misma que la propiedadaccount_idde la arista. - 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.
Cómo asignar filas a bordes
Cada fila de la tabla de entrada de aristas con una clave de elemento no nula suele asignarse a una sola arista en tu grafo. Sin embargo, si la referencia del nodo de origen o destino coincide con cero o más nodos en la tabla de nodos de origen o destino, la fila en la tabla de entrada de aristas podría generar cero o varias aristas en tu gráfico.
Cómo definir nodos y aristas en una sola tabla
Puedes definir un nodo y sus aristas entrantes o salientes en una sola tabla si las columnas de la tabla definen una relación con otra tabla. Este enfoque reduce la cantidad de tablas, simplifica la administración de datos y puede mejorar el rendimiento de las consultas, ya que elimina la necesidad de unir una tabla de borde separada.
Por ejemplo, si la siguiente tabla Account tiene una clave primaria compuesta (owner_id, account_id), la columna owner_id puede ser una clave externa que haga referencia a una tabla Person. Esta estructura permite que la tabla Account represente tanto el nodo Account como la arista entrante del nodo Person.
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
PRIMARY KEY (id) NOT ENFORCED
);
-- Assume each account has exactly one owner.
CREATE TABLE graph_db.Account (
owner_id INT64 NOT NULL,
account_id INT64 NOT NULL,
FOREIGN KEY (owner_id) REFERENCES graph_db.Person(id) NOT ENFORCED,
PRIMARY KEY (owner_id, account_id) NOT ENFORCED
);
Puedes usar la tabla Account para definir tanto el nodo Account como su borde Owns entrante. Esto se muestra en la siguiente instrucción CREATE PROPERTY GRAPH. En la cláusula EDGE TABLES, le asignas el alias Owns a la tabla Account. Esto se debe a que cada elemento del esquema del gráfico debe tener un nombre único.
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person,
graph_db.Account
)
EDGE TABLES (
graph_db.Account AS Owns
SOURCE KEY (owner_id) REFERENCES Person
DESTINATION KEY (owner_id, account_id) REFERENCES Account
);
Personaliza etiquetas y propiedades
Puedes usar las cláusulas LABEL y PROPERTIES para personalizar etiquetas y propiedades.
En el siguiente ejemplo, se define un nodo Person con una propiedad personalizada y un nodo Account con varias etiquetas:
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person KEY (id)
LABEL Customer
PROPERTIES (CONCAT(city, ", ", country) AS address)
LABEL Entity PROPERTIES (id, name),
graph_db.Account KEY (id)
LABEL Account PROPERTIES (id, create_time)
LABEL Entity PROPERTIES (id, nick_name AS name)
);
Los nodos
Personusan la etiquetaCustomerpara exponer la propiedadaddress. La propiedadaddressse define con la expresiónCONCAT(city, ", ", country),, que hace referencia a las columnascityycountryde la tabla de entradaPerson.El nodo
Accountusa la etiquetaAccountpara exponer las propiedadesidycreate_time.
Los nodos Person y Account tienen la etiqueta Entity con las propiedades id y name.
- En el nodo
Person, las propiedadesidynameprovienen de las columnas de la tabla de entrada. - En el nodo
Account, la propiedadnamehace referencia a la columnanick_namede la tabla de entrada.
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 bordes. Sin embargo, las etiquetas y las propiedades con el mismo nombre deben cumplir con las siguientes reglas:
- Las propiedades con el mismo nombre deben usar 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. Ambas definiciones incluyen el mismo conjunto de nombres de propiedad, id y name, con tipos de valores idénticos.
Administra las dependencias del esquema
Los grafos dependen del esquema de las tablas de entrada para las definiciones de nodos y vínculos, y de las columnas de la tabla a las que hacen referencia las propiedades. BigQuery Graph no verifica si borrar o alterar tablas o columnas invalida un esquema de gráfico existente.
Es tu responsabilidad evitar los cambios que interrumpan el esquema. Sigue estas prácticas recomendadas:
- Antes de borrar una tabla que se usa en la definición de un nodo del gráfico, primero quita esa definición del gráfico.
- Antes de quitar una columna de una tabla que se expone como una propiedad en un gráfico, quita la propiedad de la definición del nodo o la arista correspondiente.
Cómo ver esquemas de grafos
Puedes visualizar tu esquema de gráfico en un notebook.
Actualiza un esquema de gráfico
Para realizar cualquier cambio en el esquema de un gráfico existente, debes redefinir el esquema del gráfico con la sentencia CREATE PROPERTY GRAPH.
Borra un esquema de gráfico
Para borrar un grafo de propiedad, usa la declaración DROP PROPERTY GRAPH.
¿Qué sigue?
- Obtén más información sobre BigQuery Graph.
- Aprende a crear y consultar un gráfico de propiedades.
- Obtén más información sobre las prácticas recomendadas para el esquema de grafos.