Ich habe U-SQL-Skript, wo ich einige Daten verarbeiten muss. Die Daten werden in einem Blob mit ~ 100 Dateien pro Tag in dieser Ordnerstruktur gespeichert:Wie kann ich mehrere Eingabedateimuster in USQL definieren?
Einen Tag Daten zu bekommen ist einfach, setzen Sie einfach einen Platzhalter am Ende und es wird alle Dateien für alle Stunden herausgreifen für den Tag.
Allerdings möchte ich in meinem Skript den aktuellen Tag und die letzten 2 Stunden des Vortages vorlesen. Die naive Art und Weise ist mit 3 Extrakt Aussagen in dieser Art und Weise:
DECLARE @input1 = @"/data/2017/10/08/22/{*}.tsv";
DECLARE @input2 = @"/data/2017/10/08/23/{*}.tsv";
DECLARE @input3 = @"/data/2017/10/09/{*}.tsv";
@x1 = EXTRACT .... FROM @input1 USING Extractors.Tsv();
@x2 = EXTRACT .... FROM @input2 USING Extractors.Tsv();
@x3 = EXTRACT .... FROM @input3 USING Extractors.Tsv();
Aber in meinem Fall jede Extraktleitung ist sehr lang und kompliziert (~ 50 Spalten) mit dem AvroExtractor, so würde ich wirklich nur die Spalten angeben bevorzugen und Extraktor einmal statt 3 mal. Außerdem ist es mit 3 Eingängen nicht möglich von der Anruferseite zu entscheiden, wie viele Stunden von den vorhergehenden Tagen gelesen werden sollten.
Meine Frage ist, wie kann ich dies auf eine bequeme Art und Weise definieren, idealerweise mit nur einer Extrakt-Aussage?
In meinem Fall wollte ich die Daten zusammen verarbeiten, also habe ich anstelle einer Prozedur eine Tabellenwertfunktion erstellt. Aber das Prinzip ist genau wie deine Antwort. – viblo