我正在使用azure数据工厂的复制活动将数据从blob中的csv文件复制到CosmosDB(使用SQL API)。如果不导入任何架构,则在Sink的链接服务中,执行时的复制活动将从CSV读取标头,然后将数据以json格式保存在cosmosDB中。到这里为止一切正常。
我需要在cosmosDB中添加的数据中添加一个批处理ID列(批处理ID为GUID / pipelinerunID),以便我可以跟踪集合中的哪些数据已作为批复制。
如何保留所有源列并在其中添加批次ID列并将其保存在cosmos数据库中。
该模式不是固定的,可以在每个adf管道触发器上更改,因此无法进行导入模式,也不能在复制活动中进行一对一的列映射。
答案 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
不匹配。
希望它对您有帮助。