# Trabajar con tablas
Cada tabla de Nexus tiene una página con sus filas, sus columnas y cada cambio que se le hizo.
## Antes de empezar [#antes-de-empezar]
- Usted ve las tablas a las que tiene acceso. Propietarios y administradores las ven todas.
- Editar filas requiere acceso para cambiar los datos de la tabla. Si una acción se rechaza, pida acceso a un propietario o administrador. Vea [Acceso a datos](/docs/es/data/data-access).
- Algunas tablas las administra Klarety. Su página dice **Klarety administra esta tabla, por lo que no se puede modificar**.
## Encontrar una tabla [#encontrar-una-tabla]
Vaya a y abra **Nexus Lakehouse**. La lista muestra el **Nombre**, el **Esquema** y el número de **Columnas** de cada tabla; escriba en **Buscar una tabla** para acotarla. La página de una tabla tiene tres pestañas: **Datos**, **Columnas** e **Historial**.
El menú junto a una tabla también ofrece **Consultar en el editor SQL** o copiar su nombre.
```python title="find_tables.py"
from klarety import Nexus
with Nexus.connect() as nx:
for table in nx.tables.list("default", search="order"):
print(table)
about = nx.tables.describe("orders", schema="default")
print(about)
```
`tables.list()` lee todas las páginas de resultados. `made_by="org"` deja las tablas creadas fuera de cualquier proyecto, y `made_by="system"` las que administra Klarety.
## Explorar y filtrar filas [#explorar-y-filtrar-filas]
La pestaña **Datos** muestra las filas. Una tabla grande muestra solo sus primeras filas y lo indica.
Seleccione **Filtrar filas**, elija una **Columna**, una **Condición** y un **Valor**, y luego **Aplicar**. Las condiciones son **es**, **no es**, **contiene**, **mayor que**, **menor que**, **está vacío** y **no está vacío**. Cada filtro es una etiqueta que puede quitar; **Borrar** los quita todos.
`tables.rows()` lee todas las filas, una página a la vez. Cada filtro se escribe `column:op:value`:
```python title="read_rows.py"
from klarety import Nexus
with Nexus.connect() as nx:
for row in nx.tables.rows(
"orders",
where=["country:eq:CO"],
order_by="ordered_at",
descending=True,
):
print(row)
```
Para traer muchas filas por clave en una sola lectura, use `in`: `where=["order_id:in:1,2,3"]`.
## Editar filas a mano [#editar-filas-a-mano]
Para muchas filas, cargue un archivo con **Actualizar filas por clave** (vea [Agregar datos](/docs/es/data/add-data)).
### Cambie lo que necesite [#cambie-lo-que-necesite]
En la pestaña **Datos**, edite una celda, seleccione **Agregar una fila**, o seleccione filas y elija **Eliminar**.
### Revise los cambios [#revise-los-cambios]
La barra inferior cuenta sus cambios pendientes. Seleccione **Descartar** para dejarlos.
### Guarde [#guarde]
Seleccione **Guardar**. Todos los cambios se guardan juntos como una nueva versión.
```python title="edit_rows.py"
from klarety import Nexus
from klarety.errors import ConflictError
with Nexus.connect() as nx:
try:
nx.tables.edit_rows(
"orders",
updated=[{"row": {"order_id": 3}, "values": {"amount": "75.00"}}],
added=[{"order_id": 9, "customer": "Lucía", "country": "CO", "amount": "40.00"}],
deleted=[{"order_id": 7}],
)
except ConflictError as changed:
print("Someone changed these rows first:", changed)
```
Los valores se dan como texto. Una llamada acepta hasta 500 cambios, guardados juntos. Cada valor en `row` debe seguir igual a lo guardado; si no, no se guarda nada y `ConflictError` nombra cada fila cambiada: lea de nuevo y reintente. Tras un tiempo de espera agotado, reenvíe con el mismo `write_id`; nunca se aplica dos veces.
## Describir columnas [#describir-columnas]
La pestaña **Columnas** lista cada columna con su tipo. Una columna que identifica una fila lleva la marca **clave**, y **Tablas vinculadas** muestra qué columnas coinciden con columnas de otras tablas. **Agregar descripción** escribe una línea sobre una columna, visible para quien lea la tabla.
```python
nx.tables.set_column_doc("orders", "amount", "Order total in Colombian pesos, tax included")
```
Una descripción vacía la borra.
## Agregar verificaciones de datos [#agregar-verificaciones-de-datos]
Una verificación de datos es una regla que debe cumplir cada fila cargada. Las filas que fallan se apartan y el resto se carga, así una exportación mala no llena la tabla de filas rotas.
| Regla en la app | `rule` en código | Ejemplo |
| --- | --- | --- |
| **nunca está vacío** | `not_null` | `customer` nunca está vacío |
| **está entre** | `range` | `amount` está entre 0 y 10000000 |
| **coincide con el patrón** | `pattern` | `country` coincide con el patrón `^[A-Z]{2}$` |
| **es uno de** | `one_of` | `status` es uno de `paid, refunded` |
### Abra las verificaciones [#abra-las-verificaciones]
En la página de la tabla, abra **Más** y elija **Verificaciones de datos**.
### Agregue una verificación [#agregue-una-verificación]
Elija una **Columna** y una **Regla**, complete los valores y seleccione **Agregar verificación**.
### Lea los resultados [#lea-los-resultados]
El panel muestra cuántas filas escribieron y apartaron las cargas recientes. **Quitar** elimina una verificación.
`tables.expect()` reemplaza las verificaciones de la tabla por la lista que envía. Una lista vacía las quita todas.
```python title="data_checks.py"
from klarety import Nexus
with Nexus.connect() as nx:
nx.tables.expect(
"orders",
[
{"column": "customer", "rule": "not_null"},
{"column": "amount", "rule": "range", "minimum": 0},
{"column": "status", "rule": "one_of", "values": ["paid", "refunded"]},
],
)
print(nx.tables.quality("orders"))
```
Una escritura que rompe una regla lanza `TableRuleError`, que nombra la regla. Corrija los datos en vez de reenviarlos igual.
## Ver el historial [#ver-el-historial]
La pestaña **Historial** lista cada versión, de la más reciente a la más antigua: cuántas filas se agregaron o si se actualizaron, el total de filas, quién hizo el cambio (**Usted**, **Un compañero de equipo**, **Studio** o **Una clave de API**) y cómo llegó (**mediante SDK**, **mediante un agente**, **desde un Studio** o **importación automática**). Seleccione **Ver anteriores** para ir más atrás.
Para deshacer, seleccione **Volver a esta versión**.
Se deshace cada cambio posterior a esa versión, también los de otras personas. Para deshacer solo los cambios de una fuente, use **Restaurar** en [Deshacer y restaurar](/docs/es/data/undo-and-restore).
```python
history = nx.tables.snapshots("orders")
authors = nx.tables.authors("orders", days=7)
```
`snapshots()` lista las versiones de la tabla; `authors()` muestra quién agregó y cambió filas, día a día.
## Eliminar una tabla [#eliminar-una-tabla]
Abra **Más** y elija **Eliminar tabla**. Podrá restaurarla durante un tiempo.
```python
nx.tables.delete("orders_old")
print(nx.tables.deleted())
nx.tables.restore("orders_old")
```
Una tabla eliminada se puede restaurar mientras su plan conserve los elementos eliminados.
## Siguientes pasos [#siguientes-pasos]
- [Consultar con SQL](/docs/es/data/sql-editor): pregunte a una tabla con Spark SQL.
- [Deshacer y restaurar](/docs/es/data/undo-and-restore): vuelva a una versión anterior.
- [Grafo de conocimiento](/docs/es/data/knowledge-graph): vea cómo se vinculan sus tablas.