Controladores

Controlador File Storage

Esta documentación explica la implementación del controlador File Storage y cómo los parámetros de conexión se corresponden con los campos de la interfaz de usuario en la aplicación Gigantic. El controlador lee y escribe ficheros de datos (CSV, JSON, YAML, XML, Excel, Parquet y EDI) guardados en una carpeta. La carpeta puede estar en el disco local, en un servidor remoto por SSH/SFTP, en Google Drive o en SharePoint.

File Storage aparece en el grupo Archivos y almacenamiento del selector de drivers. Los proveedores Disco local y SSH / SFTP están disponibles en el plan de licencia open source; los proveedores Google Drive y SharePoint requieren el plan Cloud.

             ┌──────────────┐
             │ File Storage │   un tap o sink = una carpeta
             └──────┬───────┘
    ┌───────────────┼───────────────┬──────────────────┐
    v               v               v                  v
Disco local    SSH / SFTP     Google Drive        SharePoint
(ruta)         (ruta remota)  (ID de carpeta)     (ID del elemento carpeta)
    │               │               │                  │
    └───────────────┴───────┬───────┴──────────────────┘
                            v
      formato según la extensión: .csv .json .yaml/.yml .xml
                                  .xlsx/.xls .parquet .edi
                            v
               un fichero (u hoja) = una entidad

File Storage frente al controlador CSV

File StorageCSV
Selector de driversSí, en Archivos y almacenamientoNo. Se mantiene para taps y sinks existentes
FormatosCSV, JSON, YAML, XML, Excel, Parquet, EDISolo CSV
UbicaciónDisco local, SSH/SFTP, Google Drive, SharePointSolo disco local
Opciones CSVFijas: separador coma, la primera fila es la cabeceraSeparador, comillas, cabeceras y otras opciones en Parámetros personalizados
EscrituraEscribe un fichero nuevo por entidad y ejecución, con el nombre que indican las opciones de Nombre de los archivosEscribe en el fichero de la entidad
Modos de escrituraTruncate y Drop sustituyen los ficheros que escribieron ejecuciones anteriores para la entidadVer el controlador CSV

Parámetros de Conexión

Los campos de la sección Conexión dependen del Proveedor.

Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
ProveedorproviderType (se envía como owner)Dónde están los ficheros: Disco local (local), Google Drive (gdrive), SharePoint (sharepoint) o SSH / SFTP (ssh)SíDisco local
RutabasePath (se envía como host)Carpeta con los ficheros. Con SSH / SFTP, la carpeta del servidor remotoSíNinguno (debe especificarse)
ID de carpetabasePath (se envía como host)ID de la carpeta de Google Drive o ID del elemento carpeta de SharePoint (sustituye a Ruta)SíNinguno (debe especificarse)
Patrón de archivosfilePattern (se envía como dbSchema)Solo Disco local. Solo se usan los ficheros que cumplen el patrón, por ejemplo *.csvNoTodos los ficheros admitidos

Google Drive

Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
El Tipo de la sección Autenticación elige cómo entra el controlador en Google Drive: OAuth2 (por defecto) o Cuenta de servicio.
Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
ID de cliente (Client ID)clientId (se envía como database)Client ID de OAuth, por ejemplo 123456789-xxx.apps.googleusercontent.com. Solo OAuth2Sí, con OAuth2Ninguno
Secreto de cliente (Client Secret)clientSecret (se envía como dbSchema)Client secret de OAuth, por ejemplo GOCSPX-.... Solo OAuth2Sí, con OAuth2Ninguno
Token de refresco (Refresh Token)refreshToken (se envía como container)Refresh token de OAuth de la cuenta propietaria de la carpeta o con acceso a ella. Solo OAuth2Sí, con OAuth2Ninguno
Clave de la cuenta de servicioserviceAccountKey (se envía como privateKey de la autenticación)Clave JSON de la cuenta de servicio. Solo Cuenta de servicio. Se guarda cifradaSí, con Cuenta de servicioNinguno

Con Cuenta de servicio los campos de OAuth2 se ocultan y no son obligatorios. La carpeta debe estar compartida con la cuenta de servicio.

