环境
情景
我有每日运行的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。正确?
答案 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
范围内指定的文件。
如果它能解决您的问题,请告诉我。