Diseño de un esquema de grafos en Microsoft Fabric

Un esquema de grafo es la colección de tipos de nodo, tipos perimetrales y sus propiedades que definen la estructura del grafo. Un esquema de grafo bien diseñado facilita la consulta, el mantenimiento y la extensión de los datos. En este artículo se proporcionan procedimientos recomendados para convertir datos tabulares en un lakehouse en un gráfico de propiedades etiquetadas eficaz en Microsoft Fabric.

Use estas instrucciones antes de empezar a modelar en el editor de modelos de grafos. Para obtener instrucciones paso a paso sobre cómo crear nodos y bordes, consulte el tutorial de grafos. En los ejemplos de este artículo se usa el conjunto de datos de ejemplo Adventure Works.

Importante

Actualmente, Graph no admite la evolución del esquema. Después de crear un modelo de grafo y cargar sus datos, los cambios estructurales, como agregar o quitar tipos de nodo, tipos perimetrales y propiedades, requieren que vuelva a cargar todos los datos antes de consultar la estructura actualizada. Para volver a cargar los datos, seleccione Guardar en la cinta de opciones superior. Este proceso de recarga de datos tarda tiempo y consume capacidad, por lo que debe planear el esquema exhaustivamente antes de empezar a modelar.

Prerrequisitos

Entender los tipos de nodo y los tipos de arista.

Antes de diseñar un esquema, comprenda estos conceptos básicos:

Un tipo de nodo define un tipo de entidad en el gráfico, como un cliente, un producto o un pedido. Consta de:

  • Etiqueta de nodo, que es el nombre que identifica esta categoría de nodo. Por ejemplo: Customer. Use la etiqueta en las consultas para hacer referencia a los nodos de este tipo.
  • Una tabla de origen, que es la tabla lakehouse que proporciona los datos de origen para el tipo de nodo. Por ejemplo, la tabla adventureworks_customers .
  • Columna de clave que identifica de forma única cada nodo. Por ejemplo: CustomerID_K.
  • Propiedades, que son columnas de la tabla que puede agregar como atributos en cada nodo. Por ejemplo, FirstName, LastNamey EmailAddress.

Un nodo es una instancia individual de un tipo de nodo, una fila de la tabla de origen. Por ejemplo, cada fila de adventureworks_customers se convierte en un Customer nodo.

Un tipo perimetral define un tipo de relación entre dos tipos de nodo. Consta de:

  • Una etiqueta de arista, que es el nombre con el que se identifica esta categoría de relación. Por ejemplo: purchases.
  • Tabla de origen que contiene los datos de relación entre los nodos de origen y de destino. Por ejemplo, la tabla adventureworks_orders .
  • Un tipo de nodo de origen y un tipo de nodo de destino que conecta la arista. Por ejemplo, Customer como origen y Order como destino.

Una arista es una instancia concreta de un tipo de arista: una fila de la tabla de origen que conecta dos nodos específicos.

Nota:

En el editor de modelos de grafos, los botones Agregar nodo y Agregar borde crean tipos de nodo y tipos perimetrales, no nodos o bordes individuales.

Identificación de entidades y relaciones

Empiece por identificar las entidades (cosas) y las relaciones (conexiones) en los datos. Las entidades se convierten en tipos de nodo. Las conexiones entre entidades se convierten en tipos de aristas.

Realice estas preguntas sobre las tablas de origen:

  • ¿Cuáles son las entidades principales? Las filas que representan elementos reales distintos son candidatos para los tipos de nodo. Por ejemplo, clientes, productos, pedidos y empleados.
  • ¿Cómo se relacionan estas entidades entre sí? Las columnas que hacen referencia a filas de otra tabla (claves foráneas) sugieren tipos de borde. Por ejemplo, CustomerID_FK en una orders tabla apunta a la customers tabla, lo que sugiere modelar un purchases borde.
  • ¿Hay entidades incrustadas? Una columna dentro de una tabla podría representar una entidad distinta que vale la pena extraer en su propio tipo de nodo. Para obtener un ejemplo, vea Elegir tipos de nodo. Para ver un tutorial paso a paso, consulte Incorporación de varios tipos de nodo y borde desde una tabla de origen.

Elegir tipos de nodo

