如何获取数据工厂的所有数据集的文件大小 - 特别是数据湖存储和blob?

时间:2017-10-26 06:35:03

标签: c# azure-storage azure-data-factory azure-data-lake

我们在Azure数据工厂中有许多不同的管道,包含许多数据集。主要是我们有Azure数据湖商店和Azure Blob的数据集。我想知道所有文件的文件大小(来自所有管道的所有数据集)。我能够使用C#中的DataFactoryManagementClient迭代来自所有管道的所有数据集,但是当我试图查看数据集的fileName或folderName时,我得到null。你可以看到我的下面的代码 -

private static void GetDataSetSize(DataFactoryManagementClient dataFactoryManagementClient)         {             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中的错误)。一旦我有文件夹和文件路径,然后使用DataLakeStoreFileSystemManagementClient我将获得这些文件的文件大小。我打算将所有这些数据(大小,文件名,重试,失败等)摄取到SQL数据库中,并在其上面 - 我将生成报告,告诉我我的数据每天或每小时如何增长等。

我希望以这样的方式使它成为通用的 - 如果将来我添加新的数据集或管道 - 我也可以在不更改任何代码的情况下获得所有新添加的数据集的大小。

请帮助我如何实现这一目标。如果可能的话,建议我是否有替代方法。

1 个答案:

答案 0 :(得分:0)

只需将此代码放在main方法中并执行即可。您可以查看数据集文件夹路径和文件名。使用此方法并根据您的要求进行相应更改。

希望这有帮助!

         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();
            }
        }

    }