Azure数据工厂(ADFv2)-如何在USQL作业中处理来自不同文件夹的多个输入文件

Azure数据工厂(ADFv2)-如何在USQL作业中处理来自不同文件夹的多个输入文件,azure,u-sql,azure-data-factory-2,Azure,U Sql,Azure Data Factory 2,我们需要使用Azure data factory和USQL处理来自不同文件夹的多个文件 这是我们的文件夹结构 年-->月-->日 我们每个日期都有一个文件夹,比如说1,2,3…31。要求从特定文件夹读取文件,并将其传递给USQL进行分析处理。我们需要处理多个日期的数据。在data factory中是否有任何方法可以从多个文件夹中读取数据 示例:我需要读取特定月份的日期1、7和10的数据。我不想读这个月的所有文件 请告诉我们您是否找到了上述方案的解决方案。是的,有。您应该使用虚拟列。例子: 您的文

我们需要使用Azure data factory和USQL处理来自不同文件夹的多个文件

这是我们的文件夹结构

年-->月-->日

我们每个日期都有一个文件夹,比如说1,2,3…31。要求从特定文件夹读取文件,并将其传递给USQL进行分析处理。我们需要处理多个日期的数据。在data factory中是否有任何方法可以从多个文件夹中读取数据

示例:我需要读取特定月份的日期1、7和10的数据。我不想读这个月的所有文件


请告诉我们您是否找到了上述方案的解决方案。

是的,有。您应该使用虚拟列。例子: 您的文件只有第1列和第2列

路径1=/yourFolder/2018/11/1/file.csv

路径2=/yourFolder/2018/10/25/file.csv

DECLARE date1 = new DateTime(2018,11,1);
DECLARE date2 = new DateTime(2018,10,25);
@inputData = EXTRACT column1 string,
column2 string, 
FileDate DateTime //this is virtual column
FROM "/yourFolder/{FileDate:yyyy}/{FileDate:MM}/{FileDate:dd}/file.csv"
USING Extractors.Text(delimiter:';',skipFirstNRows:1);
@res = SELECT * FROM @inputData WHERE FileDate == date1 AND FileDate ==date2;
这样,您可以使用虚拟列管理文件夹结构。 当然,若您想获取某个日期范围内的文件,可以使用BETWEEN。 嗯


另外,您可以将参数从ADF发送到USQL存储过程。我刚才给出了一个如何处理特定文件的示例

下面的代码工作正常。如上所述

声明外部@startDate string=“2018-08-01”//值将从ADF传递 声明外部@endDate string=“2018-08-31”//值将从ADF传递

声明@report\u start\u date DateTime=DateTime.ParseExact(@startDate,“yyyy-MM-dd”,CultureInfo.InvariantCulture); 声明@report\u end\u date DateTime=DateTime.ParseExact(@endDate,“yyyy-MM-dd”,CultureInfo.InvariantCulture)

声明@INPUT_FILE=@valueFromADF+“/{date:yyyy}/{date:M}/{date:d}/{filename}.txt”

@dataAsString=使用提取器从@INPUT_文件中提取值字符串、日期日期时间。Text(分隔符:'\n'); @dataAsString=从@dataAsString中选择*,其中日期介于@report\u start\u date和@report\u end\u date之间