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 entidadFile Storage frente al controlador CSV
| File Storage | CSV | |
|---|---|---|
| Selector de drivers | Sí, en Archivos y almacenamiento | No. Se mantiene para taps y sinks existentes |
| Formatos | CSV, JSON, YAML, XML, Excel, Parquet, EDI | Solo CSV |
| Ubicación | Disco local, SSH/SFTP, Google Drive, SharePoint | Solo disco local |
| Opciones CSV | Fijas: separador coma, la primera fila es la cabecera | Separador, comillas, cabeceras y otras opciones en Parámetros personalizados |
| Escritura | Escribe un fichero nuevo por entidad y ejecución, con el nombre que indican las opciones de Nombre de los archivos | Escribe en el fichero de la entidad |
| Modos de escritura | Truncate y Drop sustituyen los ficheros que escribieron ejecuciones anteriores para la entidad | Ver el controlador CSV |
Parámetros de Conexión
Los campos de la sección Conexión dependen del Proveedor.
| Campo UI | Implementación Técnica | Descripción | Requerido | Valor por Defecto |
|---|---|---|---|---|
| Proveedor | providerType (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 |
| Ruta | basePath (se envía como host) | Carpeta con los ficheros. Con SSH / SFTP, la carpeta del servidor remoto | Sí | Ninguno (debe especificarse) |
| ID de carpeta | basePath (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 archivos | filePattern (se envía como dbSchema) | Solo Disco local. Solo se usan los ficheros que cumplen el patrón, por ejemplo *.csv | No | Todos los ficheros admitidos |
Google Drive
| Campo UI | Implementación Técnica | Descripción | Requerido | Valor 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 UI | Implementación Técnica | Descripción | Requerido | Valor 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 OAuth2 | Sí, con OAuth2 | Ninguno |
| Secreto de cliente (Client Secret) | clientSecret (se envía como dbSchema) | Client secret de OAuth, por ejemplo GOCSPX-.... Solo OAuth2 | Sí, con OAuth2 | Ninguno |
| 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 OAuth2 | Sí, con OAuth2 | Ninguno |
| Clave de la cuenta de servicio | serviceAccountKey (se envía como privateKey de la autenticación) | Clave JSON de la cuenta de servicio. Solo Cuenta de servicio. Se guarda cifrada | Sí, con Cuenta de servicio | Ninguno |
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 UI | Implementación Técnica | Descripción | Requerido | Valor por Defecto |
|---|---|---|---|---|
| ID de cliente (Client ID) | clientId (se envía como database) | ID de aplicación (cliente) de la app de Microsoft Entra ID | Sí | Ninguno |
| Secreto de cliente (Client Secret) | clientSecret (se envía como dbSchema) | Secreto de cliente de la app | Sí | 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,guid2 | Sí | 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 UI | Implementación Técnica | Descripción | Requerido | Valor por Defecto |
|---|---|---|---|---|
| Host SSH | sshHost (se envía como database) | Nombre de host o dirección IP del servidor SFTP | No | localhost |
| Puerto SSH | sshPort (se envía como port) | Puerto SSH | No | 22 |
| Nombre de usuario | sshUser (se envía como container) | Usuario SSH | No | Usuario actual |
| Ruta del archivo de clave | sshKeyPath (se envía como dbSchema) | Fichero de clave privada en el servidor de Gigantics. ~ se expande. Se oculta con la autenticación Clave privada | No | ~/.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ón | Campos | Descripción |
|---|---|---|
| Archivo de clave | Ninguno | La Ruta del archivo de clave, o la primera clave por defecto que exista |
| Contraseña | Contraseña | Contraseña SSH del Nombre de usuario. Se guarda cifrada |
| Clave privada | Clave privada, Frase de acceso | Contenido 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 UI | Implementación Técnica | Descripción | Requerido | Valor por Defecto |
|---|---|---|---|---|
| Nombres de los archivos de salida | fileNaming (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) | No | Añadir marca de tiempo |
| Patrón | fileNamingPattern | Patrón propio. Solo aparece con Patrón personalizado | Sí, con Patrón personalizado | {entity}_{date}{ext} |
Variables del patrón:
| Variable | Valor |
|---|---|
{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 salida | Fichero escrito |
|---|---|
| Añadir marca de tiempo | Filiale_2026-04-27_10-30-00.csv |
| Mantener el nombre original | Filiale.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.csvpasa a sercustomers) - Si dos ficheros tienen el mismo nombre con distinta extensión (
customers.csvycustomers.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ón | Formato | Lectura | Escritura |
|---|---|---|---|
.csv | CSV | Separador coma. La primera fila es la cabecera. Todos los campos son texto | Fila de cabecera; cabeceras y valores entre comillas |
.json | JSON | Un 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 objeto | Array JSON con un objeto por línea |
.yaml, .yml | YAML | Una lista da un registro por elemento; un objeto da un único registro. Los tipos salen del primer elemento | Lista YAML |
.xml | XML | Los 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 valores | Raíz <data> con un <record> por registro |
.xlsx, .xls | Excel | La 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 abajo | Un 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 |
.parquet | Parquet | Los tipos salen del esquema Parquet | Columnas opcionales con tipo, según los tipos de los campos. Ver el mapeo más abajo |
.edi | EDI (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, X12 | X12 (separador de elementos *, terminador de segmento ~) |
Notas sobre Excel:
- Los ficheros
.xlsbinarios antiguos de Excel 97-2003 no se admiten: se ignoran con el errorold binary Excel 97-2003 (.xls) files are not supported, save the file as .xlsx. Un.xlsque por dentro es un libro.xlsxsí se lee - Un libro con varias hojas da una entidad por hoja, con el nombre
<fichero>.<hoja>: las hojasCustomersyOrdersdeReport.xlsxson las entidadesReport.CustomersyReport.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 Parquet | Tipo Gigantic |
|---|---|
| UTF8, ENUM | string |
| DATE, TIMESTAMP_MILLIS, TIMESTAMP_MICROS | date |
| INT_8 ... INT_64, UINT_8 ... UINT_64, TIME_MILLIS, TIME_MICROS | number |
| DECIMAL | float |
| JSON, BSON, MAP, LIST, grupos anidados | object |
| INT32, INT64, INT96 sin tipo lógico | number |
| FLOAT, DOUBLE | float |
| BOOLEAN | boolean |
| BYTE_ARRAY, FIXED_LEN_BYTE_ARRAY sin tipo lógico, INTERVAL | buffer |
Mapeo de tipos Parquet al escribir:
| Tipo Gigantic | Tipo Parquet |
|---|---|
| number | INT64 |
| float | DOUBLE |
| boolean | BOOLEAN |
| date | TIMESTAMP_MILLIS |
| buffer | BYTE_ARRAY |
| object | JSON |
| string y los demás tipos | UTF8 |
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
| Proveedor | Lectura | Escritura |
|---|---|---|
| Disco local | Ruta debe existir y ser una carpeta | El sink crea la Ruta, con sus carpetas padre, si no existe. Un fichero con el mismo nombre se sobrescribe |
| SSH / SFTP | Usa SFTP. La ruta remota debe existir y ser una carpeta | El sink crea la ruta remota, con sus carpetas padre, si no existe. Un fichero con el mismo nombre se sobrescribe |
| Google Drive | ID de carpeta debe ser una carpeta visible para la cuenta | Un fichero con el mismo nombre en la carpeta se actualiza con el contenido nuevo; si no lo hay, se sube un fichero nuevo |
| SharePoint | Lee 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 escritura | Ficheros de ejecuciones anteriores |
|---|---|
| Truncate, Drop | Se 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, Merge | Se 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ón | Mapeo UI | Descripción |
|---|---|---|
| Ninguno | Disco local y SharePoint | Las credenciales se indican en los campos del proveedor de la sección Conexión o en Parámetros personalizados |
| Archivo de clave | SSH / SFTP | La Ruta del archivo de clave, o una clave por defecto |
| Contraseña | SSH / SFTP | Campo Contraseña |
| Clave privada | SSH / SFTP | Campos Clave privada y Frase de acceso |
| OAuth2 | Google Drive | ID de cliente, Secreto de cliente y Token de refresco de la sección Conexión |
| Cuenta de servicio | Google Drive | Campo 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ósito | Biblioteca |
|---|---|
| CSV | fast-csv |
| JSON | JSONStream |
| YAML | js-yaml |
| XML | xml2js |
| Excel | exceljs |
| Parquet | @dsnp/parquetjs |
| SSH / SFTP | ssh2 |
| Google Drive | googleapis |
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 sitioEjemplos 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_PASSWORDSFTP, 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" }