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

スナップショットをデータソースとして使用する

スナップショットメタデータの JSON パスを external_source として使用し、external_spec.format を "milvus-table" に設定することで、Milvus スナップショットから外部コレクションを作成できます。

外部コレクションを更新すると、Milvus はソースセグメントのマニフェストをターゲットの外部セグメントにマッピングします。メイン列のデータはスナップショットソースから参照されたままになり、生成関数の出力や変換された削除ログなど、ターゲットが所有するデータはターゲットコレクションの下に書き込まれます。

事前準備​

外部コレクションを作成する前に、以下の条件を満たしていることを確認してください。

  • ソーススナップショットが、Milvus v3.0.x サーバーと互換性のある Zilliz Cloud クラスター内のコレクションから作成されていること。

  • ソースコレクション自体が外部コレクションではないこと。

  • external_source が、具体的なスナップショットメタデータ JSON ファイル(たとえば s3://bucket/snapshots/{source_collection_id}/metadata/{snapshot_id}.json)を指していること。

  • 各ターゲットデータフィールドの external_field を、対応するソースフィールド名に設定していること。

  • ターゲットスキーマが、マッピング対象のデータフィールドについてソーススナップショットスキーマと一致していること。

ソーススナップショットが、v3.0.x リリースの Milvus インスタンスと互換性のある Zilliz Cloud クラスターで作成されたコレクションのものではない場合、ソーススキーマがターゲットスキーマと一致しない場合、スナップショットメタデータ JSON にマニフェスト情報がない場合、またはソースが別の外部コレクションである場合は、作成または更新に失敗します。

Milvus スナップショットから外部コレクションを作成する​

次の例では、既存のスナップショットから milvus-table 外部コレクションを作成し、更新します。

ステップ 1: スナップショットメタデータパスを取得する​

通常の Milvus コレクションからスナップショットを作成または選択し、スナップショットの詳細を取得して、そのオブジェクトストレージの場所を取得します。

python
from pymilvus import DataType, MilvusClient

client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN",
)

snapshot_info = client.describe_snapshot(
snapshot_name="analytics_snapshot_20260321",
collection_name="analytics",
)
external_source = f"s3://bucket/{snapshot_info.s3_location}"

ステップ 2: milvus-table 外部コレクションを作成して更新する​

スナップショットのソースコレクションとスキーマが一致する外部コレクションを作成します。external_spec.format を "milvus-table" に設定し、各ターゲットデータフィールドの external_field を対応するソースフィールド名に設定します。

python
schema = client.create_schema(
external_source=external_source,
external_spec="""{
"format": "milvus-table",
"extfs": {
"cloud_provider": "aws",
"region": "us-west-2",
"access_key_id": "YOUR_ACCESS_KEY",
"access_key_value": "YOUR_SECRET_KEY"
}
}""",
)
schema.add_field(
field_name="id",
datatype=DataType.INT64,
is_primary=True,
external_field="id",
)
schema.add_field(
field_name="embedding",
datatype=DataType.FLOAT_VECTOR,
dim=768,
external_field="embedding",
)
client.create_collection(
collection_name="snapshot_external_collection",
schema=schema,
)

データを更新する​

コレクションの準備ができたら、それを更新して、データのメタデータとインデックスを作成します。詳細は、Create an External コレクション を参照してください。