通过Azure数据工厂的复制活动在cosmosDB中保存的数据中添加其他列

时间:2018-06-21 12:35:54

标签: copy azure-cosmosdb azure-data-factory

我正在使用azure数据工厂的复制活动将数据从blob中的csv文件复制到CosmosDB(使用SQL API)。如果不导入任何架构,则在Sink的链接服务中,执行时的复制活动将从CSV读取标头,然后将数据以json格式保存在cosmosDB中。到这里为止一切正常。

我需要在cosmosDB中添加的数据中添加一个批处理ID列(批处理ID为GUID / pipelinerunID),以便我可以跟踪集合中的哪些数据已作为批复制。

如何保留所有源列并在其中添加批次ID列并将其保存在cosmos数据库中。

该模式不是固定的,可以在每个adf管道触发器上更改,因此无法进行导入模式,也不能在复制活动中进行一对一的列映射。

1 个答案:

答案 0 :(得分:0)

据我所知,当您将数据从csv传输到cosmos db时,无法添加自定义列。建议您在将文档创建到数据库中时使用Azure Function Cosmos DB Trigger添加batchId作为解决方法。

#r "Microsoft.Azure.Documents.Client"
#r "Newtonsoft.Json"
#r "Microsoft.Azure.DocumentDB.Core"
using System;
using System.Collections.Generic;
using Microsoft.Azure.Documents;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.Azure.Documents.Client;a

public static void Run(IReadOnlyList<Document> documents, TraceWriter log)
{
    if (documents != null && documents.Count > 0)
    {
        private static readonly string endpointUrl = "https://***.documents.azure.com:443/";
        private static readonly string authorizationKey = "***";
        private static readonly string databaseId = "db";
        private static readonly string collectionId = "coll";

        private static DocumentClient client;

        documents[0].SetPropertyValue("batchId","123");

        var document = client.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(databaseId, collectionId, documents[0].id), documents[0]).Result.Resource;
        log.Verbose("document Id " + documents[0].Id);
    }
}

但是,您似乎需要自己指定batchId,而这与天蓝色数据工厂中的batchId不匹配。

希望它对您有帮助。