SharePoint

Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
ID de cliente (Client ID)clientId (se envía como database)ID de aplicación (cliente) de la app de Microsoft Entra IDSíNinguno
Secreto de cliente (Client Secret)clientSecret (se envía como dbSchema)Secreto de cliente de la appSíNinguno
ID del tenant (Tenant ID)tenantId (se envía como container)ID de directorio (tenant)SíNinguno
ID del sitio (Site ID)siteId (se envía como domain de la autenticación)ID del sitio de SharePoint, por ejemplo contoso.sharepoint.com,guid1,guid2SíNinguno

El controlador obtiene un token de aplicación (client credentials, scope https://graph.microsoft.com/.default) y usa Microsoft Graph, así que la app necesita permisos de Graph para leer y escribir ficheros en el sitio.

Un siteId en Parámetros personalizados sustituye al campo ID del sitio.

SSH / SFTP

Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
Host SSHsshHost (se envía como database)Nombre de host o dirección IP del servidor SFTPNolocalhost
Puerto SSHsshPort (se envía como port)Puerto SSHNo22
Nombre de usuariosshUser (se envía como container)Usuario SSHNoUsuario actual
Ruta del archivo de clavesshKeyPath (se envía como dbSchema)Fichero de clave privada en el servidor de Gigantics. ~ se expande. Se oculta con la autenticación Clave privadaNo~/.ssh/id_rsa, ~/.ssh/id_ed25519 o ~/.ssh/id_ecdsa

El Tipo de la sección Autenticación elige cómo entra el controlador:

Tipo de AutenticaciónCamposDescripción
Archivo de claveNingunoLa Ruta del archivo de clave, o la primera clave por defecto que exista
ContraseñaContraseñaContraseña SSH del Nombre de usuario. Se guarda cifrada
Clave privadaClave privada, Frase de accesoContenido de la clave privada y su frase de paso, si la tiene. Las dos se guardan cifradas

Si no hay clave ni contraseña, la conexión falla con SSH authentication required. Se usan todos los ficheros de la ruta remota: para usar solo algunos, indica filePattern en Parámetros personalizados.

Nombre de los archivos (solo sinks)

Campo UIImplementación TécnicaDescripciónRequeridoValor por Defecto
Nombres de los archivos de salidafileNaming (se guarda en el prefix del sink)Cómo se nombran los ficheros escritos: Añadir marca de tiempo (timestamp), Mantener el nombre original (original) o Patrón personalizado (custom)NoAñadir marca de tiempo
PatrónfileNamingPatternPatrón propio. Solo aparece con Patrón personalizadoSí, con Patrón personalizado{entity}_{date}{ext}

Variables del patrón:

VariableValor
{entity}Nombre de la entidad, con . sustituido por _
{name}Nombre de la entidad tal cual
{date}Fecha, YYYY-MM-DD
{timestamp}Fecha y hora, YYYY-MM-DD_HH-mm-ss (UTC)
{ext}Extensión con punto, por ejemplo .csv
{format}Formato, por ejemplo csv

Ejemplos para la entidad Filiale leída de Filiale.csv:

Nombres de los archivos de salidaFichero escrito
Añadir marca de tiempoFiliale_2026-04-27_10-30-00.csv
Mantener el nombre originalFiliale.csv
Patrón personalizado {entity}_{date}{ext}Filiale_2026-04-27.csv

Un Patrón personalizado vacío se comporta como Añadir marca de tiempo.

Detalles Técnicos

Ficheros y entidades

  • Cada fichero de la carpeta es una entidad. El nombre de la entidad es el nombre del fichero sin la extensión (customers.csv pasa a ser customers)
  • Si dos ficheros tienen el mismo nombre con distinta extensión (customers.csv y customers.json), las dos entidades conservan la extensión en el nombre
  • Solo se lee el primer nivel de la carpeta. Las subcarpetas se ignoran: usa un tap por carpeta
  • Se ignoran los ficheros con extensión no admitida, sin campos o que no se pueden leer
  • La descripción de la entidad es <FORMATO> file: <nombre del fichero>
  • Patrón de archivos admite * (cualquier carácter salvo /) y ** (cualquier carácter)
  • Las condiciones where, el límite y el offset los aplica Gigantics al leer el fichero (ver Filtros aplicados por Gigantics)

Formatos

El formato se elige por la extensión del fichero.

ExtensiónFormatoLecturaEscritura
.csvCSVSeparador coma. La primera fila es la cabecera. Todos los campos son textoFila de cabecera; cabeceras y valores entre comillas
.jsonJSONUn array JSON de objetos. Si el fichero empieza por {, se lee como JSON Lines (un objeto por línea; las líneas no válidas se ignoran). Los tipos salen del primer objetoArray JSON con un objeto por línea
.yaml, .ymlYAMLUna lista da un registro por elemento; un objeto da un único registro. Los tipos salen del primer elementoLista YAML
.xmlXMLLos registros son los elementos hijo repetidos bajo el elemento raíz. Los atributos pasan a ser campos y los hijos que solo tienen texto pasan a ser valoresRaíz <data> con un <record> por registro
.xlsx, .xlsExcelLa fila 1 es la cabecera (las cabeceras vacías pasan a ser column_N). Todos los campos son texto. Ver la nota sobre libros con varias hojas más abajoUn libro .xlsx por entidad, con una hoja llamada Data. Las hojas de un libro con varias hojas se vuelven a escribir en un solo libro, con los nombres de las hojas de origen
.parquetParquetLos tipos salen del esquema ParquetColumnas opcionales con tipo, según los tipos de los campos. Ver el mapeo más abajo
.ediEDI (X12 o EDIFACT)Un registro por segmento con los campos segment_type y element_1 ... element_N. EDIFACT se detecta por los separadores ' y +; si no, X12X12 (separador de elementos *, terminador de segmento ~)

Notas sobre Excel:

  • Los ficheros .xls binarios antiguos de Excel 97-2003 no se admiten: se ignoran con el error old binary Excel 97-2003 (.xls) files are not supported, save the file as .xlsx. Un .xls que por dentro es un libro .xlsx sí se lee
  • Un libro con varias hojas da una entidad por hoja, con el nombre <fichero>.<hoja>: las hojas Customers y Orders de Report.xlsx son las entidades Report.Customers y Report.Orders. Un libro con una sola hoja es la entidad <fichero>

Mapeo de tipos Parquet al leer. Primero cuenta el tipo lógico (convertido) de la columna, así que las columnas de texto son string:

Tipo ParquetTipo Gigantic
UTF8, ENUMstring
DATE, TIMESTAMP_MILLIS, TIMESTAMP_MICROSdate
INT_8 ... INT_64, UINT_8 ... UINT_64, TIME_MILLIS, TIME_MICROSnumber
DECIMALfloat
JSON, BSON, MAP, LIST, grupos anidadosobject
INT32, INT64, INT96 sin tipo lógiconumber
FLOAT, DOUBLEfloat
BOOLEANboolean
BYTE_ARRAY, FIXED_LEN_BYTE_ARRAY sin tipo lógico, INTERVALbuffer

Mapeo de tipos Parquet al escribir:

Tipo GiganticTipo Parquet
numberINT64
floatDOUBLE
booleanBOOLEAN
dateTIMESTAMP_MILLIS
bufferBYTE_ARRAY
objectJSON
string y los demás tiposUTF8

Una columna con un valor que no encaja en su tipo (por ejemplo una columna number con el valor n/a) se escribe como UTF8.

Proveedores

ProveedorLecturaEscritura
Disco localRuta debe existir y ser una carpetaEl sink crea la Ruta, con sus carpetas padre, si no existe. Un fichero con el mismo nombre se sobrescribe
SSH / SFTPUsa SFTP. La ruta remota debe existir y ser una carpetaEl sink crea la ruta remota, con sus carpetas padre, si no existe. Un fichero con el mismo nombre se sobrescribe
Google DriveID de carpeta debe ser una carpeta visible para la cuentaUn fichero con el mismo nombre en la carpeta se actualiza con el contenido nuevo; si no lo hay, se sube un fichero nuevo
SharePointLee la carpeta de la biblioteca de documentos por defecto del sitio (/sites/{siteId}/drive)Sube el fichero a la carpeta. Un fichero con el mismo nombre se sobrescribe

Formato de salida

Cada entidad se escribe en el formato de su fichero de origen, con la misma extensión (las entidades Excel se escriben siempre como .xlsx). Las entidades que no vienen de un fichero (por ejemplo las tablas de un tap de base de datos) se escriben como CSV.

El botón Probar comprueba que la Ruta existe, también en un sink: un sink cuya Ruta aún no está creada falla la prueba, pero crea la Ruta al ejecutarse.

Modos de escritura

El controlador File Storage escribe un fichero por entidad y ejecución. El modo de escritura decide qué pasa con los ficheros de ejecuciones anteriores:

Modo de escrituraFicheros de ejecuciones anteriores
Truncate, DropSe borran antes de escribir el fichero nuevo, con todos los proveedores. Son los ficheros de la carpeta cuyo nombre encaja con los Nombres de los archivos de salida de la entidad, con cualquier fecha o timestamp: para Filiale con Añadir marca de tiempo, se borra Filiale_2026-04-27_10-30-00.csv y se conserva Filiale_notes.csv
Append, Update, MergeSe conservan. No se vacía ni amplía ningún fichero

Con Añadir marca de tiempo y Append, cada ejecución añade un fichero nuevo. Un fichero con el mismo nombre que el nuevo se sustituye siempre, en cualquier modo.

Los lotes de escritura son de 1000 registros salvo que el job o la regla indiquen otro tamaño. Reintentar al fallar no tiene efecto en este controlador.

Opciones de Autenticación

Tipo de AutenticaciónMapeo UIDescripción
NingunoDisco local y SharePointLas credenciales se indican en los campos del proveedor de la sección Conexión o en Parámetros personalizados
Archivo de claveSSH / SFTPLa Ruta del archivo de clave, o una clave por defecto
ContraseñaSSH / SFTPCampo Contraseña
Clave privadaSSH / SFTPCampos Clave privada y Frase de acceso
OAuth2Google DriveID de cliente, Secreto de cliente y Token de refresco de la sección Conexión
Cuenta de servicioGoogle DriveCampo Clave de la cuenta de servicio

Al cambiar el Proveedor, la autenticación vuelve a la primera opción del proveedor.

Soporte de Túnel SSH

El formulario muestra la opción ¿Habilitar SSH?, pero el controlador File Storage no usa túneles SSH. Para acceder a ficheros de un servidor remoto, usa el proveedor SSH / SFTP.

Endpoints de API Utilizados

Las conexiones File Storage se utilizan en:

  • Creación de taps (descubrimiento de la fuente de datos desde ficheros)
  • Creación de sinks (destino de los datos anonimizados como ficheros)
  • Ejecución de pipelines (extracción y carga de datos en ficheros)

Dependencias del Controlador Node.js

PropósitoBiblioteca
CSVfast-csv
JSONJSONStream
YAMLjs-yaml
XMLxml2js
Excelexceljs
Parquet@dsnp/parquetjs
SSH / SFTPssh2
Google Drivegoogleapis

Parámetros Personalizados

Los Parámetros personalizados (YAML) se combinan con la configuración del controlador, así que pueden fijar o sobrescribir cualquiera de estas claves:

# Todos los proveedores
basePath: /data/input          # Sustituye Ruta / ID de carpeta
filePattern: "*.json"          # Sustituye Patrón de archivos
providerType: local            # local, ssh, gdrive o sharepoint

# Sinks
fileNaming: custom             # timestamp, original o custom
fileNamingPattern: "{entity}_{date}{ext}"

# SSH / SFTP
sshPassword: secret            # Entrada con contraseña (o la autenticación Contraseña)
sshKeyContent: |               # Contenido de la clave privada en lugar de un fichero
  -----BEGIN OPENSSH PRIVATE KEY-----
  ...
  -----END OPENSSH PRIVATE KEY-----
sshPassphrase: secret          # Frase de paso de la clave privada

# Google Drive
serviceAccountKey: |           # Clave JSON de cuenta de servicio (o la autenticación Cuenta de servicio)
  { "type": "service_account", "client_email": "...", "private_key": "..." }

# SharePoint
siteId: contoso.sharepoint.com,guid1,guid2   # Sustituye el campo ID del sitio

Ejemplos de Configuración

SFTP con una contraseña de una variable

Proveedor SSH / SFTP, Ruta /home/data/export, Host SSH sftp.example.com, Nombre de usuario gig, autenticación Archivo de clave. La contraseña sale de la variable de Gigantics SFTP_PASSWORD, así que se indica en Parámetros personalizados en lugar del campo Contraseña:

sshPassword: $SFTP_PASSWORD

SFTP, solo los ficheros CSV

Proveedor SSH / SFTP, cualquier autenticación:

filePattern: "*.csv"

Google Drive con cuenta de servicio

Proveedor Google Drive, ID de carpeta de una carpeta compartida con la cuenta de servicio, autenticación Cuenta de servicio y la clave JSON en Clave de la cuenta de servicio:

{ "type": "service_account", "client_email": "gig@project.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" }