외부 컬렉션 스키마 변경Compatible with Milvus 3.0.x

외부 컬렉션을 생성한 후에도 외부 데이터 소스는 종종 변경됩니다. 예를 들어, 이미 임베딩을 저장하고 있는 레이크하우스 테이블에 나중에 쿼리 결과에 반환하거나 필터에 사용하고자 하는 점수, 카테고리, 타임스탬프와 같은 새로운 스칼라 필드가 추가될 수 있습니다.

외부 컬렉션을 다시 생성하거나 소스 데이터를 Milvus로 복사하는 대신, 외부 데이터 소스의 기존 필드에 매핑되는 Milvus 필드를 추가하십시오. 필드를 추가한 후 외부 컬렉션을 새로 고침하면 쿼리 및 검색에서 새 필드를 사용할 수 있습니다.

제한 사항

  • 현재 외부 컬렉션은 생성 후 필드 추가를 지원합니다. 필드 삭제, 필드 이름 변경, 필드 데이터 유형 변경, 벡터 차원 변경 또는 external_field 재매핑과 같은 기타 스키마 변경은 지원되지 않습니다.

  • 외부 데이터 소스에 이미 존재하는 필드만 추가할 수 있습니다. 이 작업은 기존 외부 필드를 Milvus 필드에 매핑합니다. 외부 데이터 소스에 새 필드를 생성하거나 소스 데이터를 역방향으로 채우는 작업은 수행하지 않습니다.

  • 기존 외부 컬렉션에 SPARSE_FLOAT_VECTOR 필드를 추가하는 기능은 지원되지 않습니다.

  • 기존 외부 컬렉션에 StructArray 필드를 추가하는 기능은 지원되지 않습니다. 외부 컬렉션에 StructArray 필드가 필요한 경우, 컬렉션을 생성할 때 컬렉션 스키마에서 해당 필드를 정의하십시오.

필드 추가

외부 컬렉션에 필드를 추가하기 전에, 해당 필드가 외부 데이터 소스에 이미 존재하는지 확인하십시오. 그런 다음 ` add_collection_field() `를 호출하여 ` external_field `를 외부 데이터 소스의 필드 이름으로 설정함으로써 Milvus에서 해당 필드를 노출시키십시오. ` data_type `를 외부 데이터 소스의 필드와 일치하는 Milvus 데이터 유형으로 설정하십시오. 예를 들어, 매핑된 필드가 배정밀도 값을 저장하는 경우 ` DataType.DOUBLE`를 사용하십시오.

관리되는 컬렉션과 달리, 추가된 필드의 값은 외부 컬렉션을 새로 고친 후에 외부 데이터 소스에서 읽혀집니다.

스칼라 필드 추가

쿼리 결과에 필드를 반환하거나 필터에서 사용하려는 경우 add_collection_field() 을 사용하여 스칼라 필드를 추가합니다. 다음 예제는 외부 데이터 소스의 score 필드에 매핑되는 score 필드를 추가합니다.

from pymilvus import DataType, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus",
)

client.add_collection_field(
    collection_name="product_embeddings",
    field_name="score",
    data_type=DataType.DOUBLE,
    nullable=True,
    external_field="score",
)

이 예제에서 ` score `은 Milvus 필드 이름이며, ` external_field="score" `은 이를 외부 데이터 소스의 ` score ` 필드에 매핑합니다. 컬렉션이 이미 생성된 후에 필드가 추가되므로 ` nullable=True `을 설정해야 합니다.

벡터 필드 추가

외부 데이터 소스에 이미 벡터 값이 포함되어 있는 경우 벡터 필드를 추가할 수도 있습니다. 외부 데이터 소스의 벡터 필드와 일치하도록 벡터 data_typedim 을 설정하십시오.

다음 예제에서는 image_embedding_v2 라는 이름의 밀집 벡터 필드를 추가합니다.

from pymilvus import DataType, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus",
)

client.add_collection_field(
    collection_name="product_embeddings",
    field_name="image_embedding_v2",
    data_type=DataType.FLOAT_VECTOR,
    dim=768,
    nullable=True,
    external_field="image_embedding_v2",
)

추가된 벡터 필드에 대해 벡터 검색을 실행할 계획이라면, 외부 컬렉션을 새로 고치기 전에 해당 필드에 대한 인덱스를 생성하십시오.

index_params = client.prepare_index_params()

index_params.add_index(
    field_name="image_embedding_v2",
    index_type="AUTOINDEX",
    metric_type="COSINE",
)

client.create_index(
    collection_name="product_embeddings",
    index_params=index_params,
)

외부 컬렉션 새로 고침

외부 컬렉션 스키마를 수정한 후에는 외부 컬렉션을 새로 고침하여 Milvus가 외부 컬렉션 메타데이터를 업데이트하고, 쿼리, 검색 및 필터 결과에 스키마 변경 사항이 반영되도록 하십시오.

client.refresh_external_collection(
    collection_name="product_embeddings"
)

번역DeepL

관리형 Milvus를 무료로 사용해 보세요

Zilliz Cloud는 번거로움이 없으며, Milvus 기반으로 10배 더 빠릅니다.

시작하기
피드백

이 페이지가 도움이 되었나요?