2016-12-01 3 views
0

Der Parameter "in" kann nicht an U-SQL übergeben werden, um alle Dateien im Ordner zu verwenden.Wie U-SQL für alle Dateien in einem Ordner mit Parametern aus ADF ausgeführt wird?

in meiner ADF-Pipeline, ich habe die folgenden Parameter-Einstellungen:

"parameters": { 
    "in": "$$Text.Format('stag/input/{0:yyyy}/{0:MM}/{0:dd}/*.csv', SliceStart)", 
    "out": "$$Text.Format('stag/output/{0:yyyy}/{0:MM}/{0:dd}/summary.csv" 
} 

Und der U-SQL-Skript Trys aus zu extrahieren:

@couponlog = 
    EXTRACT 
    Id int, 
    [Other columns here] 
FROM @in 
USING Extractors.Csv(skipFirstNRows:1); 

Aber ich bekomme Datei während der Ausführung nicht gefunden. Die Dateien existieren im Datensee, aber ich kenne die korrekte Syntax nicht, um sie als Parameter zu übergeben.

Antwort

1

Ich bin sicher, es gibt viele Möglichkeiten, das Problem zu lösen, aber was ich gefunden habe, ist, dass es einfacher ist, virtuelle Spalten zu verwenden, anstatt einen Parameter aus der ADF-Pipeline zu übergeben. in meinem Fall v_date

@couponlog = 
    EXTRACT 
    Id int, 
    [Other columns here], 
    v_date DateTime 
FROM "stag/input/{v_date:yyyy}/{v_date:MM}/{v_date:dd}/{*}.csv" 
USING Extractors.Csv(skipFirstNRows:1); 

dies mit dem U-SQL Scrip all

den Dateien gefunden
+0

Dies ist der richtige Weg, um Ihren Dateisatz zu parametrisieren. Und Sie können eine nachfolgende 'WHERE'-Klausel hinzufügen, um zusätzliche Parameter und Einschränkungen für die' v_date'-Spalte hinzuzufügen, mit der die Extraktion eingeschränkt werden kann. –

+1

Die Verwendung von * in den virtuellen Spaltennamen ist jetzt veraltet. Verwenden Sie jetzt nur Ihre geschweiften Klammern, aber mit einem Namen für die Spalte. Zum Beispiel {Dateiname}. Ohne das *. –

0

Ich verwende von ADF ohne Probleme eingegeben Daten. Ich gehe nur den Datumsteil in und dann formatiert werden innerhalb USQL:

"parameters": { 
    "in": "$$Text.Format('{0:yyyy}/{0:MM}/{0:dd}/', SliceStart)" 
} 

Dann in USQL:

DECLARE @inputPath = "path/to/file/" + @in + "{*}.csv"; 
DECLARE @outputPath = "path/to/file/" + @in + "output.csv"; 

Diese Variablen dann im Skript gewöhnen, wie gebraucht.

0

Ich benutze diesen Eingabeparameter in ADF alle Dateien aus einem Ordner mit einer virtuellen Spalte (Datei) zu lesen, um den Namen der Datei

"parameters": { 
    "in": "$$Text.Format('storage/folder/{0:yyyy}-{0:MM}/{1}.csv', SliceStart, '{file:*}')", 
    "out": "$$Text.Format('otherFolder/{0:yyyy}-{0:MM}/result.txt', SliceStart)" 
} 

den damit verbundenen U-SQL

@sales = 
    EXTRACT column1 string, 
      column2 decimal, 
      file string 
    FROM @in 
    USING Extractors.Csv(silent : true); 
abrufen
Verwandte Themen