U-SQL - 处理最近 "n" 天的文件
U-SQL - Process Last "n" days files
环境
- Azure 数据 Factory/U-SQL
场景
我有 ADF 管道 运行 每天 basis.And 创建文件夹和文件 format.Basically 按日期创建文件夹和文件。
"/Samples/Data/TestDB/{filedate:yyyy}.{filedate:MM}.{filedate:dd}/TestDetail.{filedate:yyyy}.{filedate :MM}.{文件日期:dd}.csv";
在 U-SQL 我想处理最近 7 天的文件。我创建了 U-SQL 脚本,方法是将虚拟列添加到 select 最近 7 天的文件。
我运行在本地进行这些更改。
代码
@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 天的文件。请在下面找到 image.Basically 它不应该在寻找文件 2017.04.20。对吗?
Job Graph
您可以通过使用 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
范围内指定的文件。
如果它解决了您的问题,请告诉我。
环境
- Azure 数据 Factory/U-SQL
场景
我有 ADF 管道 运行 每天 basis.And 创建文件夹和文件 format.Basically 按日期创建文件夹和文件。
"/Samples/Data/TestDB/{filedate:yyyy}.{filedate:MM}.{filedate:dd}/TestDetail.{filedate:yyyy}.{filedate :MM}.{文件日期:dd}.csv";
在 U-SQL 我想处理最近 7 天的文件。我创建了 U-SQL 脚本,方法是将虚拟列添加到 select 最近 7 天的文件。
我运行在本地进行这些更改。
代码
@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 天的文件。请在下面找到 image.Basically 它不应该在寻找文件 2017.04.20。对吗?
Job Graph
您可以通过使用 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
范围内指定的文件。
如果它解决了您的问题,请告诉我。