我们在 Cosmos DB 容器中有超过 5000 个文档。要求是将它们全部一一处理并导入到另一个 Cosmos DB 容器中。
我尝试了 ADF 查找和 Foreach 活动来循环文档和流程。由于 ADF 查找活动仅限于获取 5000 个文档,因此我们希望使用 OFFSET 和 LIMIT 选项循环剩余部分。
但是 Cosmos DB 不支持 OFFSET 和 LIMIT,出现以下错误。
ErrorCode=InvalidParameter,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The 属性“”的值无效:“跨分区偏移/限制” 不是 支持。'.,Source=,''Type=System.ArgumentException,Message=Cross 分区 OFFSET/LIMIT 不是 支持。,来源=Microsoft.Azure.Documents.Client,'
谁能建议如何实现上述要求? 我们也没有任何序列号列可以循环。
我确实同意@David Makogon的评论,即在这种情况下循环遍历所有文档可能不是更好的选择。要根据循环中的条件处理每个文档或过滤某些文档,您可以尝试使用 ADF 数据流 作为解决方法。
以 Cosmos SQL 源容器数据集作为源,目标数据集作为数据流中的接收器。
在数据流中,您可以使用派生列或过滤器转换来修改每个文档中的任何字段或根据给定条件过滤文档,如下面的演示所示。
示例表达:
concat(name,'_new string')
您还可以使用 select 转换从源中删除任何键属性。
在源和接收器之间添加这些转换。
在接收器中,您可以从源文档属性中指定目标容器的分区键名称。同样在这里,您可以指定是否重新创建目标容器。
在管道中使用数据流活动从管道运行此数据流。运行数据流时,它将按照转换中给定的修改或条件将所有源文档从源复制到目标容器,如下例所示。