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 Student y una etiqueta Person. 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 name con el valor Alex y una propiedad id con el valor 1.

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.

Nodos, aristas, etiquetas y propiedades de un grafo financiero.

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 Person incluyen estas propiedades:

    • name (STRING)
    • id (INT64)
  • Los bordes Transfers incluyen 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 id y create_time de las columnas de la tabla Account.

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.

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 Person y Account
  • 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 Person en el que la propiedad id es la misma que la propiedad id de la arista.
  • El nodo de destino de una arista es un nodo Account en el que la propiedad id es la misma que la propiedad account_id de 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 Person usan la etiqueta Customer para exponer la propiedad address. La propiedad address se define con la expresión CONCAT(city, ", ", country),, que hace referencia a las columnas city y country de la tabla de entrada Person.

  • El nodo Account usa la etiqueta Account para exponer las propiedades id y create_time.

Los nodos Person y Account tienen la etiqueta Entity con las propiedades id y name.

  • En el nodo Person, las propiedades id y name provienen de las columnas de la tabla de entrada.
  • En el nodo Account, la propiedad name hace referencia a la columna nick_name de 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?