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