# Grafo de conocimiento El Grafo de conocimiento muestra sus datos como cosas y los vínculos entre ellas: un cliente se vincula con pedidos, un pedido con productos, un producto con su proveedor. En vez de escribir joins, elija un cliente y vea todo lo conectado. ## La idea en palabras simples [#la-idea-en-palabras-simples] - Un **tipo** es una clase de cosa, como `customer` u `order`. Cada tipo es una de sus tablas con una columna clave, la columna que nombra cada fila. - Un **registro** es una cosa de ese tipo: una fila de la tabla. - Un **vínculo** une dos registros. Los vínculos salen de sus datos: - una columna que nombra otro registro, como `customer_id` en un pedido; - una tabla de pares, para vínculos de muchos a muchos como estudiantes y cursos; - o vínculos que Nexus encuentra por usted: registros en el mismo lugar o momento, registros parecidos, o dos registros que son la misma cosa real. - Un **grupo** es un conjunto de registros que se vinculan entre sí más que con el resto. Nada se copia. El grafo se apoya en sus tablas existentes, así que siempre muestra datos actuales, y cada persona ve solo los registros a los que tiene acceso. ## Antes de empezar [#antes-de-empezar] - Necesita tablas con una columna clave. Un tipo sin ella muestra que aún no tiene clave, y sus registros no se pueden explorar. Los tipos y vínculos se definen en código con el SDK. Una vez definidos, todos los que tienen acceso los exploran en la app. ## Explorar el grafo [#explorar-el-grafo] ### Abra el grafo [#abra-el-grafo] Vaya a y abra **Grafo de conocimiento**. El mapa muestra cada tipo con su número de registros. Algunos tipos los mantiene Nexus por usted. ### Elija un tipo [#elija-un-tipo] Seleccione un tipo para ver sus registros. Escriba en **Filtrar** para encontrar uno. ### Siga los vínculos [#siga-los-vínculos] Abra un registro para ver los registros conectados a él. Seleccione **Ver más** para ver más. La ruta de arriba muestra dónde está; seleccione **Todos los tipos** para empezar de nuevo. ```python title="browse_graph.py" from klarety import Nexus with Nexus.connect() as nx: overview = nx.knowledge_graph.overview() for node in overview["nodes"]: print(node["name"], node["rows"]) keys = nx.knowledge_graph.nodes("customer", starts_with="C-1") nearby = nx.knowledge_graph.around("customer", keys[0], hops=2) for node in nearby["nodes"]: print(node) paths = nx.knowledge_graph.path(("customer", keys[0]), ("supplier", "S-7"), hops=3) print(paths) ``` `around()` recorre hasta 3 saltos y devuelve primero los registros más cercanos; siga `next_cursor` para la página siguiente. Si `stopped_at_budget` es verdadero, el recorrido llegó al límite de su plan antes de terminar. `path()` encuentra los caminos más cortos entre dos registros, hasta 4 saltos. ## Buscar grupos [#buscar-grupos] En el panel **Grupos**, seleccione **Buscar grupos**. Cada grupo muestra cuántos registros tiene y su centro, el registro más vinculado dentro de él. Seleccione **Buscar de nuevo** cuando sus datos cambien. ```python for group in nx.knowledge_graph.communities(limit=10): print(group["size"], group["central_type"], group["central_key"]) print(nx.knowledge_graph.central(node_type="customer", limit=5)) ``` ## Definir tipos y vínculos [#definir-tipos-y-vínculos] Lea la definición actual, cámbiela y envíela con la versión que leyó. Si alguien la cambió entretanto, la escritura se rechaza: léala de nuevo y reintente. ```python title="define_graph.py" from klarety import Nexus with Nexus.connect() as nx: current = nx.knowledge_graph.definition() definition = { "nodes": [ {"name": "customer", "table": {"schema": "default", "table": "customers"}, "key": "customer_id"}, {"name": "order", "table": {"schema": "default", "table": "orders"}, "key": "order_id"}, ], "edges": [ { "name": "placed_by", "source": "order", "target": "customer", "held_by": {"kind": "column", "column": "customer_id"}, }, ], } nx.knowledge_graph.define(definition, version=current["version"]) for result in nx.knowledge_graph.check("customer", "order"): print(result) ``` `check()` prueba hasta 16 tipos contra una muestra de sus datos e informa claves que faltan o se repiten y vínculos que no apuntan a nada. Los vínculos encontrados se construyen en segundo plano: `build()` los pone en cola y `status()` dice cuándo se construyó cada uno. `define()` reemplaza solo su parte del grafo; las partes que no ve se conservan. Los tipos y vínculos los define en código un desarrollador. Cambie a la vista de desarrolladores para ver cómo. ## Qué puede salir mal [#qué-puede-salir-mal] Su tabla no tiene una columna clave declarada. Defina el tipo con su `key` en código. No hay tipos definidos a los que tenga acceso. Pida a un desarrollador que los defina, o a un administrador acceso a las tablas. Usted ve solo registros de tablas a las que tiene acceso. Los vínculos que encuentra Nexus se construyen en segundo plano y pueden estar en camino. ## Siguientes pasos [#siguientes-pasos] - [Trabajar con tablas](/docs/es/data/tables): declare claves y tablas vinculadas. - [Grafo de conocimiento desde código](/docs/es/developers/knowledge-graph): la referencia completa del SDK. - [Acceso a datos](/docs/es/data/data-access): quién ve qué registros.