← Todas las utilidades

NSDdm

Versión 26.1 (build 215) Ver la PPT
Índice

Presentación comercial: PDF (ES) · PPTX (ES) · PDF (EN) · PPTX (EN)

Qué es NSDdm

nsddm lee los Data Definition Modules (ficheros .NSD) de un directorio fuser de Software AG Natural y los convierte en un JSON estructurado: metadatos del fichero, campos con formato/longitud/descriptores, índices y relaciones entre DDMs. Trabaja en dos modos excluyentes:

  • Modo generación: escanea el fuser y produce el JSON (-fuserdir obligatorio).
  • Modo consulta: interroga un JSON ya generado sin tocar el fuser (-input obligatorio).

Los nombres de ficheros y campos de los ejemplos son ficticios.

Casos de uso

1. Inventario vivo de DDMs

Generar cada noche el JSON de la librería SYSTEM y versionarlo en git: cualquier alta, baja o cambio de campo queda registrado en el historial.

nsddm -fuserdir /opt/softwareag/fuser -lib SYSTEM -outfile ddm-system.json
git add ddm-system.json && git commit -m "inventario DDM $(date +%F)"

2. Preparar una migración Adabas

Antes de migrar, listar todos los ficheros con su DBID, número y longitud para dimensionar el destino y detectar rarezas (DB 0, longitudes extremas).

nsddm -fuserdir /opt/softwareag/fuser -lib SYSTEM -outfile full.json
nsddm -input full.json -list number

3. Triaje de data masking con NSAdaMask

Localizar los campos con datos personales (DNI, IBAN, email, teléfono…) para anonimizarlos después con nsadamask. La categoría la pone la IA (-ia) o la heurística por nombre.

nsddm -input full.json -datamask

Salida típica:

[228] IV2-DATOECON-COM    NIF-TOMADOR           A  14  conf=0.95  dni
[123] IV2-CARGAS-AUT      NOMBRE-PERSONA        A  50  conf=0.95  nombre
[108] IV2-DATORECI-T      NUM-CUENTA-BCO        N  16  conf=0.95  iban

4. Análisis de impacto de un cambio

Va a cambiar el campo COD-PAIS: averigüe en qué ficheros aparece y cuál es el maestro que lo define.

nsddm -input full.json -search COD-PAIS
nsddm -input full.json -schema COD-PAIS -relations

5. Documentación navegable del modelo de datos

Combinar -schema por fichero con la columna REL (fichero padre) para dibujar el mapa de maestros y movimientos sin abrir Natural.

for f in 108 1100 228; do
  nsddm -input full.json -schema $f
done

Referencia de comandos

Modo generación

ParámetroDescripciónRequerido
-fuserdirRuta al directorio fuser de Natural (busca .NSD en <fuserdir>/<lib>/SRC/ o <fuserdir>/SRC/)Sí
-libLibrería = subdirectorio bajo fuserdir (p. ej. SYSTEM). Por defecto SYSTEMNo
-outfileFichero JSON de salida (stdout si se omite)No
-filesFiltro por número o rango: 120, (100,200,300), (10-20,100-300), (10-20,50,100-300)No
-dbidFiltro por base de datos. "", 000, 0000 y 0 equivalen a DB 0No
-default-dbidDBID asumido para ficheros cuyo NSD no trae DBNo
-iaEnriquece con IA: descripciones, datos sensibles y relaciones (requiere -ai-key o AI_API_KEY)No
-ai-endpointEndpoint OpenAI-compatible (por defecto OpenRouter)No
-ai-keyClave de API (o variable AI_API_KEY)Con -ia
-ai-modelModelo (por defecto deepseek/deepseek-chat)No
-ai-cacheFichero de caché de respuestas IA (por defecto ai_cache.json)No

Modo consulta (-input obligatorio, incompatible con los de generación)

ParámetroDescripción
-inputJSON generado previamente
-schemaEsquema en columnas de un DDM (nombre completo/parcial o nº de fichero)
-relationsCon -schema: detalle de relaciones de cada campo (sin -schema no hace nada)
-datamaskCampos con datos sensibles: fichero, campo, formato, longitud, confianza y categoría
-searchBúsqueda parcial insensible a mayúsculas en el nombre del campo
-fnrDDMs que contienen ese número de fichero
-listFicheros ordenados por nombre de DDM (por defecto) o por número (-list number)

Comunes

ParámetroDescripción
-versionVersión, build, fecha, host y plataforma
-licenseRuta del license.key (por defecto: resolución automática)

Incompatibilidades

  • -input con flags de generación (-fuserdir, -lib, -files, -dbid, -ia…): se ignora la generación.
  • -relations sin -schema: sin efecto.
  • -ia sin -ai-key ni AI_API_KEY: error.

Ejemplos comentados

# 1. Extracción básica a stdout
nsddm -fuserdir /opt/softwareag/fuser -lib SYSTEM

# 2. Solo el fichero 120 de CUSTOMER, guardado
nsddm -fuserdir /opt/softwareag/fuser -lib CUSTOMER -files 120 -outfile c120.json

# 3. Rango + DBID combinados (comillas para que el shell no toque los paréntesis)
nsddm -fuserdir /opt/softwareag/fuser -lib ORDERS -dbid 50 \
  -files '(10-20,100-300)' -outfile orders.json

# 4. Enriquecido con IA (descripciones + sensibles + relaciones)
export AI_API_KEY="su-clave"
nsddm -fuserdir /opt/softwareag/fuser -lib SYSTEM -ia -outfile full.json
# La 2ª ejecución sobre el mismo fuser es casi instantánea (caché ai_cache.json)

# 5. Esquema de un DDM y sus relaciones
nsddm -input full.json -schema IV2-POLIZA-T
nsddm -input full.json -schema 108 -relations

# 6. ¿Dónde se usa el campo NUM-CUENTA-BCO?
nsddm -input full.json -search CUENTA

Formato de salida (resumen)

Cada fichero aporta metadata (source_file, ddm_name, db, file_number, record_type, total_fields, total_length), fields (nivel, nombre corto AA, field_name, format, length, descriptor, attribute —MU/PE/GR/SD—, remark, fields hijos, source_fields, comment, más description, mask_category, mask_confidence si hubo IA) e index.

La columna REL de -schema indica el fichero padre (maestro) de la relación many_to_one —el DDM que define el dato— o ←N si el campo es padre referenciado por N ficheros. La detección del padre es determinista (nombre del concepto + descriptor + prefijo de maestro FU-/MA-/TAB-); los campos genéricos (FECHA, IMPORTE…) no generan relación.

Códigos de retorno y entorno

CódigoSignificado
0Éxito
1Error en parámetros
2Error de sistema de ficheros (directorio no encontrado, etc.)

El progreso va por stderr; las advertencias no interrumpen (archivos no procesables se saltan). Variables: AI_API_KEY (clave IA), LANG (idioma de mensajes).

Preguntas frecuentes

¿Puedo consultar sin acceso al fuser? Sí: genere una vez el JSON y distribuya el fichero; -input no toca el fuser.

¿Los remark con acentos salen rotos? No: los trozos de ~30 caracteres del NSD se unen y se normaliza ISO-8859-1 → UTF-8.

¿-datamask necesita IA? No: sin -ia aplica una heurística determinista por nombre (NIF, NOMBRE, IBAN, TELEFONO, EMAIL, TARJETA, IP…); con -ia la clasifica el modelo con confianza.

¿Qué DB tienen los ficheros sin campo DB? Se normalizan a 0; -dbid 0 los incluye. Con -default-dbid puede asumir otro valor al generar.

También disponible en: en