外部コレクションのスキーマ変更
外部データソースは、外部コレクションの作成後に変更されることがよくあります。たとえば、すでに埋め込みを格納しているレイクハウステーブルに、後からスコア、カテゴリ、タイムスタンプなどの新しいスカラーフィールドが追加され、それをクエリ結果で返したりフィルターで使用したりしたい場合があります。
外部コレクションを再作成したり、ソースデータを Zilliz Cloud にコピーしたりする代わりに、外部データソースの既存フィールドにマッピングする Zilliz Cloud フィールドを追加します。フィールドを追加したら、外部コレクションをリフレッシュして、新しいフィールドをクエリや検索で使用できるようにします。
制限事項
-
現在、外部コレクションでは作成後のフィールド追加がサポートされています。フィールドの削除、フィールド名の変更、フィールドのデータ型変更、ベクトル次元の変更、
external_fieldの再マッピングなど、その他のスキーマ変更はサポートされていません。 -
追加できるのは、外部データソースにすでに存在するフィールドのみです。この操作は、既存の外部フィールドを Zilliz Cloud フィールドにマッピングするものであり、外部データソースに新しいフィールドを作成したり、ソースデータをバックフィルしたりするものではありません。
-
既存の外部コレクションへの
SPARSE_FLOAT_VECTORフィールドの追加はサポートされていません。 -
既存の外部コレクションへの StructArray フィールドの追加はサポートされていません。外部コレクションに StructArray フィールドが必要な場合は、コレクションの作成時にコレクションスキーマで定義します。
フィールドの追加
外部コレクションにフィールドを追加する前に、そのフィールドが外部データソースにすでに存在することを確認してください。次に、add_collection_field() を呼び出し、external_field に外部データソースのフィールド名を設定することで、Zilliz Cloud 上でそのフィールドを利用可能にします。また、data_type には、外部データソースのフィールドに対応する Zilliz Cloud データ型を設定します。たとえば、マッピング先のフィールドが倍精度値を格納する場合は、DataType.DOUBLE を使用します。
マネージドコレクションとは異なり、追加したフィールドの値は、外部コレクションのリフレッシュ後に外部データソースから読み取られます。
スカラーフィールドの追加
クエリ結果でフィールドを返したり、フィルターで使用したりする場合は、add_collection_field() を使用してスカラーフィールドを追加します。次の例では、外部データソースの score フィールドにマッピングされる score フィールドを追加しています。
from pymilvus import DataType, MilvusClient
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN",
)
client.add_collection_field(
collection_name="product_embeddings",
field_name="score",
data_type=DataType.DOUBLE,
nullable=True,
external_field="score",
)
この例では、score が Zilliz Cloud 上のフィールド名であり、external_field="score" によって外部データソースの score フィールドにマッピングされます。コレクション作成後にフィールドを追加するため、nullable=True を設定します。
ベクトルフィールドの追加
外部データソースにすでにベクトル値が含まれている場合は、ベクトルフィールドを追加することもできます。ベクトルの data_type と dim を、外部データソースのベクトルフィールドに合わせて設定してください。
次の例では、image_embedding_v2 という名前の密ベクトルフィールドを追加しています。
from pymilvus import DataType, MilvusClient
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN",
)
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,
)
外部コレクションのリフレッシュ
外部コレクションのスキーマを変更した後は、外部コレクションをリフレッシュしてください。これにより、Zilliz Cloud が外部コレクションのメタデータを更新し、クエリ、検索、フィルター結果にスキーマの変更が反映されます。
client.refresh_external_collection(
collection_name="product_embeddings"
)