环境
- Azure Data Factory/U-SQL
场景
-
我有每天运行的 ADF 管道。并创建 文件夹 和 文件采用以下格式。基本上创建了日期明智的文件夹和文件。
-
"/Samples/Data/TestDB/{filedate:yyyy}.{文件日期:MM}。{filedate:dd}/TestDetail.{文件日期:yyyy}.{文件日期:MM}.{文件日期: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");
问题
我能够成功运行脚本,但是当作业编译然后显示作业图时,它正在寻找超过 7 天的文件。请找到下面的图片。基本上它不应该查找文件 2017.04.20。右?
作业图
您可以通过使用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
范围内指定的文件。
让我知道它是否解决了您的问题。