Azure cosmosdb 使用Azure数据工厂更新Cosmos db中的现有文档
我已经创建了一个数据工厂,使用Blob中存储的数据作为csv文件来更新我现有的Cosmos数据库。 csv文件包含两个字段列“X”和“Y”及其值。 我想在我现有的Cosmos数据库中插入一个新的键作为Y,过滤条件是X列,这是唯一的 我已经创建了管道,并在cosmosdb中插入了文档。 但在当前管道中,旧数据被删除,只插入了Y列 cosmos数据库中当前文档中的数据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
{
"_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你用数据工厂找到解决方案了吗?我有一个类似的用例。无法找到一个好的解决方案,但找到了一个不是最佳解决方案的替代方案@拉贾塔罗拉