跳到主要内容

插入 Entity

Collection 中的 Entity 是指共享相同字段集的数据记录。存储在每个字段中的一条数据组成一个 Entity。本节介绍如何向 Collection 中插入一条数据以及在插入 Entity 时的相关注意事项。

说明
  • Collection 创建完成后添加的字段:如果您在 Collection 创建完成后向其添加字段,但在插入数据时并未指定该字段的取值,Milvus 会自动使用该字段的默认值(如有)或 NULL(如开启)填充。更多内容,可以参阅向 Collection 添加字段。

  • 重复数据处理:标准的 insert 操作并不会检查主键重复的记录。如果您在插入数据时指定了一个重复的主键,仍然会创建一个新的 Entity,从而导致重复数据和潜在的应用问题。您可以通过使用 upsert 操作来更新相关 Entity 或修复重复主键的问题。更多内容,可以参阅 Upsert Entity。

概述​

在 Zilliz Cloud 中,Entity 是指 Collection 中共享相同 Schema 的数据记录,存储在每个字段中的同行数据组成一个 Entity。因此,同一个 Collection 中的 Entity 具有相同的属性(如字段名称、数据类型、其他限制等)。

在向 Collection 插入 Entity 时,待插入的 Entity 只有在包含 Schema 中定义的所有字段时才能成功插入。插入的 Entity 将会按照插入的先后顺序进入名为 _default 的 Partition 中。在确保某个 Partition 存在的前提下,你也可以通过在插入请求中指定该 Partition 名称的方式向该 Partition 中插入 Entity。

为了保持 Collection 的扩展性,Zilliz Cloud 也支持动态字段。在开启动态字段后,您可以向 Collection 中插入 Schema 中未定义的字段。这些字段和值将会以键值对的形式存放在一个名为 $meta 的保留字段中。关于动态字段的相关内容,可以参考Dynamic Field。

向 Collection 中插入 Entity​

在插入数据前,请按照 Schema 将数据组织成一个字典列表,每个字典代表一个 Entity,包含 Schema 中定义的所有字段。如果 Collection 启用了动态字段,每个字典还可以携带 Schema 中没有定义的字段。

本节将演示如何向使用最简建表方式创建的 Collection 中插入 Entity。通过这种方式创建的 Collection 仅有两个字段,字段名分别为 id 和 vector。另外,该 Collection 还启用了动态字段,因此示例代码中的 Entity 均携带了一个 Schema 中未定义的字段 color。

python
from pymilvus import MilvusClient

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

data=[
{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
]

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

print(res)

# Output
# {'insert_count': 10, 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

向 Partition 中插入 Entity​

您还可以向指定的 Partition 中插入 Entity。示例代码假设 Collection 中存在一个名为 partitionA 的 Partition。

python
data=[
{"id": 10, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 11, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 12, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 13, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 14, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 15, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 16, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 17, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 18, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 19, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
]

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

print(res)

# Output
# {'insert_count': 10, 'ids': [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]}