U-SQL - 处理最后“n”天文件

时间:2017-05-15 10:50:49

标签: azure-data-factory u-sql

环境

  • Azure数据工厂/ U-SQL

情景

  • 我有每日运行的ADF管道。并按以下格式创建文件夹和文件。基本上,会创建日期文件夹和文件。

  • “/样品/数据/ TESTDB / {FILEDATE:YYYY} {FILEDATE:MM}。{FILEDATE:DD} / TestDetail。{FILEDATE:YYYY}。{FILEDATE:MM} { FILEDATE:DD}的.csv“;

  • 在U-SQL中,我想处理最近7天的文件。我通过让虚拟列选择最近7天的文件来创建U-SQL脚本。

  • 我在本地运行这些更改。

代码

 @userLoginData =
        EXTRACT filedate DateTime,
                UserLoginAuditDetailId Guid,
                UserId string              
        FROM    @userLoginDetailPath   
        USING   Extractors.Csv();

  @extractedLoginData = 
        SELECT 
                UserLoginAuditDetailId,
                UserId             
        FROM    @userLoginData
        WHERE   filedate.Date.ToString("d") == @sliceEndTime.AddDays(-7).Date.ToString("d"); 

问题

我能够成功运行脚本,但是当Job编译然后显示作业图时,它正在查找超过7天的文件。请在下面找到image.Basically它不应该找文件2017.04.20。正确?

Job Graph

1 个答案:

答案 0 :(得分:2)

您可以使用BETWEEN子句并将fileDate虚拟列与指定的日期进行比较来实现解决方案,例如,

DECLARE @ProcessStart DateTime = new DateTime(@sliceEndTime.Year, @sliceEndTime.Month,@sliceEndTime.Day).AddDays(-n); // n is the no of days 
DECLARE @ProcessEnd DateTime = new DateTime(@sliceEndTime.Year, @sliceEndTime.Month,@sliceEndTime.Day); // current day when slice runs

然后您可以使用

过滤提交的内容
SELECT * FROM input WHERE    filedate  BETWEEN  @ProcessStart  AND  @ProcessEnd;

这只会处理@ProcessStart@ProcessEnd范围内指定的文件。

如果它能解决您的问题,请告诉我。