Veri İçe Aktarma

Birden Fazla Kaynaktan Veri İçe Aktarma

CSV, Excel, JSON ve diğer formatlardan veri içe aktarın. Büyük veri setlerini akışlı yüklemelerle yönetin.

Veri Dosyası Yükle

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

CSV, Excel ve XES dahil çeşitli dosya formatlarından veri yükleyin ve içe aktarın. Parçalı transfer ile büyük dosya yüklemelerini destekler.

Parametreler

Parametre Tip Konum Açıklama
tenantId GUID Yol Kiracı kimliği
projectId GUID Yol Proje kimliği
datasetId GUID Yol Veri seti kimliği
file Dosya Form Verisi Yüklenecek veri dosyası
columnMapping JSON Form Verisi Sütun eşleme yapılandırması

Sütun Eşleme Yapılandırması

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

Yanıt

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

Eşlemeyle CSV İçe Aktar

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

Gelişmiş sütun eşleme, veri dönüştürme ve doğrulama seçenekleri ile CSV verisi içe aktarın.

İstek Gövdesi

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

Yanıt

Dosya yükleme uç noktasıyla aynı içe aktarma durum nesnesini döner.

İçe Aktarma Durumunu Al

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

Veri içe aktarma işleminin ilerlemesini ve durumunu doğrulama sonuçları ve hata detaylarıyla birlikte izleyin.

Yanıt

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

Desteklenen Dosya Formatları

mindzieStudio, süreç madenciliği verilerinin sorunsuz içe aktarımı için birçok veri formatını destekler:

CSV Dosyaları

Esnek ayrıştırma seçenekleriyle virgülle ayrılmış değerler.

  • Özel ayırıcılar (virgül, noktalı virgül, tab)
  • UTF-8, ISO-8859-1 kodlama desteği
  • Başlık satırı algılama
  • Tırnak işaretleri yönetimi

Excel Dosyaları

Microsoft Excel çalışma kitapları (.xlsx, .xls).

  • Çoklu çalışma sayfası desteği
  • Hücre biçimlendirme korunması
  • Tarih/saat tanıma
  • Büyük dosya akış desteği

XES Formatı

Süreç madenciliği için IEEE XES standardı.

  • Tam XES spesifikasyon desteği
  • Olay özellikleri ve uzantılar
  • Yaşam döngüsü bilgisi
  • Süreç madenciliği araç uyumluluğu

JSON Dosyaları

Karmaşık olaylar için yapılandırılmış JSON verisi.

  • İç içe nesne desteği
  • Dizi işleme
  • Özel şema eşleme
  • Akış halinde JSON işleme

JavaScript Örneği: İlerlemeli Dosya Yükleme

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); // Her 2 saniyede bir kontrol et
        }
      } 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
      }
    };
  }
}

// Kullanım örneği
const importer = new DataImporter(
  'https://your-mindzie-instance.com',
  'tenant-guid',
  'project-guid',
  'your-token'
);

// İlerlemeli dosya yüklemeyi yönet
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('Yükleme başladı:', result.importId);

    // İlerlemeyi izle
    importer.monitorImport('dataset-guid', result.importId, (status) => {
      if (status.error) {
        console.error('İçe aktarma başarısız:', status.error);
      } else {
        const progress = (status.rowsProcessed / status.rowsTotal) * 100;
        console.log(`İlerleme: ${progress.toFixed(1)}% (${status.rowsProcessed}/${status.rowsTotal})`);

        if (status.status === 'Completed') {
          console.log('İçe aktarma başarıyla tamamlandı!');
          console.log(`${status.rowsProcessed} satır işlendi, ${status.errors.length} hata oluştu`);
        }
      }
    });
  } catch (error) {
    console.error('Yükleme başarısız:', error);
  }
});