U-SQL - 处理最近 "n" 天的文件



环境

  • 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范围内指定的文件。

让我知道它是否解决了您的问题。

相关内容

  • 没有找到相关文章

最新更新