Modifier le schéma d'une collection externeCompatible with Milvus 3.0.x
Les sources de données externes évoluent souvent après la création d’une collection externe. Par exemple, une table Lakehouse qui stocke déjà des embeddings peut par la suite inclure un nouveau champ scalaire, tel qu’un score, une catégorie ou un horodatage, que vous souhaitez faire apparaître dans les résultats de requête ou utiliser dans des filtres.
Au lieu de recréer la collection externe ou de copier les données sources dans Milvus, ajoutez un champ Milvus qui correspond au champ existant dans la source de données externe. Après avoir ajouté le champ, actualisez la collection externe afin que le nouveau champ puisse être utilisé dans les requêtes et les recherches.
Limites
Les collections externes prennent actuellement en charge l’ajout de champs après leur création. Les autres modifications de schéma, telles que la suppression de champs, le renommage de champs, la modification des types de données des champs, la modification des dimensions des vecteurs ou le remappage d’
external_field, ne sont pas prises en charge.Vous ne pouvez ajouter qu’un champ qui existe déjà dans la source de données externe. Cette opération mappe un champ externe existant à un champ Milvus. Elle ne crée pas de nouveau champ dans la source de données externe et ne remplit pas rétrospectivement les données source.
L’ajout de champs de type «
SPARSE_FLOAT_VECTOR» à une collection externe existante n’est pas pris en charge.L’ajout de champs StructArray à une collection externe existante n’est pas pris en charge. Si votre collection externe nécessite un champ StructArray, définissez-le dans le schéma de la collection lors de sa création.
Ajouter un champ
Avant d’ajouter un champ à une collection externe, vérifiez que ce champ existe déjà dans la source de données externe. Appelez ensuite la méthode ` add_collection_field() ` pour exposer ce champ dans Milvus en définissant ` external_field ` sur le nom du champ dans la source de données externe. Définissez ` data_type ` sur le type de données Milvus correspondant au champ de la source de données externe. Par exemple, si le champ mappé stocke des valeurs en double précision, utilisez ` DataType.DOUBLE`.
Contrairement aux collections gérées, les valeurs du champ ajouté sont lues à partir de la source de données externe après l’actualisation de la collection externe.
Ajouter un champ scalaire
Utilisez ` add_collection_field() ` pour ajouter un champ scalaire lorsque vous souhaitez renvoyer ce champ dans les résultats d’une requête ou l’utiliser dans des filtres. L’exemple suivant ajoute un champ ` score ` qui est mappé au champ ` score ` de la source de données externe.
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",
)
Dans cet exemple, « score » est le nom du champ Milvus et « external_field="score" » le mappe au champ « score » de la source de données externe. Définissez « nullable=True », car le champ est ajouté après la création de la collection.
Ajouter un champ vectoriel
Vous pouvez également ajouter un champ vectoriel si la source de données externe contient déjà les valeurs vectorielles. Définissez le vecteur data_type et dim de manière à ce qu’ils correspondent au champ vectoriel de la source de données externe.
L’exemple suivant ajoute un champ vectoriel dense nommé 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",
)
Si vous prévoyez d’effectuer une recherche vectorielle sur le champ vectoriel ajouté, créez un index pour ce champ avant d’actualiser la collection externe.
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,
)
Actualiser la collection externe
Après avoir modifié le schéma d’une collection externe, actualisez cette dernière afin que Milvus mette à jour ses métadonnées et que la modification du schéma soit prise en compte dans les résultats des requêtes, des recherches et des filtrages.
client.refresh_external_collection(
collection_name="product_embeddings"
)