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

问题描述 投票:2回答:1

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

我需要在cosmos DB中添加的数据中添加批处理id列(批处理ID为GUID /管道runID),以便我可以跟踪集合中的所有数据被批量复制。

如何保留所有源列并在其中添加批次ID列并将其保存在我的cosmos DB中。

架构不是固定的,可以在每个adf管道触发器上更改,因此无法执行导入架构并在复制活动中执行一个列映射。

copy azure-cosmosdb azure-data-factory
1个回答
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不匹配。

希望它能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.