メインコンテンツまでスキップ

外部コレクションのスキーマを変更する

外部データソースは、外部コレクションを作成した後で変化することがよくあります。たとえば、すでに埋め込みを格納しているレイクハウステーブルに、後から、クエリ結果で返したりフィルターで使用したりする score、category、timestamp などの新しいスカラーフィールドが含まれることがあります。

外部コレクションを再作成したり、ソースデータを Zilliz Cloud にコピーしたりする代わりに、外部データソース内の既存のフィールドにマッピングする Zilliz Cloud フィールドを追加します。フィールドを追加した後は、外部コレクションをリフレッシュして、新しいフィールドをクエリと検索で使用できるようにします。

制限事項​

  • 外部コレクションは現在、作成後のフィールド追加をサポートしています。フィールドの削除、フィールドの名前変更、フィールドデータ型の変更、ベクトル次元の変更、external_field の再マッピングなど、その他のスキーマ変更はサポートされていません。

  • 追加できるのは、外部データソースにすでに存在するフィールドだけです。この操作は、既存の外部フィールドを Zilliz Cloud フィールドにマッピングします。外部データソースに新しいフィールドを作成したり、ソースデータをバックフィルしたりはしません。

  • 既存の外部コレクションへの SPARSE_FLOAT_VECTOR フィールドの追加はサポートされていません。

  • 既存の外部コレクションへの StructArray フィールドの追加はサポートされていません。外部コレクションで StructArray フィールドが必要な場合は、コレクションの作成時にコレクションスキーマで定義してください。

フィールドを追加する​

外部コレクションにフィールドを追加する前に、そのフィールドが外部データソースにすでに存在することを確認してください。次に、external_field を外部データソース内のフィールド名に設定して add_collection_field() を呼び出し、そのフィールドを Zilliz Cloud に公開します。data_type には、外部データソース内のフィールドに一致する Zilliz Cloud データ型を設定します。たとえば、マッピングするフィールドが倍精度値を格納している場合は、DataType.DOUBLE を使用します。

マネージドコレクションとは異なり、追加したフィールドの値は、外部コレクションをリフレッシュした後に外部データソースから読み取られます。

スカラーフィールドを追加する​

クエリ結果でフィールドを返したり、フィルターで使用したりする場合は、add_collection_field() を使用してスカラーフィールドを追加します。次の例では、外部データソース内の score フィールドにマッピングする score フィールドを追加します。

python
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 という名前の密ベクトルフィールドを追加します。

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

追加したベクトルフィールドでベクトル検索を実行する予定がある場合は、外部コレクションをリフレッシュする前に、そのフィールドのインデックスを作成してください。

python
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 が外部コレクションのメタデータを更新し、スキーマ変更がクエリ、検索、フィルターの結果に反映されるようにします。

python
client.refresh_external_collection(
collection_name="product_embeddings"
)