Cree un tipo de nodo para cada entidad que necesite consultar o recorrer de forma independiente. Utilice estas directrices:

Convertir la entidad en un tipo de nodo cuando... Mantenlo como propiedad cuando...
Debe ir hacia él o atravesarlo. Son metadatos descriptivos que solo se leen, no se recorren.
Varias entidades comparten una relación con ella. Es único para la entidad a la que pertenece.
Debe buscar coincidencias o agruparlas directamente en las consultas. Solo puede filtrarse por este como una propiedad de otra entidad.

Ejemplo: En el conjunto de datos Adventure Works, Country se inicia como una columna de la employees tabla. Si necesita consultar "qué empleados residen en el mismo país?" o "qué países tienen más empleados?", extraiga Country en su propio tipo de nodo. Si solo necesita mostrar el país de un empleado como etiqueta, déjelo como atributo.

Elegir columnas de clave

Cada tipo de nodo requiere una columna de clave (o clave compuesta) que identifica de forma única cada nodo. Elija las claves cuidadosamente:

  • Utilice identificadores únicos existentes de las tablas de origen. Por ejemplo, CustomerID_K o ProductID_K.
  • Evite las claves suplentes que carecen de significado empresarial a menos que no exista ninguna clave natural. Por ejemplo, prefiere CustomerID en lugar de un número de fila que se incremente automáticamente.
  • Use claves compuestas cuando una sola columna no garantice la unicidad. Por ejemplo, un ProductVersion nodo podría necesitar tanto ProductID como VersionNumber como su clave.
  • Coinciden los tipos de datos entre las columnas clave y las columnas clave externa usadas en los mapeos de borde. Los tipos no coincidentes provocan errores de creación de bordes.

Sugerencia

Defina restricciones de clave de nodo para permitir que el motor de consultas realice búsquedas directas en las propiedades de clave. Esta optimización acelera las consultas que buscan nodos específicos por clave.

Agregar propiedades de nodo

Al crear un tipo de nodo, elija qué propiedades de la tabla de origen se van a incluir como propiedades en el tipo de nodo, especialmente las propiedades para las que se han aplicado reglas de acceso de OneLake Security a la tabla de origen subyacente.

Agregue propiedades durante la creación del nodo con el botón + Agregar propiedad . Como alternativa, agregue propiedades a un nodo existente haciendo doble clic en el tipo de nodo en el editor de modelos de grafos para abrir el cuadro de diálogo de edición del nodo y seleccionando Editar definición. Seleccione Agregar propiedad y, a continuación, elija columnas de la tabla de origen.

Es posible que no desee agregar todas las columnas de la tabla como una propiedad. Las propiedades excesivas aumentan el almacenamiento, las consultas lentas y hacen que el gráfico sea más difícil de mantener. Por estos motivos, evite agregar propiedades que no necesite para las consultas o el análisis.

Para cada tipo de nodo, mantenga solo las propiedades siguientes:

  • Necesario para la unicidad del nodo (columnas de clave)
  • Se utiliza en WHERE filtros o RETURN proyección en tus consultas
  • Necesario para el análisis o la visualización posterior

Para obtener más información sobre cómo afecta el recuento de propiedades al rendimiento de las consultas, vea Devolver solo las propiedades que necesita.

Elegir tipos de datos

Seleccione el tipo de datos más específico para cada propiedad. Los tipos adecuados mejoran tanto la eficiencia del almacenamiento como el rendimiento de las consultas:

  • Use INT o UINT64 para identificadores numéricos y recuentos. Las comparaciones numéricas son más rápidas que las comparaciones de cadenas.
  • Use ZONED DATETIME para marcas de tiempo en lugar de fechas con formato de cadena.
  • Use BOOLEAN para marcas true/false en lugar de valores de cadena como "yes" o "no".

Para obtener la lista completa de tipos admitidos, consulte Limitaciones actuales: tipos de datos.

Elegir tipos de borde

Los tipos de aristas definen las relaciones entre los tipos de nodo. Cada tipo de arista conecta un tipo de nodo de origen con un tipo de nodo de destino mediante una tabla de origen.

