Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
U-SQL是否支持根据ADL中的创建日期提取文件_U Sql_Extractor - Fatal编程技术网

U-SQL是否支持根据ADL中的创建日期提取文件

U-SQL是否支持根据ADL中的创建日期提取文件,u-sql,extractor,U Sql,Extractor,我们知道U-SQL在提取文件时支持目录和文件名模式匹配。我想知道的是,它是否支持基于ADL中文件创建日期的模式匹配,而不实现自定义提取器 假设文件夹包含跨月创建的文件,文件名中没有日期,有没有办法只提取特定月份的文件。U-SQL提取操作符不知道任何元数据,例如关于文件的创建日期-只有文件名。目前无法访问或使用文件元数据属性。请将您的投票和用例添加到以下反馈项:您可能可以使用.NET SDK构建解决方案。对于一些非常简单的事情,您可以使用PowerShell创建一个文件,其中包含满足日期时间条件的

我们知道U-SQL在提取文件时支持目录和文件名模式匹配。我想知道的是,它是否支持基于ADL中文件创建日期的模式匹配,而不实现自定义提取器


假设文件夹包含跨月创建的文件,文件名中没有日期,有没有办法只提取特定月份的文件。

U-SQL提取操作符不知道任何元数据,例如关于文件的创建日期-只有文件名。

目前无法访问或使用文件元数据属性。请将您的投票和用例添加到以下反馈项:

您可能可以使用.NET SDK构建解决方案。对于一些非常简单的事情,您可以使用PowerShell创建一个文件,其中包含满足日期时间条件的所有文件。然后根据需要使用内容

# Log in to your Azure account
Login-AzureRmAccount

# Modify variables as required
$DataLakeStoreAccount = "<yourDataLakeStoreAccountNameHere>";
$DataLakeAnalyticsAccount = <yourDataLakeAnalyticsAccountNameHere>";
$DataLakeStorePath = "/Samples/Data/AmbulanceData/";  #modify as desired
$outputFile = "Samples/Outputs/ReferenceGuide/filteredFiles.csv";  #modify as desired
$filterDate = "2016-11-22";
$jobName = "GetFiles";

# Query directory and build main body of script.  Note, there is a csv filter.
 [string]$body = 
 "@initial = 
    SELECT * FROM 
    (VALUES
 " +  
(Get-AzureRmDataLakeStoreChildItem -Account $DataLakeStoreAccount -Path $DataLakeStorePath | 
Where {$_.Name -like "*.csv" -and $_.Type -eq "FILE"} | foreach {
 "(""" + $DataLakeStorePath + $_.Name + """, (DateTime)FILE.CREATED(""" + $DataLakeStorePath + $_.Name + """)), `r`n" });

 # formattig, add column names
$body = 
$body.Substring(0,$body.Length-4) + " 
    ) AS T(fileName, createDate);";   

# U-SQL query and OUTPUT statement
[string]$output = 
"

// filter results based on desired time frame
@filtered = 
    SELECT fileName
    FROM @initial
    WHERE createDate.ToString(""yyyy-MM-dd"") == ""$filterDate"";

OUTPUT @filtered
TO ""$outputFile""
USING Outputters.Csv();";

# bring it all together
$script = $body +  $output;

#Execute job
$jobInfo = Submit-AzureRmDataLakeAnalyticsJob -Account $DataLakeAnalyticsAccount -Name $jobName  -Script $script -DegreeOfParallelism 1

#check job progress
Get-AzureRmDataLakeAnalyticsJob -Account $DataLakeAnalyticsAccount -JobId $jobInfo.JobId -ErrorAction SilentlyContinue; 

Write-Host "You now have a list of desired files to check @ " $outputFile

问这个问题已经有一段时间了,我不确定这是否是您最初想要的,但现在您可以使用FILE.MODIFIED U-SQL函数:

DECLARE @watermark string = "2018-08-16T18:12:03";
SET @@FeaturePreviews="InputFileGrouping:on";

DECLARE @file_set_path string = "adl://adls.azuredatalakestore.net/stage/InputSample.tsv";

@input =
    EXTRACT [columnA] int?,
            [columnB] string
    FROM @file_set_path
    USING Extractors.Tsv(skipFirstNRows : 1, silent : true);

@result =
    SELECT *, FILE.MODIFIED(@file_set_path) AS FileModifiedDate
    FROM @input
    WHERE FILE.MODIFIED(@file_set_path) > DateTime.ParseExact(@watermark, "yyyy-MM-ddTHH:mm:ss", NULL);

OUTPUT @result TO "adl://ADLS.azuredatalakestore.net/stage/OutputSample.tsv" USING Outputters.Tsv(outputHeader:true);
U-SQL内置函数记录在此处: