2017-09-05 86 views
0

是否可以在azure管道中调用cosmos db触发器?流水线只是将数据从azrue存储复制到cosmos db集合,并且需要调用预触发。如何为复制活动指定触发器ID?Azure cosmos db触发器

+0

您在使用Azure的功能呢?你能描述一下你正在使用或计划建设什么样的事件吗?当你说Azure Storage时,你的意思是Blobs?队列?表? –

+0

@MatiasQuaranta,谈到Azure存储我的意思是Blobs。我的管道只是将数据集形式blob复制到cosmos db。我知道如何调用触发器,例如Node.js documentdb client api。但我应该这样做。 –

+0

因此,如果我理解正确,当Blob上传到Azure存储时,您想要将数据保存到Cosmos数据库中?您要存储的信息是Blob或其某些属性的内容? –

回答

0

根据您的说法,您可以通过使用带有Blob TriggerDocumentDB output binding的Azure函数来解决此问题。

类似一个functions.json到:

{ 
    "disabled": false, 
    "bindings": [ 
     { 
      "name": "myBlob", 
      "type": "blobTrigger", 
      "direction": "in", 
      "path": "<name-of-the-folder-where-files-get-uploaded>", 
      "connection":"MyStorageAccount" 
     }, 
     { 
      "name": "documentToSave", 
      "type": "documentDB", 
      "databaseName": "MyDatabase", 
      "collectionName": "MyCollection", 
      "createIfNotExists": true, 
      "connection": "MyAccount_COSMOSDB",  
      "direction": "out" 
     } 
    ] 
} 

和函数体可以是这样的:

// Blob trigger binding to a CloudBlockBlob 
#r "Microsoft.WindowsAzure.Storage" 

using Microsoft.WindowsAzure.Storage.Blob; 

public static void Run(CloudBlockBlob myBlob, out object documentToSave, TraceWriter log) 
{ 
    // some logic to read the blob and parse it 

    documentToSave = new { 
     id = "some value", 
     .. other properties here 
     }; 
} 
+0

感谢您的明确解释。但是我应该在复制管道启动时调用cosmos db pre-trigger。在每一个复制我应该检查blob文件是否存在它cdb集合,如果真正取代它。这是cdb预触发业务逻辑。 Blob触发器不能解决我的问题。 –

+0

无论何时修改/上传文档,Blob触发器都会触发。 DocumentDB输出绑定将保存或更新文档。您必须确保文档的id属性设置正确(可能与文档本身相关,如名称)。 –

+0

我试图将已有的json复制到cosmos db集合时出错。我希望使用上述的cosmos db预触发来解决这个问题。 –