Azure data factory 如何使用ADF中的参数为文件夹中的所有文件运行U-SQL?
无法将“in”参数传递给U-SQL以使用文件夹中的所有文件 在我的ADF管道中,我有以下参数设置:Azure data factory 如何使用ADF中的参数为文件夹中的所有文件运行U-SQL?,azure-data-factory,u-sql,Azure Data Factory,U Sql,无法将“in”参数传递给U-SQL以使用文件夹中的所有文件 在我的ADF管道中,我有以下参数设置: "parameters": { "in": "$$Text.Format('stag/input/{0:yyyy}/{0:MM}/{0:dd}/*.csv', SliceStart)", "out": "$$Text.Format('stag/output/{0:yyyy}/{0:MM}/{0:dd}/summary.csv" } U-SQL脚本尝试从以下内容中提取: @coup
"parameters": {
"in": "$$Text.Format('stag/input/{0:yyyy}/{0:MM}/{0:dd}/*.csv', SliceStart)",
"out": "$$Text.Format('stag/output/{0:yyyy}/{0:MM}/{0:dd}/summary.csv"
}
U-SQL脚本尝试从以下内容中提取:
@couponlog =
EXTRACT
Id int,
[Other columns here]
FROM @in
USING Extractors.Csv(skipFirstNRows:1);
但我在执行过程中找不到文件。
文件存在于data lake中,但我不知道将其作为参数传递的正确语法。我确信有很多方法可以解决这个问题,但我发现使用虚拟列比从ADF管道传递参数更容易。在我的情况下,v_date
@couponlog =
EXTRACT
Id int,
[Other columns here],
v_date DateTime
FROM "stag/input/{v_date:yyyy}/{v_date:MM}/{v_date:dd}/{*}.csv"
USING Extractors.Csv(skipFirstNRows:1);
有了这个,U-SQL scrip找到了所有的文件,我确信有很多方法可以解决这个问题,但是我发现使用虚拟列比从ADF管道传递参数更容易。在我的情况下,v_date
@couponlog =
EXTRACT
Id int,
[Other columns here],
v_date DateTime
FROM "stag/input/{v_date:yyyy}/{v_date:MM}/{v_date:dd}/{*}.csv"
USING Extractors.Csv(skipFirstNRows:1);
有了这个,U-SQL脚本找到了所有的文件,我使用的是ADF输入的日期,没有任何问题。我只传入日期部分,然后在USQL中格式化它:
"parameters": {
"in": "$$Text.Format('{0:yyyy}/{0:MM}/{0:dd}/', SliceStart)"
}
然后在USQL中:
DECLARE @inputPath = "path/to/file/" + @in + "{*}.csv";
DECLARE @outputPath = "path/to/file/" + @in + "output.csv";
然后根据需要在脚本中使用这些变量。我使用ADF输入的日期,没有任何问题。我只传入日期部分,然后在USQL中格式化它:
"parameters": {
"in": "$$Text.Format('{0:yyyy}/{0:MM}/{0:dd}/', SliceStart)"
}
然后在USQL中:
DECLARE @inputPath = "path/to/file/" + @in + "{*}.csv";
DECLARE @outputPath = "path/to/file/" + @in + "output.csv";
然后根据需要在脚本中使用这些变量。我在ADF中使用此输入参数从带有虚拟列(file)的文件夹中读取所有文件,以检索文件名
"parameters": {
"in": "$$Text.Format('storage/folder/{0:yyyy}-{0:MM}/{1}.csv', SliceStart, '{file:*}')",
"out": "$$Text.Format('otherFolder/{0:yyyy}-{0:MM}/result.txt', SliceStart)"
}
相关的U-SQL
@sales =
EXTRACT column1 string,
column2 decimal,
file string
FROM @in
USING Extractors.Csv(silent : true);
我在ADF中使用此输入参数读取文件夹中的所有文件,其中包含一个虚拟列(file),以检索文件名
"parameters": {
"in": "$$Text.Format('storage/folder/{0:yyyy}-{0:MM}/{1}.csv', SliceStart, '{file:*}')",
"out": "$$Text.Format('otherFolder/{0:yyyy}-{0:MM}/result.txt', SliceStart)"
}
相关的U-SQL
@sales =
EXTRACT column1 string,
column2 decimal,
file string
FROM @in
USING Extractors.Csv(silent : true);
这是参数化文件集的正确方法。您还可以添加一个后续的
WHERE
子句,在v_date
列上添加额外的参数和约束,这些参数和约束可用于限制提取。在虚拟列名中使用*现在已被弃用。现在只需使用大括号,但要为列命名。例如{FileName}。这是参数化文件集的正确方法。您还可以添加一个后续的WHERE
子句,在v_date
列上添加额外的参数和约束,这些参数和约束可用于限制提取。在虚拟列名中使用*现在已被弃用。现在只需使用大括号,但要为列命名。例如{FileName}。没有*。