首页 > 解决方案 > 在追加 blob 的 csv 文件顶部添加标题

问题描述

我正在 Azure 数据工厂中创建一个管道,在其中我使用函数应用程序作为活动之一来转换数据并以 csv 格式存储在附加 blob 容器中。因为我已经在 for 循环中进行了 50 个批次,所以我的函数应用程序要处理 50 次每个订单的数据。我使用以下逻辑在 csv 文件中附加标题。

//首先我根据业务逻辑创建文件 // //csveventcontent 是我的源数据 //

            var dateAndTime = DateTime.Now.AddDays(-1);
            string FileDate = dateAndTime.ToString("ddMMyyyy");
            string FileName = _config.ContainerName + FileDate + ".csv";
            StringBuilder csveventcontent = new StringBuilder();
            OrderEventService obj = new OrderEventService();

//现在我正在检查今天的文件是否存在,如果不存在,我们创建它。//

               if (await appBlob.ExistsAsync() == false)

            {
               await appBlob.CreateOrReplaceAsync(); //CreateOrReplace(); 
              //Append Header
                csveventcontent.AppendLine(obj.GetHeader());
            }

现在的问题是标题在 csv 文件中附加了很多次。有时它没有附加在顶部。可能是由于 parralel 函数应用程序运行了 50 次。

我如何只能一次将标题固定在顶部。我也尝试过使用数据流和逻辑应用程序,但无法做到。如果可以通过代码处理,我猜会更容易。

标签: multithreadingc#-4.0azure-logic-appsasp.net-core-3.1azure-data-factory-2

解决方案


我想你就在那里。它是导致问题的函数应用程序的并发性。最好的方法是使用队列并一一处理消息。或者您可以使用分布式锁来确保一次只有一个函数写入文件。您可以为此使用 blob 租约。

Lease Blob 操作为写入和删除操作创建和管理 Blob 上的锁。锁定持续时间可以是 15 到 60 秒,也可以是无限的。

参考:租赁 Blob 请求标头


推荐阅读