# 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.