如何获取数据工厂所有数据集的文件大小 - 特别是数据湖存储和 blob?
How to get file size of all datasets of data factory - specially data lake store and blob?
我们在 Azure 数据工厂中有许多不同的管道,其中包含许多数据集。主要有Azure data lake store和Azure Blobs的数据集。我想知道所有文件的文件大小(来自所有管道的所有数据集)。我能够在 C# 中使用 DataFactoryManagementClient 迭代所有管道中的所有数据集,但是当我尝试查看数据集的文件名或文件夹名时,我得到的是空值。你可以看到我下面的代码 -
private static void GetDataSetSize(DataFactoryManagementClient dataFactoryManagementClient)
{
字符串资源组名称 = "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;
}
有了这个,我想生成监控工具,它会告诉我每个 file/dataset 的数据是如何增加的?
仅供参考 - 我将监视重试,每个切片的失败。我可以毫无问题地获取此信息,但现在的问题是获取文件名和文件夹路径,因为它返回 null(这似乎是 API 中的一个错误)。一旦我有了文件夹和文件路径,然后使用 DataLakeStoreFileSystemManagementClient 我将获得这些文件的文件大小。我计划将所有这些数据(大小、文件名、重试、失败等)摄取到 SQL 数据库中,并在其之上 - 我将生成报告,告诉我我的数据每天或每小时如何增长等。
我想让它变得通用,这样一来 - 如果将来我添加新的数据集或管道 - 我也可以在不更改任何代码的情况下获得所有新添加的数据集的大小。
请帮助我如何实现这一目标。如果可能的话,建议我是否有其他方法。
只需将此代码放在您的主要方法中,execute.You 可能会看到您的数据集文件夹路径,filenames.Use 并根据您的要求进行相应更改。
希望对您有所帮助!
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();
}
}
}
我们在 Azure 数据工厂中有许多不同的管道,其中包含许多数据集。主要有Azure data lake store和Azure Blobs的数据集。我想知道所有文件的文件大小(来自所有管道的所有数据集)。我能够在 C# 中使用 DataFactoryManagementClient 迭代所有管道中的所有数据集,但是当我尝试查看数据集的文件名或文件夹名时,我得到的是空值。你可以看到我下面的代码 -
private static void GetDataSetSize(DataFactoryManagementClient dataFactoryManagementClient) { 字符串资源组名称 = "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;
}
有了这个,我想生成监控工具,它会告诉我每个 file/dataset 的数据是如何增加的?
仅供参考 - 我将监视重试,每个切片的失败。我可以毫无问题地获取此信息,但现在的问题是获取文件名和文件夹路径,因为它返回 null(这似乎是 API 中的一个错误)。一旦我有了文件夹和文件路径,然后使用 DataLakeStoreFileSystemManagementClient 我将获得这些文件的文件大小。我计划将所有这些数据(大小、文件名、重试、失败等)摄取到 SQL 数据库中,并在其之上 - 我将生成报告,告诉我我的数据每天或每小时如何增长等。
我想让它变得通用,这样一来 - 如果将来我添加新的数据集或管道 - 我也可以在不更改任何代码的情况下获得所有新添加的数据集的大小。
请帮助我如何实现这一目标。如果可能的话,建议我是否有其他方法。
只需将此代码放在您的主要方法中,execute.You 可能会看到您的数据集文件夹路径,filenames.Use 并根据您的要求进行相应更改。
希望对您有所帮助!
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();
}
}
}