2016-12-31 2 views
2

Nous savons que U-SQL prend en charge la correspondance de répertoire et de nom de fichier lors de l'extraction des fichiers. Ce que je voulais savoir, est-ce qu'il supporte la correspondance de modèle basée sur la date de création du fichier dans ADLS (sans implémenter d'extracteurs personnalisés).Est-ce que U-SQL prend en charge l'extraction des fichiers en fonction de la date de création dans ADLS

Supposons qu'un dossier contienne des fichiers créés au cours des mois (les noms de fichiers n'ont pas de date dans le nom de fichier), est-il possible de récupérer uniquement les fichiers d'un mois donné.

Répondre

1

L'opérateur U-SQL EXTRACT n'a pas connaissance de métadonnées (telles que la date de création) concernant un fichier, mais uniquement le nom de fichier.

1

Vous pouvez probablement créer une solution à l'aide du SDK .NET. Pour quelque chose de plutôt simple, vous pouvez utiliser PowerShell pour créer un fichier qui contiendra tous les fichiers qui répondent à vos critères de date et d'heure. Puis consommez le contenu comme vous le souhaitez.

# 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