Importation de Données
Importer des données provenant de plusieurs sources
Importez des données aux formats CSV, Excel, JSON et autres. Gérez de grands ensembles de données avec des téléchargements en streaming.
Télécharger un Fichier de Données
POST /api/{tenantId}/{projectId}/dataset/{datasetId}/import
Téléchargez et importez des données à partir de divers formats de fichiers incluant CSV, Excel et XES. Supporte les téléchargements de grands fichiers avec transfert par morceaux.
Paramètres
| Paramètre | Type | Emplacement | Description |
|---|---|---|---|
tenantId |
GUID | Chemin | L'identifiant du locataire |
projectId |
GUID | Chemin | L'identifiant du projet |
datasetId |
GUID | Chemin | L'identifiant de l'ensemble de données |
file |
Fichier | Données de formulaire | Fichier de données à télécharger |
columnMapping |
JSON | Données de formulaire | Configuration de mappage des colonnes |
Configuration du Mappage des Colonnes
{
"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
}
}
Réponse
{
"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"
}
Importer un CSV avec Mappage
POST /api/{tenantId}/{projectId}/dataset/{datasetId}/import/csv
Importez des données CSV avec des options avancées de mappage des colonnes, transformation des données, et validation.
Corps de la Requête
{
"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 "
}
]
}
Réponse
Retourne le même objet de statut d'importation que le point de terminaison de téléchargement de fichier.
Obtenir le Statut d'Importation
GET /api/{tenantId}/{projectId}/dataset/{datasetId}/import/{importId}/status
Surveillez la progression et le statut d'une opération d'importation de données, y compris les résultats de validation et les détails des erreurs.
Réponse
{
"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": "Format de date invalide",
"value": "2024-13-01 25:00:00"
}
],
"warnings": [
{
"row": 2847,
"column": "Resource",
"warning": "Valeur vide pour un champ optionnel",
"value": ""
}
],
"statistics": {
"uniqueCases": 1247,
"uniqueActivities": 12,
"dateRange": {
"earliest": "2024-01-01T08:00:00Z",
"latest": "2024-01-31T17:30:00Z"
}
}
}
Formats de Fichiers Pris en Charge
mindzieStudio prend en charge plusieurs formats de données pour une importation fluide des données de process mining :
Fichiers CSV
Valeurs séparées par des virgules avec options de parsing flexibles.
- Délimiteurs personnalisés (virgule, point-virgule, tabulation)
- Prise en charge des encodages UTF-8, ISO-8859-1
- Détection de ligne d'en-tête
- Gestion des guillemets
Fichiers Excel
Classeurs Microsoft Excel (.xlsx, .xls).
- Support de plusieurs feuilles de calcul
- Préservation du formatage des cellules
- Reconnaissance des dates/horaires
- Streaming pour gros fichiers
Format XES
Standard IEEE XES pour le process mining.
- Support complet de la spécification XES
- Attributs d'événements et extensions
- Informations sur le cycle de vie
- Compatibilité avec les outils de process mining
Fichiers JSON
Données JSON structurées pour événements complexes.
- Support des objets imbriqués
- Gestion des tableaux
- Mappage de schéma personnalisé
- Traitement JSON en streaming
Exemple JavaScript : Téléversement de Fichier avec Suivi de Progression
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); // Vérifier toutes les 2 secondes
}
} 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
}
};
}
}
// Exemple d'utilisation
const importer = new DataImporter(
'https://your-mindzie-instance.com',
'tenant-guid',
'project-guid',
'your-token'
);
// Gérer le téléchargement de fichier avec suivi de progression
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('Téléversement démarré :', result.importId);
// Surveiller la progression
importer.monitorImport('dataset-guid', result.importId, (status) => {
if (status.error) {
console.error('Importation échouée :', status.error);
} else {
const progress = (status.rowsProcessed / status.rowsTotal) * 100;
console.log(`Progression : ${progress.toFixed(1)}% (${status.rowsProcessed}/${status.rowsTotal})`);
if (status.status === 'Completed') {
console.log('Importation terminée avec succès !');
console.log(`Traitement de ${status.rowsProcessed} lignes avec ${status.errors.length} erreurs`);
}
}
});
} catch (error) {
console.error('Échec du téléversement :', error);
}
});