# Cargar datos
La carga convierte un archivo en filas de una tabla de Nexus. Nexus lee el archivo, deduce columnas y tipos, limpia los valores y escribe una tabla Apache Iceberg. Puede ver primero el resultado, elegir cómo se agregan las filas y seguir la carga.
## Antes de empezar [#antes-de-empezar]
- El **Acceso** de su clave permite escribir en el esquema de destino.
- El espacio de trabajo tiene créditos y espacio para guardar los datos.
- El archivo es de un tipo que Nexus lee, como CSV, TSV, Parquet, JSON, JSON Lines, Excel, GeoJSON, GeoPackage o shapefile.
## Cargue un archivo en una tabla [#cargue-un-archivo-en-una-tabla]
### Véalo antes [#véalo-antes]
`ingest_preview()` lee una muestra e informa lo que encontró, sin escribir nada:
```python
from klarety import Nexus
with Nexus.connect() as nexus:
preview = nexus.ingest_preview("sales_2026.csv", into="sales")
print(preview["source_format"], preview["rows_sampled"])
for column in preview["columns"]:
print(column)
```
Revise los nombres y tipos de columna. Si uno está mal, corrija el archivo primero.
### Inicie la carga [#inicie-la-carga]
```python
run = nexus.ingest("sales_2026.csv", into="sales", key=["order_id"])
print(run.run_id, run.state)
```
Una ruta local se sube por partes, así que los archivos más grandes que la memoria no son problema. `ingest()` devuelve un `IngestRun` en cuanto se acepta la carga.
### Sígala hasta el final [#sígala-hasta-el-final]
```python
while run.state in ("accepted", "running"):
time.sleep(5)
run = nexus.ingest_status(run.run_id)
print("Finished:", run.state)
```
Una carga termina como `succeeded`, `failed` o `cancelled`.
### Revise las filas [#revise-las-filas]
```python
print(nexus.sql("SELECT COUNT(*) AS n FROM sales").rows)
```
El script de abajo reúne los cuatro pasos.
### El script completo [#el-script-completo]
```python title="load_sales.py"
import sys
import time
from klarety import InsufficientCreditsError, Nexus, RefusedError, ServiceError
PATH, TABLE = "sales_2026.csv", "sales"
with Nexus.connect() as nexus:
try:
run = nexus.ingest(PATH, into=TABLE, key=["order_id"])
while run.state in ("accepted", "running"):
time.sleep(5)
run = nexus.ingest_status(run.run_id)
except FileNotFoundError:
sys.exit(f"{PATH} is neither a file nor a uri")
except InsufficientCreditsError:
sys.exit("The workspace is out of credits")
except RefusedError as refused:
sys.exit(f"Load refused: {refused}")
except ServiceError as failed:
sys.exit(f"Load failed on our side, try again: {failed}")
if run.state != "succeeded":
sys.exit(f"Load ended as {run.state}")
print(nexus.sql(f"SELECT COUNT(*) AS n FROM {TABLE}").rows[0]["n"], "rows")
```
## Elija cómo se agregan las filas [#elija-cómo-se-agregan-las-filas]
`mode` decide qué pasa cuando la tabla ya tiene filas:
| Modo | Qué hace |
| --- | --- |
| `auto` (por defecto) | Una primera carga crea la tabla. Después, con `key` actualiza las filas cuya clave existe y agrega el resto; sin clave agrega solo las filas que aún no están. |
| `append` | Agrega todas las filas, aunque la misma fila ya esté. |
| `upsert` | Actualiza las filas cuya `key` existe y agrega el resto. Indique una `key`. |
| `replace` | Reemplaza todas las filas de la tabla por las del archivo. |
`key` nombra las columnas que identifican una fila, como `["order_id"]`. Otros parámetros:
- `into`: la tabla en la que se carga.
- `schema`: el esquema de la tabla, `default` salvo que nombre otro.
- `force`: vuelve a cargar un archivo ya cargado en esta tabla. Sin él, un archivo se carga una sola vez por tabla, así que repetir su script no hace daño.
## Cargue desde otros lugares [#cargue-desde-otros-lugares]
```python
# A file already in a folder in Object Storage: every file directly in it
run = nexus.folders.at("exports/daily").load(into="daily_exports", mode="append")
# Chosen files by their IDs
run = nexus.files.load(["file-id-1", "file-id-2"], into="daily_exports")
# A file in an Amazon S3 bucket you connected
result = nexus.connections.read(connection_id, "exports/2026-11.parquet", into="exports")
```
Para cargar cada archivo nuevo al llegar a una carpeta, use `folder.watch(into="table")`. Vea [Archivos y carpetas](/docs/es/developers/files) y [Conexiones](/docs/es/developers/connections).
## Cargue un DataFrame de Spark [#cargue-un-dataframe-de-spark]
Si preparó datos en una [sesión de Spark](/docs/es/developers/spark), cargue el DataFrame directamente:
```python
run = nexus.ingest_frame(frame, table="customer_summary", key=["customer"])
```
## Qué puede salir mal [#qué-puede-salir-mal]
| Problema | Causa | Solución |
| --- | --- | --- |
| `FileNotFoundError` | La ruta no es un archivo ni una uri. | Revise la ruta. |
| `RefusedError` | No tiene acceso de escritura, o el archivo supera lo que su plan permite por carga. El mensaje dice cuál. | Use una clave con acceso, o conecte el bucket donde está el archivo y léalo desde allí. |
| La carga termina en `failed` | El archivo no se pudo leer. | Véalo antes, corríjalo y cárguelo de nuevo. |
| No se cargó nada nuevo | El mismo archivo ya se cargó en esta tabla. | Pase `force=True` si quiere cargarlo de nuevo. |
## Próximos pasos [#próximos-pasos]
- [Tablas y esquemas](/docs/es/developers/tables) para definir reglas y describir columnas.
- [Archivos y carpetas](/docs/es/developers/files) para guardar archivos y vigilar carpetas.
- [CLI](/docs/es/developers/cli) para cargar un archivo desde su terminal con `klarety ingest`.