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