Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure data factory 如何使用ADF中的参数为文件夹中的所有文件运行U-SQL?_Azure Data Factory_U Sql - Fatal编程技术网

Azure data factory 如何使用ADF中的参数为文件夹中的所有文件运行U-SQL?

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

无法将“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脚本尝试从以下内容中提取:

@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}。没有*。