目前,我的数据是在azure cosmos db(DocumentDB)中使用错误或未优化的分区键。现在我想更新分区密钥并重新分发我的数据,但无法弄明白。我该怎么办?
答案 0 :(得分:7)
现在我想更新分区密钥并重新分发我的数据,但不是 能够弄清楚我该怎么做。
目前,无法更新集合中的分区键属性或更改文档中的分区键值。
如果要更改分区键属性,则需要删除该集合并创建一个具有正确分区键属性的新集合。
同样,如果您希望更新文档中的分区键值,则必须先删除文档并使用正确的分区键值创建新文档。
答案 1 :(得分:0)
首先,通过使用V3版本的SDK来利用自动迁移功能。
之后,您的容器定义将使用_partitionKey
属性进行增强。
重要的一点是,容器中的现有文档不会自动迁移。
您将需要重新分区现有的文档,方法是通过脚本或程序逐个读取它们,然后使用文档中的_partitionKey
属性将它们重新写回。
例如,您可以结合使用Item Id和PartitionKey.None
遍历现有文档,
CosmosItemResponse<MyItem> readResponse =
await migratedContainer.Items.ReadItemAsync<MyItem>(
partitionKey: PartitionKey.None,
id: device.Id
);
有关更多信息,请参考this Microsoft documentation:
可选:批量更新
您可以利用Bulk更新库,该库在.NET和Java版本中可用。 Microsoft documentation link
答案 2 :(得分:0)
在同一个容器中是不可能的,但是您可以在同一个数据库中创建具有相同或不同分区键的新容器,然后您可以在源集合之上配置 ADF 管道(您可以使用派生列更新分区键)并转储到目标集合中。