Qué es NSADALoader
nsadaloader carga datos desde ficheros JSON, CSV, TSV y XML hacia bases de datos Adabas. Inserta registros nuevos (STORE, sin campo isn) y actualiza existentes (UPDATE, con campo isn) desde un único fichero que puede abarcar varios archivos y bases de datos. Soporta campos MU (arrays), grupos PE (arrays de objetos) y notación de índices (CAMPO[n], CAMPO[n,m]), además de exportar (-output) y generar plantillas (-describe).
Usos ideales:
- Migración de datos desde sistemas externos hacia Adabas.
- Carga inicial de datos maestros y ETL automatizados.
- Actualización masiva de registros (por ISN o por índices MU/PE).
- Exportación, edición y recarga (flujo
-output→ editar →-input).
Los dbid, fnr, campos y datos de los ejemplos son ficticios.
Casos de uso
1. Carga inicial de clientes (STORE)
Insertar tres clientes nuevos desde un JSON autocontenido.
nsadaloader -input /tmp/carga/clientes_nuevos.json
{ "dbid": 50, "fnr": 15, "records": [{ "AA": "CLI001", "AB": "EMPRESA EJEMPLO" }] }
2. Actualización masiva por ISN (UPDATE)
Actualizar nombres y salarios de registros existentes identificados por su ISN.
nsadaloader -input /tmp/carga/actualizar_salarios.json
3. Migración multi-fichero en una sola pasada
Cargar clientes (fichero 15) y pedidos con grupo PE (fichero 16) de la misma base de datos desde un único fichero.
nsadaloader -input /tmp/carga/migracion_completa.json -batch 100
4. Carga desde CSV con esquema DDM
Cargar facturas desde CSV con conversión de tipos según el DDM (fechas, empaquetados, PE/MU).
nsadaloader -dbid 50 -fnr 20 -config /tmp/cfg/ddm_facturas.json -input /tmp/carga/facturas.csv
5. Exportar, editar y recargar
Exportar con ISN, corregir en un editor y recargar: los registros con isn se actualizan, sin isn se insertan.
nsadaloader -dbid 50 -fnr 15 -output /tmp/carga/empleados_export.json
nsadaloader -input /tmp/carga/empleados_export.json
Referencia de comandos
Carga (STORE/UPDATE)
| Parámetro | Descripción | Requerido |
|---|---|---|
-input | Fichero de entrada con los registros (JSON, CSV, TSV o XML) | Sin -describe ni -output |
-dbid | ID de la base de datos Adabas (sobrescribe el valor del fichero) | Según formato (sí en legacy/plano) |
-fnr | Número del fichero Adabas (sobrescribe el valor del fichero) | Según formato (sí en legacy/plano) |
-ddmname | Nombre DDM desde el fichero de configuración | Según formato |
-config | Fichero JSON de configuración con definiciones DDM (generado por nsddm) | Si se usa -ddmname (recomendado con CSV/TSV/XML) |
-format | Formato de entrada: json, csv, tsv o xml (por defecto se deduce de la extensión) | No |
-batch | Registros por transacción (por defecto 100; 0 = una sola transacción) | No |
Exportación
| Parámetro | Descripción | Requerido |
|---|---|---|
-output | Fichero JSON de salida para exportar registros desde Adabas (compatible con -input) | Si se exporta |
-limit | Máximo de registros a exportar (0 = sin límite) | No |
Plantillas y lectura (-describe)
| Parámetro | Descripción | Requerido |
|---|---|---|
-describe | Describe la estructura del fichero y genera una plantilla JSON editable (conexión de solo lectura) | No |
-isn | ISN a leer, solo con -describe (plantilla con datos reales) | No |
Comunes y licencia
| Parámetro | Descripción | Requerido |
|---|---|---|
-silence | Modo silencioso | No |
-debug | Log detallado | No |
-etid | ID de transacción externa (ETID) | No |
-version | Muestra la versión | No |
-license | Ruta al fichero license.key firmado (por defecto: resolución automática) | No |
-license-fingerprint | Imprime la huella de esta máquina (para emitir una licencia) y sale | No |
Ejemplos comentados
# 1. Carga básica autocontenida (STORE sin isn / UPDATE con isn)
nsadaloader -input /tmp/carga/carga_simple.json
# 2. Transacciones cada 50 registros (recomendado en cargas grandes)
nsadaloader -input /tmp/carga/lote_50000.json -batch 50
# 3. Plantilla vacía, edición y carga (flujo -describe)
nsadaloader -dbid 50 -fnr 15 -describe > /tmp/carga/plantilla.json
nsadaloader -input /tmp/carga/plantilla.json
# 4. Leer un registro real como plantilla (ISN 42) y exportar muestra
nsadaloader -dbid 50 -fnr 15 -describe -isn 42 > /tmp/carga/registro42.json
nsadaloader -dbid 50 -fnr 16 -output /tmp/carga/muestra.json -limit 50
# 5. Carga CSV con DDM y carga XML plana con flags CLI
nsadaloader -dbid 50 -fnr 20 -config /tmp/cfg/ddm_facturas.json -input /tmp/carga/facturas.csv
nsadaloader -dbid 50 -fnr 20 -config /tmp/cfg/ddm_facturas.json -input /tmp/carga/facturas_planas.xml
# 6. Huella de máquina y carga con licencia explícita
nsadaloader -license-fingerprint
nsadaloader -license /opt/ns/licenses/nsadaloader.key -input /tmp/carga/registros.json
Códigos de retorno
| Código | Significado |
|---|---|
0 | Éxito |
1 | Error en parámetros |
2 | Error en el fichero de configuración o de entrada |
3 | Error de conexión |
4 | Error durante la carga |
Una licencia inválida (app equivocada, máquina distinta, caducada o corrupta) bloquea la ejecución con código distinto de cero.
Preguntas frecuentes
¿Cómo distingue STORE de UPDATE? Por el campo isn: sin isn inserta (Adabas asigna ISN nuevo); con isn actualiza ese registro. En CSV/TSV/XML la columna o elemento isn equivale al campo JSON. Para duplicar registros exportados, elimine el isn.
¿Necesito -config? Solo si usa -ddmname o nombres DDM en los datos. Sin -config, el fichero debe usar nombres cortos (AA, AB). Con CSV/TSV/XML se recomienda -config para que fechas, empaquetados y numéricos se conviertan según el tipo real del campo.
¿Cómo cargo campos MU y PE? MU como arrays ("AG": ["a@x.com", "b@x.com"]), PE como arrays de objetos ("AD": [{"AE": "...", "AF": "..."}]). Para actualizar ocurrencias sueltas use índices 1-based: AG[2], AE[1], AJ[1,2] (PE n, MU m). En CSV la notación es BC[1], AE[1].AF, AQ[1].AU[2]; en XML, elementos repetidos.
¿Qué tamaño de -batch uso? El defecto (100) vale para la mayoría de casos; en cargas de más de 10.000 registros use entre 50 y 500. Con -batch 0 todo va en una sola transacción (más rápido, pero más riesgo ante un fallo). Si un registro falla, la utilidad continúa con el siguiente.