外部コレクションのスキーマを変更する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_type およびdim を設定します。
次の例では、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"
)