【问题标题】:Get all the Partition Keys in Azure Cosmos DB collection获取 Azure Cosmos DB 集合中的所有分区键
【发布时间】:2017-12-18 23:28:58
【问题描述】:

我最近开始在我们的项目中使用 Azure Cosmos DB。出于报告目的,我们需要获取集合中的所有分区键。我找不到任何合适的 API 来实现它。

【问题讨论】:

    标签: azure azure-cosmosdb


    【解决方案1】:

    更新:根据下面 cmets 中的 Brian 所说,现在支持 DISTINCT。尝试类似:

    SELECT DISTINCT c.partitionKey FROM c
    

    先前的答案(如果 SELECT DISTINCT... 方法无法扩展,这仍然是最好的方法)

    获取实际分区键值的唯一方法是对该字段进行唯一聚合。但是,有一种相对简单的方法可以获取分区键范围。据我所知,任何 SDK 都不直接支持它,但您可以直接点击https://{your endpoint domain}.documents.azure.com/dbs/{your collection's uri fragment}/pkranges 的 REST 端点来拉回每个分区的分区键范围。请注意,下边是包容性的,因此您可以使用它来进行自己的扇出。

    警告:在您检索它们的时间和您对它们做某事的时间之间,pkrange 可能会发生变化的可能性很小。要么接受这种微不足道的风险,要么围绕它编写代码。

    【讨论】:

    • 我们可以得到cosmosdb集合的分区键
    • 你是怎么做到的?
    • 令人惊奇的是,鉴于 PK 的重要性,没有直接的方法来阅读它们。除非我遗漏了什么,否则检索范围会为您提供范围 ID,这仅在您想对每个范围单独运行相同的唯一聚合查询时有用(通过在 FeedOption 上设置范围 ID)。它并没有真正让你更接近潜在的价值。尽管如此,.NET SDK 确实允许您通过 ReadPartitionKeyRangeFeedAsync 查询范围。
    • 第一句话就是你所需要的。根据我自己的测试,对 DISTINCT 有(非官方的)支持,这意味着您可以执行“SELECT DISTINCT c.partitionKey FROM c”之类的操作并为自己获取一个列表。
    • SELECT DISTINCT c.partitionKey FROM c 的问题在于它是一个昂贵的查询(321 RU 在一个非常小的有 6 个分区的数据库中)
    【解决方案2】:

    此功能目前可用。不过有一个反馈项here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多