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