我们在Azure数据工厂中有许多不同的管道,其中包含许多数据集。我们主要有Azure数据湖存储和Azure Blob的数据集。我想知道所有文件的文件大小(来自所有管道的所有数据集)。我可以使用C#中的DataFactoryManagementClient迭代所有管道中的所有数据集,但当我试图查看数据集的fileName或folderName时,我会得到null。你可以看到我下面的代码-
private静态void GetDataSetSize(DataFactoryManagementClient dataFactoryManagementsClient){string resourceGroupName="resourceGroupName";
foreach (var dataFactory in dataFactoryManagementClient.DataFactories.List(resourceGroupName).DataFactories)
{
var linkedServices = new List<LinkedService>(dataFactoryManagementClient.LinkedServices.List(resourceGroupName, dataFactory.Name).LinkedServices);
var datasets = dataFactoryManagementClient.Datasets.List(resourceGroupName, dataFactory.Name).Datasets;
foreach (var dataset in datasets)
{
var lsTypeProperties = linkedServices.First(ls => ls.Name == dataset.Properties.LinkedServiceName).Properties.TypeProperties;
if(lsTypeProperties.GetType() == typeof(AzureDataLakeStoreLinkedService))//AzureDataLakeStoreLinkedService))
{
AzureDataLakeStoreLinkedService outputLinkedService = lsTypeProperties as AzureDataLakeStoreLinkedService;
var folder = GetBlobFolderPathDL(dataset);
var file = GetBlobFileNameDL(dataset);
}
}
}
}
public static string GetBlobFolderPathDL(Dataset dataset)
{
if (dataset == null || dataset.Properties == null)
{
return string.Empty;
}
AzureDataLakeStoreDataset dlDataset = dataset.Properties.TypeProperties as AzureDataLakeStoreDataset;
if (dlDataset == null)
{
return string.Empty;
}
return dlDataset.FolderPath;
}
public static string GetBlobFileNameDL(Dataset dataset)
{
if (dataset == null || dataset.Properties == null)
{
return string.Empty;
}
AzureDataLakeStoreDataset dlDataset = dataset.Properties.TypeProperties as AzureDataLakeStoreDataset;
if (dlDataset == null)
{
return string.Empty;
}
return dlDataset.FileName;
}
有了这个,我想生成一个监控工具,告诉我每个文件/数据集的数据是如何增加的?
仅供参考-我将监视每个切片的重试次数和失败次数。我可以在没有任何问题的情况下获得这些信息,但现在的问题是获取文件名和文件夹路径,因为它会返回null(这似乎是API中的一个bug)。一旦我有了文件夹和文件路径,然后使用DataLakeStoreFileSystemManagementClient,我将获得这些文件的文件大小。我计划将所有这些数据(大小、文件名、重试次数、失败次数等)摄入SQL数据库,最重要的是,我会生成报告,告诉我我的数据每天或每小时是如何增长的。
我想让它通用化,这样——如果将来我添加新的数据集或管道——我也可以在不更改任何代码的情况下获得所有新添加的数据集的大小。
请帮我怎样才能做到这一点。如果可能的话,建议我是否有其他方式。
只需将此代码放在主方法中并执行即可。您可以看到您的数据集文件夹路径和文件名。使用它并根据您的要求进行相应的更改。
希望这能有所帮助
foreach (var dataFactory in dataFactoryManagementClient.DataFactories.List(resourceGroupName).DataFactories)
{
var datasets = dataFactoryManagementClient.Datasets.List(resourceGroupName, dataFactory.Name).Datasets;
foreach (var dataset in datasets)
{
var lsTypeProperties = dataFactoryManagementClient.Datasets.Get(resourceGroupName,dataFactory.Name,dataset.Name);
if (lsTypeProperties.Dataset.Properties.TypeProperties.GetType() == typeof(AzureDataLakeStoreDataset))//AzureDataLakeStoreDataset))
{
AzureDataLakeStoreDataset OutputDataSet = lsTypeProperties.Dataset.Properties.TypeProperties as AzureDataLakeStoreDataset;
Console.WriteLine(OutputDataSet.FolderPath);
Console.WriteLine(OutputDataSet.FileName);
Console.ReadKey();
}
}
}