Azure cosmosdb 使用Azure数据工厂更新Cosmos db中的现有文档

Azure cosmosdb 使用Azure数据工厂更新Cosmos db中的现有文档,azure-cosmosdb,azure-storage-blobs,azure-data-factory,azure-cosmosdb-mongoapi,Azure Cosmosdb,Azure Storage Blobs,Azure Data Factory,Azure Cosmosdb Mongoapi,我已经创建了一个数据工厂,使用Blob中存储的数据作为csv文件来更新我现有的Cosmos数据库。 csv文件包含两个字段列“X”和“Y”及其值。 我想在我现有的Cosmos数据库中插入一个新的键作为Y,过滤条件是X列,这是唯一的 我已经创建了管道,并在cosmosdb中插入了文档。 但在当前管道中,旧数据被删除,只插入了Y列 cosmos数据库中当前文档中的数据 { "_id" : ObjectId("5dad5adbfa882146ea8e7a0e"), "x" : "U

我已经创建了一个数据工厂,使用Blob中存储的数据作为csv文件来更新我现有的Cosmos数据库。 csv文件包含两个字段列“X”和“Y”及其值。 我想在我现有的Cosmos数据库中插入一个新的键作为Y,过滤条件是X列,这是唯一的

我已经创建了管道,并在cosmosdb中插入了文档。 但在当前管道中,旧数据被删除,只插入了Y列

cosmos数据库中当前文档中的数据

  {
    "_id" : ObjectId("5dad5adbfa882146ea8e7a0e"),
    "x" : "UUID",
   "old_key" : true
  }
csv文件中的数据

   x,new_key
   UUID, "new_value"
预期产量

   {
     "_id" : ObjectId("5dad5adbfa882146ea8e7a0e"),
      "x" : "UUID",
     "old_key" : true,
    "new_key":"new_value"

    }
我尝试的输出(旧键已删除)


您希望为cosmos db实现增量更新或部分更新

{
    "_id" : ObjectId("5dad5adbfa882146ea8e7a0e"),
    "x" : "UUID",
   "old_key" : true
}
改为:

{
     "_id" : ObjectId("5dad5adbfa882146ea8e7a0e"),
      "x" : "UUID",
     "old_key" : true,
    "new_key":"new_value"
}
据我所知,目前cosmos db不支持部分更新。请看这个和这个(我知道这个功能缺失已经持续很长时间了…)。因此,您必须在新文档中包含除
“\u id”
之外的所有属性

我做了一个简单的测试:

1.将csv文件加载到cosmos数据库:

_id,x,A
5daeb1eda34d640184a71d47,123,ValueA
_id,x,B
5daeb1eda34d640184a71d47,123,ValueBBB
2.将新csv文件加载到cosmos db中:

_id,x,A
5daeb1eda34d640184a71d47,123,ValueA
_id,x,B
5daeb1eda34d640184a71d47,123,ValueBBB
3.打印两个输出:


您希望对cosmos db实施增量更新或部分更新

{
    "_id" : ObjectId("5dad5adbfa882146ea8e7a0e"),
    "x" : "UUID",
   "old_key" : true
}
改为:

{
     "_id" : ObjectId("5dad5adbfa882146ea8e7a0e"),
      "x" : "UUID",
     "old_key" : true,
    "new_key":"new_value"
}
据我所知,目前cosmos db不支持部分更新。请看这个和这个(我知道这个功能缺失已经持续很长时间了…)。因此,您必须在新文档中包含除
“\u id”
之外的所有属性

我做了一个简单的测试:

1.将csv文件加载到cosmos数据库:

_id,x,A
5daeb1eda34d640184a71d47,123,ValueA
_id,x,B
5daeb1eda34d640184a71d47,123,ValueBBB
2.将新csv文件加载到cosmos db中:

_id,x,A
5daeb1eda34d640184a71d47,123,ValueA
_id,x,B
5daeb1eda34d640184a71d47,123,ValueBBB
3.打印两个输出:


在我的情况下,这就像在每个现有文档中添加一个新密钥,该密钥基于公共密钥(唯一,密钥X)。@Tech\u ninja是的,附加一个新密钥是部分更新,不是吗?正如我的回答所说,不支持部分更新。如果你想附加一个新的密钥,你必须传递一个总的旧文档加上一个新的密钥。是的,这是相同的,有没有任何方法可以使用ADF来完成?所以整个过程就像-从csv读取密钥>根据匹配的密钥查询cosmos db(用于获取旧文档)>然后追加新密钥,然后将其插入cosmos db。谢谢。@Tech_ninja你用数据工厂找到解决方案了吗?我有一个类似的用例。无法找到一个好的解决方案,但找到了一个不是最佳解决方案的替代方案@RajatAroraIn就我而言,这就像在每个现有文档中添加一个新密钥,该密钥基于公共密钥(唯一,密钥X)。@Tech_ninja是的,附加一个新密钥是部分更新,不是吗?正如我的回答所说,不支持部分更新。如果你想附加一个新的密钥,你必须传递一个总的旧文档加上一个新的密钥。是的,这是相同的,有没有任何方法可以使用ADF来完成?所以整个过程就像-从csv读取密钥>根据匹配的密钥查询cosmos db(用于获取旧文档)>然后追加新密钥,然后将其插入cosmos db。谢谢。@Tech_ninja你用数据工厂找到解决方案了吗?我有一个类似的用例。无法找到一个好的解决方案,但找到了一个不是最佳解决方案的替代方案@拉贾塔罗拉