Azure data factory U-SQL-处理最后一个“事件”;";天档案

Azure data factory U-SQL-处理最后一个“事件”;";天档案,azure-data-factory,u-sql,Azure Data Factory,U Sql,环境 Azure数据工厂/U-SQL 场景 我有每天运行的ADF管道。并按照以下格式创建文件夹和文件。基本上创建了日期相关的文件夹和文件 “/Samples/Data/TestDB/{filedate:yyyy}.{filedate:MM}.{filedate:dd}/TestDetail.{filedate:yyyy}.{filedate:dd}.csv” 在U-SQL中,我想处理最近7天的文件。我创建了U-SQL脚本,通过虚拟列选择最后7天的文件 我正在本地运行这些更改 代码 @u

环境

  • Azure数据工厂/U-SQL
场景

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

  • “/Samples/Data/TestDB/{filedate:yyyy}.{filedate:MM}.{filedate:dd}/TestDetail.{filedate:yyyy}.{filedate:dd}.csv”

  • 在U-SQL中,我想处理最近7天的文件。我创建了U-SQL脚本,通过虚拟列选择最后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天的文件。请查看下图。基本上,它不应该查找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
范围内指定的文件


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

我想知道WHERE子句中的函数调用是否太复杂,以致于它无法将谓词向下推回到提取器中。。。。有点像一个不再可供出售的领域。尝试将虚拟字段的数据类型更改为字符串并进行简单比较?它仍在拾取所有文件