Siga estas instrucciones:

  • Utilice etiquetas descriptivas que se lean como verbos o frases verbales. Por ejemplo, purchases, sells, livesIny belongsTo. Un borde bien denominado facilita la lectura de las consultas.
  • Considere cuidadosamente la dirección. Las aristas del grafo son dirigidas. Elija la dirección que mejor represente la relación real. Por ejemplo, Customer --compras-->Order suena más natural que Order --compradoPor--.>Customer
  • Asigne nombres distintos a los tipos perimetrales que conectan diferentes pares de tipos de nodo. Si tanto "employee sells order" como "customer purchases order" se conectan a Order, asígneles las etiquetas sells y purchases en lugar de darles a ambos la misma etiqueta. Para obtener más información, consulte Limitaciones de creación de bordes.

Adición de propiedades a tipos de aristas

Al igual que los nodos, los tipos perimetrales comienzan sin propiedades. Opcionalmente, puede agregar propiedades cuando los datos describen la propia relación en lugar de cualquier punto de conexión. Las propiedades de Edge son más útiles cuando se escriben consultas GQL que necesitan filtrar, agregar o devolver datos sobre la propia relación.

Para agregar una propiedad, haga doble clic en un tipo de borde en el editor de modelos de grafos para abrir el cuadro de diálogo de edición perimetral y seleccione Editar definición. Seleccione Agregar propiedad y, a continuación, elija columnas de la tabla de origen.

Cuándo agregar propiedades perimetrales: Si una columna responde a "¿cuánto?", "¿cuándo?", o "de qué manera?" sobre la conexión entre dos nodos, pertenece al borde, no en ningún nodo.

Ejemplo: En el conjunto de datos Adventure Works, el contains borde se conecta Order a Product través de la tabla adventureworks_orders . Columnas como OrderQty, UnitPricey LineTotal describen la relación: cuántos de un producto estaban en un orden específico, a qué precio. Columnas como OrderDate o ShipDate describen el propio orden y pertenecen al tipo de Order nodo, no en el borde.

Importante

La tabla de origen de un borde debe contener columnas que coincidan con las columnas clave de los tipos de nodo de origen y de destino en valores y tipo de datos. Las tablas que se usan para crear tipos de nodo también pueden servir como tablas de origen perimetrales si cumplen este requisito.

Patrones comunes de tablas a grafos

En la tabla siguiente se resume cómo se traducen algunas estructuras de datos tabulares comunes a los elementos de grafos:

Estructura tabular Resultado del grafo Ejemplo
Uno a muchos: Tabla padre + tabla hija con clave foránea Dos tipos de nodo conectados por un tipo de arista. Customer -- compras->Order
Muchos a muchos: Tabla de intersección que vincula dos tablas Tipo de arista entre dos tipos de nodo. Vendor -- produce-->Product
Entidad incrustada: Columna que representa una entidad compartida Tipo de nodo extraído con arista. Employee -- livesIn->Country
Jerarquía: Cadena de tablas padre-hijo Tipos de nodo vinculados por bordes en cada nivel. Product -- isOfType-->Subcategory --belongsTo-->Category

Para ver un tutorial paso a paso del patrón de entidad incrustado, consulte Adición de varios tipos de nodo y borde desde una tabla de origen.

Cambio del esquema del grafo

Graph no admite la evolución del esquema. Después de guardar un modelo de grafo, se fija la estructura de los tipos de nodo, los tipos perimetrales y sus propiedades. Para realizar cambios estructurales, como agregar una propiedad a un tipo de nodo, quitar un tipo perimetral o cambiar una columna de clave, debe crear un nuevo modelo de grafo y volver a cargar los datos.

Para cambiar el esquema del grafo:

  1. En el área de trabajo, cree un nuevo elemento de grafo que se conecte a la misma instancia de LakeHouse.
  2. En el editor de modelos de grafos, agregue los tipos de nodo y los tipos perimetrales que necesita, incluidas las propiedades nuevas o modificadas.
  3. Configure columnas clave y mapeos de bordes. Asegúrese de que los tipos de datos coinciden entre las columnas de clave y las columnas de clave externa.
  4. Seleccione Guardar para ingerir datos y compilar el nuevo grafo.
  5. Actualice los querysets para que apunten al nuevo grafo.
  6. Después de comprobar que el nuevo grafo funciona según lo previsto, elimine el elemento de grafo original si no lo necesita.