Azure data factory 在azure data lake上处理多个文件
假设azure data lake store上有两个文件集A和BAzure data factory 在azure data lake上处理多个文件,azure-data-factory,azure-data-lake,u-sql,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 我想得到一些值(比如说一个实体的DateCreated)并使用这些值为B set生成文件路径 我怎样才能做到这一点 有些想法,但我不确定。 1.从列表中
/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
我想得到一些值(比如说一个实体的DateCreated)并使用这些值为B set生成文件路径
我怎样才能做到这一点
有些想法,但我不确定。
1.从列表中选择值
2.存储在某些存储上(azure数据湖或azure sql数据库)。
3.构建一个逗号分隔的字符串pStr
4.通过数据工厂将pStr传递给存储过程,该存储过程生成带模式的文件路径
编辑
根据@mabasile\u 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"]
}
ADF管道,其中包含查找和第二个USQL脚本。
Lookup读取这个json文件文件集属性,据我所知,我需要以某种方式将这个json数组传递给第二个脚本,对吗?
但usql编译器生成字符串变量,如
DECLARE@fileSet string=“[”/Data/SomeEntity/2018/3/5/SomeEntity\u 2018\u 3\u 5\u 12”,
“/Data/SomeEntity/2018/3/5/SomeEntity\u 2018\u 3\u 5\u 13”,
“/Data/SomeEntity/2018/3/5/SomeEntity\u 2018\u 3\u 5\u 14”,
“/Data/SomeEntity/2018/3/5/SomeEntity_2018_3_5_15”]”
之后脚本甚至没有编译。尝试此根链接,它可以帮助您开始了解所有关于u-sql的内容: 有关您的问题的有用链接:
您将需要两个U-SQL作业,但您可以使用ADF查找活动来读取文件集 您的第一个ADLA作业应该从中提取数据,构建文件集,并在中 然后在ADF中使用一个函数从Azure存储中的JSON文件中读取文件集名称 然后在ADF中定义第二个U-SQL活动。将文件集设置为U-SQL活动中的一个参数(如果您使用的是联机UI,则在“脚本”>“高级”下),该值类似于
@{activity('MyLookupActivity').output.firstRow.fileset}
(请参阅上面的查找活动文档)
ADF将在U-SQL脚本顶部以DECLARE语句的形式写入U-SQL参数。如果您还想将默认值编码到脚本中,请使用DECLARE EXTERNAL-这将被ADF写入的DECLARE语句覆盖,因此不会导致错误
我希望这会有所帮助,如果您还有其他问题,请告诉我 谢谢你的更新。我目前正在研究是否可以通过查找活动传递一组参数,因为使用ForEach循环迭代查找活动会创建太多的U-SQL作业。在那之前,你会用一本书吗?例如,如果您总是将新文件放在一个不同的文件夹中,并希望读取该文件夹的全部内容,则可以使用“/Data/SomeEntity/2018/3/5/{*}”从该文件夹中选择所有文件。您想知道如何解决此问题吗?