Gegevens Importeren

Gegevens importeren uit meerdere bronnen

Importeer gegevens uit CSV, Excel, JSON en andere formaten. Verwerk grote datasets met streaming uploads.

Gegevensbestand Uploaden

POST /api/{tenantId}/{projectId}/dataset/{datasetId}/import

Upload en importeer gegevens uit verschillende bestandsformaten, waaronder CSV, Excel en XES. Ondersteunt het uploaden van grote bestanden met chunked overdracht.

Parameters

Parameter Type Locatie Beschrijving
tenantId GUID Pad De tenant identificatie
projectId GUID Pad De project identificatie
datasetId GUID Pad De dataset identificatie
file Bestand Formuliergegevens Gegevensbestand om te uploaden
columnMapping JSON Formuliergegevens Configuratie voor kolomtoewijzing

Configuratie Kolomtoewijzing

{
  "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
  }
}

Respons

{
  "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"
}

CSV importeren met Mapping

POST /api/{tenantId}/{projectId}/dataset/{datasetId}/import/csv

Importeer CSV-gegevens met geavanceerde kolomtoewijzing, datatransformatie en validatieopties.

Request Body

{
  "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 "
    }
  ]
}

Respons

Retourneert hetzelfde importstatusobject als de endpoint voor het uploaden van bestanden.

Importstatus Ophalen

GET /api/{tenantId}/{projectId}/dataset/{datasetId}/import/{importId}/status

Monitor de voortgang en status van een gegevensimportoperatie inclusief validatieresultaten en foutdetails.

Respons

{
  "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": "Ongeldig datumformaat",
      "value": "2024-13-01 25:00:00"
    }
  ],
  "warnings": [
    {
      "row": 2847,
      "column": "Resource",
      "warning": "Lege waarde voor optioneel veld",
      "value": ""
    }
  ],
  "statistics": {
    "uniqueCases": 1247,
    "uniqueActivities": 12,
    "dateRange": {
      "earliest": "2024-01-01T08:00:00Z",
      "latest": "2024-01-31T17:30:00Z"
    }
  }
}

Ondersteunde Bestandsformaten

mindzieStudio ondersteunt meerdere dataformaten voor naadloze procesmining data-import:

CSV Bestanden

Door komma's gescheiden waarden met flexibele parsingopties.

  • Aangepaste scheidingstekens (komma, puntkomma, tab)
  • UTF-8, ISO-8859-1 codering ondersteuning
  • Detectie van koprij
  • Afhandeling van aanhalingstekens

Excel Bestanden

Microsoft Excel werkboeken (.xlsx, .xls).

  • Ondersteuning voor meerdere werkbladen
  • Behoud van celopmaak
  • Herkenning van datum/tijd
  • Streaming van grote bestanden

XES Formaat

IEEE XES-standaard voor procesmining.

  • Volledige ondersteuning van de XES-specificatie
  • Eventattributen en extensies
  • Lifecycle-informatie
  • Compatibiliteit met procesmining tools

JSON Bestanden

Gestructureerde JSON-gegevens voor complexe events.

  • Ondersteuning voor geneste objecten
  • Afhandeling van arrays
  • Aangepaste schema-toewijzing
  • Streaming JSON verwerking

JavaScript Voorbeeld: Bestand Uploaden met Voortgang

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); // Controleer elke 2 seconden
        }
      } 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
      }
    };
  }
}

// Gebruik voorbeeld
const importer = new DataImporter(
  'https://your-mindzie-instance.com',
  'tenant-guid',
  'project-guid',
  'your-token'
);

// Beheer bestand upload met voortgangsmonitoring
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('Upload gestart:', result.importId);

    // Monitor voortgang
    importer.monitorImport('dataset-guid', result.importId, (status) => {
      if (status.error) {
        console.error('Import mislukt:', status.error);
      } else {
        const progress = (status.rowsProcessed / status.rowsTotal) * 100;
        console.log(`Voortgang: ${progress.toFixed(1)}% (${status.rowsProcessed}/${status.rowsTotal})`);

        if (status.status === 'Completed') {
          console.log('Import succesvol voltooid!');
          console.log(`Verwerkt ${status.rowsProcessed} rijen met ${status.errors.length} fouten`);
        }
      }
    });
  } catch (error) {
    console.error('Upload mislukt:', error);
  }
});