🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Impor Data

Mengimpor data

Halaman ini menunjukkan prosedur untuk mengimpor data yang telah disiapkan.

Sebelum Anda mulai

  • Anda sudah menyiapkan data Anda dan menempatkannya ke dalam bucket Milvus.

    Jika belum, Anda harus menggunakan RemoteBulkWriter untuk menyiapkan data Anda terlebih dahulu, dan memastikan bahwa data yang disiapkan telah ditransfer ke bucket Milvus pada instance MinIO yang dimulai bersama dengan instance Milvus Anda. Untuk detailnya, lihat Menyiapkan Data Sumber.

  • Anda telah membuat koleksi dengan skema yang Anda gunakan untuk menyiapkan data. Jika belum, lihat Mengelola Koleksi.

Cuplikan kode berikut ini membuat koleksi sederhana dengan skema yang diberikan. Untuk informasi lebih lanjut tentang parameter, lihat create_schema() dan create_collection() dalam referensi SDK.

Cuplikan kode berikut membuat koleksi sederhana dengan skema yang diberikan. Untuk informasi lebih lanjut tentang parameter, lihat createCollection() dalam referensi SDK.

Mengimpor data

Untuk mengimpor data yang telah disiapkan, Anda harus membuat pekerjaan impor sebagai berikut:

from pymilvus.bulk_writer import bulk_import

url = f"http://127.0.0.1:19530"

# Bulk-insert data from a set of JSON files already uploaded to the MinIO server
resp = bulk_import(
    url=url,
    collection_name="quick_setup",
    files=[['a1e18323-a658-4d1b-95a7-9907a4391bcf/1.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/2.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/3.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/4.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/5.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/6.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/7.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/8.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/9.parquet'],
           ['a1e18323-a658-4d1b-95a7-9907a4391bcf/10.parquet']],
)

job_id = resp.json()['data']['jobId']
print(job_id)
private static String bulkImport(List<List<String>> batchFiles) throws InterruptedException {
    MilvusImportRequest milvusImportRequest = MilvusImportRequest.builder()
            .collectionName("quick_setup")
            .files(batchFiles)
            .build();
    String bulkImportResult = BulkImport.bulkImport("http://localhost:19530", milvusImportRequest);
    System.out.println(bulkImportResult);

    JsonObject bulkImportObject = new Gson().fromJson(bulkImportResult, JsonObject.class);
    String jobId = bulkImportObject.getAsJsonObject("data").get("jobId").getAsString();
    System.out.println("Create a bulkInert task, job id: " + jobId);
    return jobId;
}

public static void main(String[] args) throws Exception {
    List<List<String>> batchFiles = uploadData();
    String jobId = bulkImport(batchFiles);
}
export MILVUS_URI="localhost:19530"

curl --request POST "http://${MILVUS_URI}/v2/vectordb/jobs/import/create" \
--header "Content-Type: application/json" \
--data-raw '{
    "files": [
        [
            "/8ca44f28-47f7-40ba-9604-98918afe26d1/1.parquet"
        ],
        [
            "/8ca44f28-47f7-40ba-9604-98918afe26d1/2.parquet"
        ]
    ],
    "collectionName": "quick_setup"
}'

Badan permintaan berisi dua bidang:

  • collectionName

    Nama koleksi target.

  • files

    Daftar daftar jalur file yang relatif terhadap jalur root dari bucket Milvus pada instans MioIO yang dimulai bersama dengan instans Milvus Anda. Sub-daftar yang mungkin ada adalah sebagai berikut:

    • File JSON

      Jika berkas yang disiapkan dalam format JSON, setiap sub-daftar harus berisi jalur ke satu berkas JSON yang disiapkan.

      [
          "/d1782fa1-6b65-4ff3-b05a-43a436342445/1.json"
      ],
      
    • File parket

      Jika berkas yang disiapkan dalam format Parquet, setiap sub-daftar harus berisi jalur ke satu berkas parquet yang disiapkan.

      [
          "/a6fb2d1c-7b1b-427c-a8a3-178944e3b66d/1.parquet"
      ]
      
      

Pengembalian yang mungkin adalah sebagai berikut:

{
    "code": 200,
    "data": {
        "jobId": "448707763884413158"
    }
}

Memeriksa kemajuan impor

Setelah Anda mendapatkan ID pekerjaan impor, Anda dapat memeriksa kemajuan impor sebagai berikut:

import json
from pymilvus.bulk_writer import get_import_progress

url = f"http://127.0.0.1:19530"

# Get bulk-insert job progress
resp = get_import_progress(
    url=url,
    job_id="453265736269038336",
)

print(json.dumps(resp.json(), indent=4))
private static void getImportProgress(String jobId) {
    while (true) {
        System.out.println("Wait 5 second to check bulkInsert job state...");
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            break;
        }

        MilvusDescribeImportRequest request = MilvusDescribeImportRequest.builder()
                .jobId(jobId)
                .build();
        String getImportProgressResult = BulkImport.getImportProgress("http://localhost:19530", request);

        JsonObject getImportProgressObject = new Gson().fromJson(getImportProgressResult, JsonObject.class);
        String state = getImportProgressObject.getAsJsonObject("data").get("state").getAsString();
        String progress = getImportProgressObject.getAsJsonObject("data").get("progress").getAsString();
        if ("Failed".equals(state)) {
            String reason = getImportProgressObject.getAsJsonObject("data").get("reason").getAsString();
            System.out.printf("The job %s failed, reason: %s%n", jobId, reason);
            break;
        } else if ("Completed".equals(state)) {
            System.out.printf("The job %s completed%n", jobId);
            break;
        } else {
            System.out.printf("The job %s is running, state:%s progress:%s%n", jobId, state, progress);
        }
    }
}

