更新Azure Cosmos数据库分区密钥以重新分发现有数据(文档数据库)

时间:2017-08-21 09:10:09

标签: azure azure-cosmosdb

目前,我的数据是在azure cosmos db(DocumentDB)中使用错误或未优化的分区键。现在我想更新分区密钥并重新分发我的数据,但无法弄明白。我该怎么办?

3 个答案:

答案 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 管道(您可以使用派生列更新分区键)并转储到目标集合中。