Importación de Datos
Importar Datos de Múltiples Fuentes
Importa datos desde CSV, Excel, JSON y otros formatos. Maneja grandes conjuntos de datos con cargas por streaming.
Subir Archivo de Datos
POST /api/{tenantId}/{projectId}/dataset/{datasetId}/import
Sube e importa datos desde varios formatos de archivo incluyendo CSV, Excel y XES. Soporta cargas de archivos grandes con transferencia segmentada.
Parámetros
| Parámetro | Tipo | Ubicación | Descripción |
|---|---|---|---|
tenantId |
GUID | Ruta | Identificador del tenant |
projectId |
GUID | Ruta | Identificador del proyecto |
datasetId |
GUID | Ruta | Identificador del conjunto de datos |
file |
Archivo | Datos de formulario | Archivo de datos a subir |
columnMapping |
JSON | Datos de formulario | Configuración de mapeo de columnas |
Configuración de Mapeo de Columnas
{
"mapping": [
{
"sourceColumn": "Case_ID",
"targetColumn": "CaseID",
"dataType": "string"
},
{
"sourceColumn": "Event_Name",
"targetColumn": "Activity",
"dataType": "string"
},
{
"sourceColumn": "Event_Time",
"targetColumn": "Timestamp",
"dataType": "datetime",
"format": "yyyy-MM-dd HH:mm:ss"
}
],
"options": {
"hasHeader": true,
"delimiter": ",",
"encoding": "UTF-8",
"skipRows": 0
}
}
Respuesta
{
"importId": "import-550e8400-e29b-41d4-a716-446655440000",
"datasetId": "550e8400-e29b-41d4-a716-446655440000",
"status": "Processing",
"fileName": "process_events.csv",
"fileSize": 15728640,
"rowsProcessed": 0,
"rowsTotal": 50000,
"errors": [],
"warnings": [],
"startTime": "2024-01-15T10:30:00Z"
}
Importar CSV con Mapeo
POST /api/{tenantId}/{projectId}/dataset/{datasetId}/import/csv
Importa datos CSV con opciones avanzadas de mapeo de columnas, transformación de datos y validación.
Cuerpo de la Solicitud
{
"fileUrl": "https://your-storage.com/data/events.csv",
"mapping": [
{
"sourceColumn": "order_id",
"targetColumn": "CaseID",
"dataType": "string",
"required": true
},
{
"sourceColumn": "step_name",
"targetColumn": "Activity",
"dataType": "string",
"required": true
},
{
"sourceColumn": "timestamp",
"targetColumn": "Timestamp",
"dataType": "datetime",
"format": "ISO8601",
"required": true
},
{
"sourceColumn": "user_name",
"targetColumn": "Resource",
"dataType": "string",
"required": false
}
],
"options": {
"hasHeader": true,
"delimiter": ",",
"encoding": "UTF-8",
"skipRows": 1,
"validateData": true,
"replaceExisting": false
},
"transformations": [
{
"column": "Activity",
"type": "replace",
"find": "ORDER_",
"replace": "Order "
}
]
}
Respuesta
Devuelve el mismo objeto de estado de importación que el endpoint de carga de archivos.
Obtener Estado de Importación
GET /api/{tenantId}/{projectId}/dataset/{datasetId}/import/{importId}/status
Monitorea el progreso y estado de una operación de importación de datos incluyendo resultados de validación y detalles de errores.
Respuesta
{
"importId": "import-550e8400-e29b-41d4-a716-446655440000",
"datasetId": "550e8400-e29b-41d4-a716-446655440000",
"status": "Completed",
"fileName": "process_events.csv",
"fileSize": 15728640,
"rowsProcessed": 49876,
"rowsTotal": 50000,
"rowsSkipped": 124,
"startTime": "2024-01-15T10:30:00Z",
"endTime": "2024-01-15T10:45:23Z",
"duration": "00:15:23",
"errors": [
{
"row": 1532,
"column": "Timestamp",
"error": "Invalid date format",
"value": "2024-13-01 25:00:00"
}
],
"warnings": [
{
"row": 2847,
"column": "Resource",
"warning": "Empty value for optional field",
"value": ""
}
],
"statistics": {
"uniqueCases": 1247,
"uniqueActivities": 12,
"dateRange": {
"earliest": "2024-01-01T08:00:00Z",
"latest": "2024-01-31T17:30:00Z"
}
}
}
Formatos de Archivo Soportados
mindzieStudio soporta múltiples formatos de datos para una importación fluida de datos de minería de procesos:
Archivos CSV
Valores separados por comas con opciones flexibles de análisis.
- Delimitadores personalizados (coma, punto y coma, tabulador)
- Soporte de codificación UTF-8, ISO-8859-1
- Detección de fila encabezado
- Manejo de caracteres de comillas
Archivos Excel
Libros de Microsoft Excel (.xlsx, .xls).
- Soporte de múltiples hojas de cálculo
- Preservación de formato de celdas
- Reconocimiento de fecha/hora
- Streaming para archivos grandes
Formato XES
Estándar IEEE XES para minería de procesos.
- Soporte completo de especificación XES
- Atributos y extensiones de evento
- Información de ciclo de vida
- Compatibilidad con herramientas de minería de procesos
Archivos JSON
Datos JSON estructurados para eventos complejos.
- Soporte de objetos anidados
- Manejo de arreglos
- Mapeo de esquema personalizado
- Procesamiento de JSON por streaming
Ejemplo en JavaScript: Subida de Archivo con Progreso
class DataImporter {
constructor(baseUrl, tenantId, projectId, token) {
this.baseUrl = baseUrl;
this.tenantId = tenantId;
this.projectId = projectId;
this.headers = {
'Authorization': `Bearer ${token}`
};
}
async uploadFile(datasetId, file, columnMapping) {
const formData = new FormData();
formData.append('file', file);
formData.append('columnMapping', JSON.stringify(columnMapping));
const url = `${this.baseUrl}/api/${this.tenantId}/${this.projectId}/dataset/${datasetId}/import`;
const response = await fetch(url, {
method: 'POST',
headers: this.headers,
body: formData
});
return await response.json();
}
async importCsv(datasetId, csvConfig) {
const url = `${this.baseUrl}/api/${this.tenantId}/${this.projectId}/dataset/${datasetId}/import/csv`;
const response = await fetch(url, {
method: 'POST',
headers: {
...this.headers,
'Content-Type': 'application/json'
},
body: JSON.stringify(csvConfig)
});
return await response.json();
}
async getImportStatus(datasetId, importId) {
const url = `${this.baseUrl}/api/${this.tenantId}/${this.projectId}/dataset/${datasetId}/import/${importId}/status`;
const response = await fetch(url, {
headers: this.headers
});
return await response.json();
}
async monitorImport(datasetId, importId, callback) {
const checkStatus = async () => {
try {
const status = await this.getImportStatus(datasetId, importId);
callback(status);
if (status.status === 'Processing') {
setTimeout(checkStatus, 2000); // Revisar cada 2 segundos
}
} catch (error) {
callback({ error: error.message });
}
};
checkStatus();
}
buildStandardMapping() {
return {
mapping: [
{
sourceColumn: 'case_id',
targetColumn: 'CaseID',
dataType: 'string'
},
{
sourceColumn: 'activity',
targetColumn: 'Activity',
dataType: 'string'
},
{
sourceColumn: 'timestamp',
targetColumn: 'Timestamp',
dataType: 'datetime',
format: 'ISO8601'
}
],
options: {
hasHeader: true,
delimiter: ',',
encoding: 'UTF-8',
validateData: true
}
};
}
}
// Ejemplo de uso
const importer = new DataImporter(
'https://your-mindzie-instance.com',
'tenant-guid',
'project-guid',
'your-token'
);
// Manejar la subida de archivo con monitoreo de progreso
document.getElementById('fileInput').addEventListener('change', async (e) => {
const file = e.target.files[0];
if (!file) return;
const mapping = importer.buildStandardMapping();
try {
const result = await importer.uploadFile('dataset-guid', file, mapping);
console.log('Carga iniciada:', result.importId);
// Monitorear progreso
importer.monitorImport('dataset-guid', result.importId, (status) => {
if (status.error) {
console.error('Importación fallida:', status.error);
} else {
const progress = (status.rowsProcessed / status.rowsTotal) * 100;
console.log(`Progreso: ${progress.toFixed(1)}% (${status.rowsProcessed}/${status.rowsTotal})`);
if (status.status === 'Completed') {
console.log('Importación completada exitosamente!');
console.log(`Procesadas ${status.rowsProcessed} filas con ${status.errors.length} errores`);
}
}
});
} catch (error) {
console.error('Carga fallida:', error);
}
});