public static void main(String[] args) throws Exception {
    List<List<String>> batchFiles = uploadData();
    String jobId = bulkImport(batchFiles);
    getImportProgress(jobId);
}
export MILVUS_URI="localhost:19530"

curl --request POST "http://${MILVUS_URI}/v2/vectordb/jobs/import/describe" \
--header "Content-Type: application/json" \
--data-raw '{
    "jobId": "449839014328146739"
}'

Respons yang mungkin muncul adalah sebagai berikut:

{
    "code": 200,
    "data": {
        "collectionName": "quick_setup",
        "completeTime": "2024-05-18T02:57:13Z",
        "details": [
            {
                "completeTime": "2024-05-18T02:57:11Z",
                "fileName": "id:449839014328146740 paths:\"/8ca44f28-47f7-40ba-9604-98918afe26d1/1.parquet\" ",
                "fileSize": 31567874,
                "importedRows": 100000,
                "progress": 100,
                "state": "Completed",
                "totalRows": 100000
            },
            {
                "completeTime": "2024-05-18T02:57:11Z",
                "fileName": "id:449839014328146741 paths:\"/8ca44f28-47f7-40ba-9604-98918afe26d1/2.parquet\" ",
                "fileSize": 31517224,
                "importedRows": 100000,
                "progress": 100,
                "state": "Completed",
                "totalRows": 200000            
            }
        ],
        "fileSize": 63085098,
        "importedRows": 200000,
        "jobId": "449839014328146739",
        "progress": 100,
        "state": "Completed",
        "totalRows": 200000
    }
}

Buat daftar pekerjaan impor

Anda dapat membuat daftar semua pekerjaan impor relatif terhadap koleksi tertentu sebagai berikut:

import json
from pymilvus.bulk_writer import list_import_jobs

url = f"http://127.0.0.1:19530"

# List bulk-insert jobs
resp = list_import_jobs(
    url=url,
    collection_name="quick_setup",
)

print(json.dumps(resp.json(), indent=4))
private static void listImportJobs() {
    MilvusListImportJobsRequest listImportJobsRequest = MilvusListImportJobsRequest.builder().collectionName("quick_setup").build();
    String listImportJobsResult = BulkImport.listImportJobs("http://localhost:19530", listImportJobsRequest);
    System.out.println(listImportJobsResult);
}

public static void main(String[] args) throws Exception {
    listImportJobs();
}
export MILVUS_URI="localhost:19530"

curl --request POST "http://${MILVUS_URI}/v2/vectordb/jobs/import/list" \
--header "Content-Type: application/json" \
--data-raw '{
    "collectionName": "quick_setup"
}'

Nilai yang mungkin adalah sebagai berikut:

{
    "code": 200,
    "data": {
        "records": [
            {
                "collectionName": "quick_setup",
                "jobId": "448761313698322011",
                "progress": 50,
                "state": "Importing"
            }
        ]
    }
}

Keterbatasan

  • Setiap ukuran file impor tidak boleh melebihi 16 GB.

  • Jumlah maksimum permintaan impor dibatasi hingga 1024.

  • Jumlah maksimum file per permintaan impor tidak boleh melebihi 1024.

  • Hanya satu nama partisi yang dapat ditentukan dalam permintaan impor. Jika tidak ada nama partisi yang ditentukan, data akan dimasukkan ke dalam partisi default. Selain itu, Anda tidak dapat menetapkan nama partisi dalam permintaan impor jika Anda telah menetapkan Kunci Partisi di koleksi target.

Kendala

Sebelum mengimpor data, pastikan Anda telah mengetahui batasan-batasan terkait perilaku Milvus berikut ini:

  • Kendala terkait perilaku Load:

    • Jika koleksi telah dimuat sebelum impor, Anda dapat menggunakan fungsi refresh_load untuk memuat data yang baru diimpor setelah impor selesai.
  • Kendala terkait perilaku kueri & pencarian:

    • Sebelum status pekerjaan impor adalah Selesai, data yang baru diimpor dijamin tidak akan terlihat oleh kueri dan pencarian.

    • Setelah status pekerjaan adalah Selesai,

      • Jika koleksi belum dimuat, Anda dapat menggunakan fungsi load untuk memuat data yang baru diimpor.

      • Jika koleksi sudah dimuat, Anda dapat memanggil load(is_refresh=True) untuk memuat data yang diimpor.

  • Kendala terkait perilaku penghapusan:

    • Sebelum status pekerjaan impor adalah Selesai, penghapusan tidak dijamin dan mungkin atau mungkin tidak berhasil.

    • Penghapusan setelah status pekerjaan selesai dijamin akan berhasil.

Rekomendasi

Kami sangat menyarankan untuk menggunakan fitur impor multi-file, yang memungkinkan Anda mengunggah beberapa file dalam satu permintaan. Metode ini tidak hanya menyederhanakan proses impor, tetapi juga secara signifikan meningkatkan kinerja impor. Sementara itu, dengan mengkonsolidasikan unggahan Anda, Anda dapat mengurangi waktu yang dihabiskan untuk manajemen data dan membuat alur kerja Anda lebih efisien.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?