我正在尝试编写一个自定义.NET活动,该活动将从Azure Data Factory运行。它将完成两项任务,一个接一个:
到目前为止,我已经设置了一个Azure批处理,其中包含一个带有两个节点的池 - Windows Server计算机,用于运行FTP下载。节点正在将grib2文件下载到blob存储容器中。
到目前为止,自定义应用的代码如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Azure;
using Microsoft.Azure.Management.DataFactories.Models;
using Microsoft.Azure.Management.DataFactories.Runtime;
namespace ClassLibrary1
{
public class Class1 : IDotNetActivity
{
public IDictionary string, string Execute(
IEnumerable linkedServices,
IEnumerable datasets,
Activity activity,
IActivityLogger logger)
{
logger.Write("Start");
//Get extended properties
DotNetActivity dotNetActivityPipeline = (DotNetActivity)activity.TypeProperties;
string sliceStartString = dotNetActivityPipeline.ExtendedProperties["SliceStart"];
//Get linked service details
Dataset inputDataset = datasets.Single(dataset = dataset.Name == activity.Inputs.Single().Name);
Dataset outputDataset = datasets.Single(dataset = dataset.Name == activity.Outputs.Single().Name);
/*
DO FTP download here
*/
logger.Write("End");
return new Dictionary string, string();
}
}
}
到目前为止我的代码工作正常,我将文件下载到我的blob存储帐户。 现在我已经下载了文件,我希望批处理池的节点解压缩文件并将解压缩的文件放入我的blob存储中以便进一步处理。 为此,使用了wgrib2.exe,它附带了一些dll文件。我已经压缩并将所需的可执行文件和所有dll文件上传到我的池中。如果我是正确的,当每个节点加入池时,将提取此可执行文件并可用于调用。
我的问题是:我如何编写自定义.NET活动,以便我的池节点下载文件,每次下载文件后,在每个文件上运行解压缩命令将其转换为csv文件?这个命令行看起来像:
wgrib2.exe downloadedfileName.grb2 -csv downloadedfileName.csv
如何处理每个下载文件的名称,如何在节点上进行处理并将其保存回blob存储?
另外,如何控制同时下载的文件数量以及同时解压缩的文件数量?