Alterar o esquema de uma coleção externaCompatible with Milvus 3.0.x

As fontes de dados externas evoluem frequentemente após a criação de uma coleção externa. Por exemplo, uma tabela do Lakehouse que já armazena embeddings pode vir a incluir posteriormente um novo campo escalar, como uma pontuação, categoria ou carimbo de data/hora, que se pretenda devolver nos resultados da consulta ou utilizar em filtros.

Em vez de recriar a coleção externa ou copiar os dados de origem para o Milvus, adicione um campo do Milvus que corresponda ao campo existente na fonte de dados externa. Após adicionar o campo, atualize a coleção externa para que o novo campo possa ser utilizado em consultas e pesquisas.

Limites

  • Atualmente, as coleções externas suportam a adição de campos após a criação. Outras alterações no esquema, tais como eliminar campos, renomear campos, alterar tipos de dados de campos, alterar dimensões de vetores ou remapear external_field, não são suportadas.

  • Só é possível adicionar um campo que já exista na fonte de dados externa. Esta operação mapeia um campo externo existente para um campo do Milvus. Não cria um novo campo na fonte de dados externa nem preenche retroativamente os dados da fonte.

  • A adição de campos « SPARSE_FLOAT_VECTOR » a uma coleção externa existente não é suportada.

  • A adição de campos «StructArray» a uma coleção externa existente não é suportada. Se a sua coleção externa necessitar de um campo «StructArray», defina-o no esquema da coleção ao criá-la.

Adicionar um campo

Antes de adicionar um campo a uma coleção externa, verifique se o campo já existe na fonte de dados externa. Em seguida, chame ` add_collection_field() ` para expor esse campo no Milvus, definindo ` external_field ` como o nome do campo na fonte de dados externa. Defina ` data_type ` como o tipo de dados do Milvus que corresponde ao campo na fonte de dados externa. Por exemplo, se o campo mapeado armazenar valores de precisão dupla, utilize ` DataType.DOUBLE`.

Ao contrário das coleções geridas, os valores do campo adicionado são lidos a partir da fonte de dados externa após atualizar a coleção externa.

Adicionar um campo escalar

Utilize add_collection_field() para adicionar um campo escalar quando pretender devolver o campo nos resultados da consulta ou utilizá-lo em filtros. O exemplo seguinte adiciona um campo score que é mapeado para o campo score na fonte de dados externa.

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",
)

Neste exemplo, « score » é o nome do campo no Milvus e « external_field="score" » mapeia-o para o campo « score » na fonte de dados externa. Defina « nullable=True », uma vez que o campo é adicionado após a coleção já ter sido criada.

Adicionar um campo vetorial

Também é possível adicionar um campo vetorial se a fonte de dados externa já contiver os valores vetoriais. Defina o vetor data_type e dim de forma a corresponderem ao campo vetorial na fonte de dados externa.

O exemplo seguinte adiciona um campo vetorial denso denominado 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",
)

Se pretender executar uma pesquisa vetorial no campo vetorial adicionado, crie um índice para o campo antes de atualizar a coleção externa.

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,
)

Atualizar a coleção externa

Após alterar o esquema de uma coleção externa, atualize a coleção externa para que o Milvus atualize os metadados da coleção externa e torne a alteração do esquema efetiva nos resultados de consultas, pesquisas e filtragens.

client.refresh_external_collection(
    collection_name="product_embeddings"
)

Traduzido porDeepL

Experimente o Milvus gerenciado gratuitamente

O Zilliz Cloud é descomplicado, powered by Milvus e 10x mais rápido.

Começar
Feedback

Esta página foi útil?