Controladores

Controlador CSV

Esta documentación explica la implementación del controlador CSV y cómo los parámetros de conexión se corresponden con los campos de la interfaz de usuario en la aplicación Gigantic.

Parámetros de Conexión

Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
Ruta del Directoriodir en la configuración csvLa ruta del directorio donde se almacenan los archivos CSVDirectorio de trabajo actual
Extensión del Archivoextension en la configuración csvLa extensión del archivo para archivos CSVNocsv
Encabezadosheaders en la configuración csvSi los archivos CSV tienen encabezadosNotrue
Delimitadordelimiter en la configuración csvCarácter usado para separar campos en archivos CSVNo, (coma)
Entrecomilladoquoted en la configuración csvSi los campos están encerrados entre comillasNotrue
Carácter de Comillasquote en la configuración csvCarácter usado para entrecomillar camposNo" (comilla doble)

Detalles Técnicos

La implementación del controlador CSV utiliza operaciones del sistema de archivos integradas en Node.js con la biblioteca fast-csv para parseo.

Aspectos técnicos clave:

  • Trata cada archivo CSV en un directorio como una colección/tabla separada
  • Utiliza streams para lectura y escritura eficiente de archivos CSV grandes
  • Crea automáticamente el directorio si no existe
  • Convierte filas CSV a objetos JSON usando nombres de encabezado como claves
  • Maneja serialización de objetos convirtiéndolos a cadenas JSON
  • No se requiere autenticación para archivos CSV (acceso al sistema de archivos)

Proceso de conexión:

  1. El controlador toma una ruta de directorio como entrada
  2. Escanea el directorio en busca de archivos con la extensión especificada
  3. Cada archivo se convierte en una colección desde la que se puede leer o a la que se puede escribir

Proceso de lectura:

  1. Crea un stream legible desde el archivo CSV
  2. Utiliza el parser fast-csv para convertir datos CSV a arrays
  3. Transforma arrays a objetos JSON usando encabezados como claves

Proceso de escritura:

  1. Crea un stream escribible a un archivo CSV
  2. Utiliza el escritor fast-csv para convertir objetos JSON de vuelta al formato CSV
  3. Maneja el entrecomillado y escape apropiado de campos

Opciones de Autenticación

Tipo de AutenticaciónMapeo UIDescripción
NingunaÚnica opción disponibleNo se necesita autenticación para archivos CSV

Nota: El controlador CSV no requiere autenticación ya que trabaja directamente con archivos en el sistema de archivos.

Endpoints de API Utilizados

Las conexiones CSV se utilizan principalmente en:

  • Creación de Tap (descubrimiento de fuente de datos desde archivos CSV)
  • Creación de Sink (destino de datos para datos anonimizados como archivos CSV)
  • Ejecución de Pipeline (extracción de datos desde y carga hacia archivos CSV)

Dependencia de Controlador Node.js

El controlador CSV depende de la biblioteca Node.js fast-csv:

  • Biblioteca: fast-csv
  • Propósito: Parseo y formateo rápido de CSV
  • Características: API de streaming, manejo de encabezados, entrecomillado, escape

Parámetros Personalizados

El controlador CSV soporta parámetros personalizados adicionales que pueden especificarse en formato YAML para ajustar finamente el parseo CSV, formateo y comportamiento de manejo de archivos.

Parámetros de Archivo y Directorio

# Parámetros básicos
dir: "/ruta/a/archivos/csv"
extension: "csv"
 
# Opciones de Creación de Archivos
createDir: true  # Crear automáticamente directorio si no existe
fileMode: "0644"  # Permisos de archivo para archivos CSV creados

Parámetros de Parseo

# Opciones de Encabezado
headers: true        # Si los archivos CSV tienen encabezados
renameHeaders: false  # Renombrar encabezados para evitar duplicados
strictColumnHandling: false  # Aplicar estrictamente conteo consistente de columnas
 
# Delimitador y Formateo
delimiter: ","       # Carácter delimitador de campos
quote: "\""         # Carácter de comillas
escape: "\""        # Carácter de escape para comillas
 
# Manejo de Datos
trim: true          # Eliminar espacios en blanco de campos
rtrim: false        # Eliminar espacios en blanco de la derecha de campos
ltrim: false        # Eliminar espacios en blanco de la izquierda de campos
ignoreEmpty: true   # Ignorar filas vacías
discardUnmappedColumns: false  # Descartar columnas no presentes en encabezados proporcionados
 
# Manejo de Comentarios
comment: "#"        # Carácter de comentario para ignorar líneas
 
# Validación
validate: false     # Habilitar validación de filas

Parámetros de Formateo

# Opciones de Encabezado
writeHeaders: true   # Incluir encabezados en archivos de salida
 
# Delimitador y Formateo
delimiter: ","       # Carácter delimitador de campos
quote: "\""         # Carácter de comillas
escape: "\""        # Carácter de escape para comillas
rowDelimiter: "\n"  # Carácter delimitador de filas
 
# Comportamiento de Entrecomillado
quoted: true        # Entrecomillar todos los campos
quotedEmpty: true   # Entrecomillar campos vacíos
quotedString: false  # Entrecomillar campos de tipo string
 
# Manejo de Datos
includeEndRowDelimiter: false  # Incluir delimitador al final del archivo
writeBOM: false     # Escribir Marca de Orden de Bytes (BOM) para UTF-8
transform: {}       # Función de transformación para datos

Parámetros de Streaming

# Opciones de Stream
objectMode: true     # Habilitar modo objeto para streams
highWaterMark: 128  # Tamaño de buffer para streaming
 
# Procesamiento por Lotes
batchSize: 1000     # Número de filas a procesar en lotes

Ejemplos de Configuraciones

Configuración Básica

dir: "/datos/archivos_csv"
extension: "csv"
headers: true
delimiter: ","
quote: "\""

Configuración Avanzada de Parseo

dir: "/datos/entrada"
extension: "txt"
headers: ["id", "nombre", "email", "edad"]
delimiter: "|"
quote: "\""
escape: "\\"
trim: true
ignoreEmpty: true
discardUnmappedColumns: true
comment: "#"
strictColumnHandling: true
highWaterMark: 256
batchSize: 2000

Configuración de Formateo

dir: "/datos/salida"
extension: "csv"
writeHeaders: true
delimiter: ","
quote: "\""
quoted: true
quotedEmpty: true
includeEndRowDelimiter: true
writeBOM: true
rowDelimiter: "\n"
objectMode: true
fileMode: "0644"

Configuración Delimitada por Tabuladores

dir: "/datos/archivos_tsv"
extension: "tsv"
headers: true
delimiter: "\t"  # Carácter tabulador
quote: "\""
trim: true
ignoreEmpty: true