メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

イテレータを使用したデータのエクスポート

このガイドでは、Zilliz Cloudコレクションからデータをエクスポートする方法の例を提供します。

概要について

MilvusのPythonおよびJava SDKは、コレクション内のエンティティをメモリ効率的に反復処理するための一連のイテレータAPIを提供しています。詳細については、「検索イテレータ」を参照してください。

イテレータを使用すると、次の利点があります。

  • シンプルさ:複雑なオフセットリミット設定を排除します。

  • 効率性:必要なデータのみを取得してスケーラブルなデータ取得を提供します。

  • Consistency:ブールフィルタを使用して一貫したデータセット体格を確保します。

これらのAPIを使用して、Zilliz Cloudコレクションから特定またはすべてのエンティティをエクスポートできます。

📘ノート

この機能は、Milvus 2.3. x以上と互換性のあるZilliz Cloudクラスターで利用できます。

準備する

次の手順では、コードを再利用してZilliz Cloudクラスターに接続し、コレクションをすばやく設定し、10,000以上のランダムに生成されたエンティティをコレクションに挿入します。

ステップ1:コレクションを作成する

from pymilvus import MilvusClient

CLUSTER_ENDPOINT = "YOUR_CLUSTER_ENDPOINT"
TOKEN = "YOUR_CLUSTER_TOKEN"

# 1. Set up a Milvus client
client = MilvusClient(
uri=CLUSTER_ENDPOINT,
token=TOKEN
)

# 2. Create a collection
client.create_collection(
collection_name="quick_setup",
dimension=5,
)

ステップ2:ランダムに生成されたエンティティを挿入する

# 3. Insert randomly generated vectors 
colors = ["green", "blue", "yellow", "red", "black", "white", "purple", "pink", "orange", "brown", "grey"]
data = []

for i in range(10000):
current_color = random.choice(colors)
current_tag = random.randint(1000, 9999)
data.append({
"id": i,
"vector": [ random.uniform(-1, 1) for _ in range(5) ],
"color": current_color,
"tag": current_tag,
"color_tag": f"{current_color}_{str(current_tag)}"
})

print(data[0])

# Output
#
# {
# "id": 0,
# "vector": [
# -0.5705990742218152,
# 0.39844925120642083,
# -0.8791287928610869,
# 0.024163154953680932,
# 0.6837669917169638
# ],
# "color": "purple",
# "tag": 7774,
# "color_tag": "purple_7774"
# }

res = client.insert(
collection_name="quick_setup",
data=data,
)

print(res)

# Output
#
# {
# "insert_count": 10000,
# "ids": [
# 0,
# 1,
# 2,
# 3,
# 4,
# 5,
# 6,
# 7,
# 8,
# 9,
# "(9990 more items hidden)"
# ]
# }

イテレータを使用したデータのエクスポート

イテレータを使用してデータをエクスポートするには、次のようにします:

  1. 検索イテレータを初期化して、検索パラメータと出力フィールドを定義します。batch_sizeパラメータを設定することで、反復ごとにエクスポートするエンティティの数を制限できます。

  2. ループ内でnext()メソッドを使用して、検索結果をページ分割します。

    • メソッドが空の配列を返す場合、ループは終了します。

    • それ以外の場合は、適切な方法でリターンを保存してください。例えば、リターンをファイルに追加したり、データベースに保存したり、他の消費者向けプログラムにフィードしたりすることができます。

  3. すべてのデータが取得されたら、close()メソッドを呼び出してイテレータを閉じます。

次のコードスニペットは、QueryIteratorAPIを使用してエクスポートされたデータをファイルに追加する方法を示しています。

import json
from pymilvus import connections, Collection

CLUSTER_ENDPOINT = "YOUR_CLUSTER_ENDPOINT"
TOKEN = "YOUR_CLUSTER_TOKEN"

connections.connect(
uri=CLUSTER_ENDPOINT,
token=TOKEN
)

collection = Collection("quick_setup")

# 6. Query with iterator

# Initiate an empty JSON file
with open('results.json', 'w') as fp:
fp.write(json.dumps([]))

iterator = collection.query_iterator(
batch_size=10,
expr="color_tag like \"brown_8%\"",
output_fields=["color_tag"]
)

while True:
result = iterator.next()
if not result:
iterator.close()
break

# Read existing records and append the returns
with open('results.json', 'r') as fp:
results = json.loads(fp.read())
results += result

# Save the result set
with open('results.json', 'w') as fp:
fp.write(json.dumps(results))