处理azure数据湖上的多个文件

时间:2018-03-05 14:52:52

标签: azure-data-factory azure-data-lake u-sql

让我们假设azure data lake store上有两个文件集A和B.

/A/Year/
/A/Month/Day/Month/
/A/Year/Month/Day/A_Year_Month_Day_Hour

/B/Year/
/B/Month/Day/Month/
/B/Year/Month/Day/B_Year_Month_Day_Hour

我想得到一些值(让我们说A实体的DateCreated)并使用这些值为B set生成文件路径。

我怎样才能做到这一点?

一些想法,但我不确定这一点。 1.从A中选择值 2.存储在某个存储(azure数据湖或azure sql数据库)上。 3.构建一个逗号分隔的字符串pStr 4.通过Data Factory将pStr传递给存储过程,该过程生成带模式的文件路径。

修改

根据@mabasile_MSFT回答

这就是我现在所拥有的。 生成json文件的第一个USQL脚本,它看起来如下。

{
FileSet:["/Data/SomeEntity/2018/3/5/SomeEntity_2018_3_5__12",
"/Data/SomeEntity/2018/3/5/SomeEntity_2018_3_5__13",
"/Data/SomeEntity/2018/3/5/SomeEntity_2018_3_5__14",
"/Data/SomeEntity/2018/3/5/SomeEntity_2018_3_5__15"]
}

包含Lookup和第二个USQL脚本的ADF管道。 Lookup读取这个json文件的FileSet属性,因为我知道我需要以某种方式将这个json数组传递给第二个脚本吧? 但usql编译器生成类似

的字符串变量

DECLARE @fileSet string =" [" / Data / SomeEntity / 2018/3/5 / SomeEntity_2018_3_5__12",         " /数据/ SomeEntity /三分之二千〇一十八/ 5 / SomeEntity_2018_3_5__13&#34 ;,         " /数据/ SomeEntity /三分之二千〇一十八/ 5 / SomeEntity_2018_3_5__14&#34 ;,         " /数据/ SomeEntity /三分之二千〇一十八/ 5 / SomeEntity_2018_3_5__15"]"

并且脚本甚至没有在它之后编译。

2 个答案:

答案 0 :(得分:2)

您将需要两个U-SQL作业,但您可以使用ADF Lookup活动来读取文件集。

您的第一个ADLA作业应该从A中提取数据,构建文件集,并在output to a JSON file中提取Azure Storage

然后在ADF中使用Lookup activity从Azure存储中的JSON文件中读取文件集名称。

然后在ADF中定义第二个U-SQL活动。在U-SQL活动中将文件集设置为参数(在脚本>高级下,如果您使用在线UI) - 该值看起来像@{activity('MyLookupActivity').output.firstRow.FileSet}(请参阅上面的查找活动文档)。

ADF将在U-SQL参数中将其作为DECLARE语句写入U-SQL脚本的顶部。如果你想在脚本中编写一个默认值,请使用DECLARE EXTERNAL - 这将被ADF写入的DECLARE语句覆盖,因此不会导致错误。

我希望这有帮助,如果您有其他问题,请告诉我们!

答案 1 :(得分:0)

试试这个root链接,这可以帮助你从u-sql开始: http://usql.io

您的问题的有用链接: https://saveenr.gitbooks.io/usql-tutorial/content/filesets/filesets-with-dates.html