Erste Schritte mit U-SQL in Azure Data Lake AnalyticsGet started with U-SQL in Azure Data Lake Analytics

U-SQL ist eine Sprache, bei der deklarative SQL mit imperativen C#-Elementen kombiniert wird, damit Sie Daten jedweden Umfangs verarbeiten können.U-SQL is a language that combines declarative SQL with imperative C# to let you process data at any scale. Mit der skalierbaren Funktion für verteilte Abfragen von U-SQL können Sie Daten über relationale Speicher, z.B. Azure SQL-Datenbank, hinweg effizient analysieren.Through the scalable, distributed-query capability of U-SQL, you can efficiently analyze data across relational stores such as Azure SQL Database. Mit U-SQL können Sie unstrukturierte Daten verarbeiten, indem Sie ein Schema zum Lesen anwenden und benutzerdefinierte Logik und UDFs einfügen.With U-SQL, you can process unstructured data by applying schema on read and inserting custom logic and UDFs. Darüber hinaus bietet U-SQL eine Erweiterbarkeit, die Ihnen eine präzisere Steuerung der Ausführung in großem Umfang ermöglicht.Additionally, U-SQL includes extensibility that gives you fine-grained control over how to execute at scale.

SchulungsressourcenLearning resources

VoraussetzungenPrerequisites

Bevor Sie die U-SQL-Beispiele in diesem Dokument durchgehen, lesen Sie das Tutorial: Entwickeln von U-SQL-Skripts mit Data Lake-Tools für Visual Studio, und schließen Sie es ab.Before you go through the U-SQL samples in this document, read and complete Tutorial: Develop U-SQL scripts using Data Lake Tools for Visual Studio. In diesem Tutorial wird veranschaulicht, wie Sie U-SQL mit Azure Data Lake Tools für Visual Studio verwenden.That tutorial explains the mechanics of using U-SQL with Azure Data Lake Tools for Visual Studio.

Ihr erstes U-SQL-SkriptYour first U-SQL script

Das folgende U-SQL-Skript ist einfach aufgebaut und ermöglicht es, viele Aspekte der U-SQL-Sprache zu untersuchen.The following U-SQL script is simple and lets us explore many aspects the U-SQL language.

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

OUTPUT @searchlog   
    TO "/output/SearchLog-first-u-sql.csv"
    USING Outputters.Csv();

Dieses Skript weist keine Transformationsschritte auf.This script doesn't have any transformation steps. Es liest Daten aus der Quelldatei SearchLog.tsv und schematisiert sie. Anschließend schreibt es das Rowset wieder in eine Datei namens „SearchLog-first-u-sql.csv“.It reads from the source file called SearchLog.tsv, schematizes it, and writes the rowset back into a file called SearchLog-first-u-sql.csv.

Beachten Sie im Feld Duration das Fragezeichen neben dem Datentyp.Notice the question mark next to the data type in the Duration field. Dies bedeutet, dass das Feld Duration NULL sein kann.It means that the Duration field could be null.

Wichtige BegriffeKey concepts

  • Rowsetvariablen: Jeder Abfrageausdruck, der ein Rowset produziert, kann einer Variablen zugewiesen werden.Rowset variables: Each query expression that produces a rowset can be assigned to a variable. U-SQL basiert im Skript auf dem Benennungsmuster für T-SQL-Variablen (z.B. @searchlog).U-SQL follows the T-SQL variable naming pattern (@searchlog, for example) in the script.
  • Mit dem Schlüsselwort EXTRACT werden Daten aus einer Datei gelesen, und das Schema wird beim Lesen definiert.The EXTRACT keyword reads data from a file and defines the schema on read. Extractors.Tsv ist ein integrierter U-SQL-Extractor für Dateien mit durch Tabstopp getrennten Werten.Extractors.Tsv is a built-in U-SQL extractor for tab-separated-value files. Sie können benutzerdefinierte Extractors entwickeln.You can develop custom extractors.
  • Mit OUTPUT werden Daten aus einem Rowset in eine Datei geschrieben.The OUTPUT writes data from a rowset to a file. Outputters.Csv() ist ein integrierter U-SQL-Outputter zum Erstellen einer Datei mit kommagetrennten Werten.Outputters.Csv() is a built-in U-SQL outputter to create a comma-separated-value file. Sie haben die Möglichkeit, benutzerdefinierte Outputters zu entwickeln.You can develop custom outputters.

DateipfadeFile paths

Für die Anweisungen EXTRACT und OUTPUT werden Dateipfade verwendet.The EXTRACT and OUTPUT statements use file paths. Dateipfade können absolut oder relativ sein:File paths can be absolute or relative:

Der folgende absolute Dateipfad verweist auf eine Datei in einer Data Lake Store-Instanz mit dem Namen mystore:This following absolute file path refers to a file in a Data Lake Store named mystore:

adl://mystore.azuredatalakestore.net/Samples/Data/SearchLog.tsv

Der folgende relative Dateipfad beginnt mit "/".This following file path starts with "/". Er verweist auf eine Datei im Data Lake Store-Standardkonto:It refers to a file in the default Data Lake Store account:

/output/SearchLog-first-u-sql.csv

Verwenden von SkalarvariablenUse scalar variables

Sie können auch Skalarvariablen verwenden, um die Skriptverwaltung zu vereinfachen.You can use scalar variables as well to make your script maintenance easier. Das vorherige U-SQL-Skript kann auch wie folgt geschrieben werden:The previous U-SQL script can also be written as:

DECLARE @in  string = "/Samples/Data/SearchLog.tsv";
DECLARE @out string = "/output/SearchLog-scalar-variables.csv";

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM @in
    USING Extractors.Tsv();

OUTPUT @searchlog   
    TO @out
    USING Outputters.Csv();

Transformieren von RowsetsTransform rowsets

Verwenden Sie SELECT , um Rowsets zu transformieren:Use SELECT to transform rowsets:

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

@rs1 =
    SELECT Start, Region, Duration
    FROM @searchlog
WHERE Region == "en-gb";

OUTPUT @rs1   
    TO "/output/SearchLog-transform-rowsets.csv"
    USING Outputters.Csv();

Die WHERE-Klausel verwendet einen booleschen C#-Ausdruck.The WHERE clause uses a C# Boolean expression. Sie können die C#-Ausdruckssprache nutzen, um Ihre eigenen Ausdrücke und Funktionen zu erstellen.You can use the C# expression language to do your own expressions and functions. Sie können sogar komplexere Filtervorgänge durchführen, indem Sie die Ausdrücke und Funktionen mit logischen Konjunktionen (AND) und Disjunktionen (OR) kombinieren.You can even perform more complex filtering by combining them with logical conjunctions (ANDs) and disjunctions (ORs).

Im folgenden Skript werden die DateTime.Parse()-Methode und eine Konjunktion verwendet.The following script uses the DateTime.Parse() method and a conjunction.

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

@rs1 =
    SELECT Start, Region, Duration
    FROM @searchlog
WHERE Region == "en-gb";

@rs1 =
    SELECT Start, Region, Duration
    FROM @rs1
    WHERE Start >= DateTime.Parse("2012/02/16") AND Start <= DateTime.Parse("2012/02/17");

OUTPUT @rs1   
    TO "/output/SearchLog-transform-datetime.csv"
    USING Outputters.Csv();

Hinweis

Die zweite Abfrage verwendet das Ergebnis des ersten Rowsets, wodurch ein Verbund der beiden Filter entsteht.The second query is operating on the result of the first rowset, which creates a composite of the two filters. Sie können auch einen Variablennamen wiederverwenden, und die Namen werden lexikalisch begrenzt.You can also reuse a variable name, and the names are scoped lexically.

Aggregieren von RowsetsAggregate rowsets

Bei U-SQL können Sie die vertrauten Elemente ORDER BY und GROUP BY sowie Aggregationen verwenden.U-SQL gives you the familiar ORDER BY, GROUP BY, and aggregations.

Die folgende Abfrage sucht nach der Gesamtdauer pro Region und zeigt dann die ersten fünf Zeiträume in der Reihenfolge ihrer Länge an.The following query finds the total duration per region, and then displays the top five durations in order.

In U-SQL-Rowsets wird die Reihenfolge für die nächste Abfrage nicht beibehalten.U-SQL rowsets do not preserve their order for the next query. Zum Sortieren einer Ausgabe müssen Sie der OUTPUT-Anweisung also das ORDER BY-Element hinzufügen:Thus, to order an output, you need to add ORDER BY to the OUTPUT statement:

DECLARE @outpref string = "/output/Searchlog-aggregation";
DECLARE @out1    string = @outpref+"_agg.csv";
DECLARE @out2    string = @outpref+"_top5agg.csv";

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

@rs1 =
    SELECT
        Region,
        SUM(Duration) AS TotalDuration
    FROM @searchlog
GROUP BY Region;

@res =
    SELECT *
    FROM @rs1
    ORDER BY TotalDuration DESC
    FETCH 5 ROWS;

OUTPUT @rs1
    TO @out1
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

OUTPUT @res
    TO @out2
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

Für die ORDER BY-Klausel von U-SQL ist die Verwendung der FETCH-Klausel in einem SELECT-Ausdruck erforderlich.The U-SQL ORDER BY clause requires using the FETCH clause in a SELECT expression.

Die U-SQL-Klausel HAVING kann verwendet werden, um die Ausgabe auf Gruppen zu beschränken, die die HAVING-Bedingung erfüllen:The U-SQL HAVING clause can be used to restrict the output to groups that satisfy the HAVING condition:

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

@res =
    SELECT
        Region,
        SUM(Duration) AS TotalDuration
    FROM @searchlog
    GROUP BY Region
    HAVING SUM(Duration) > 200;

OUTPUT @res
    TO "/output/Searchlog-having.csv"
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

Erweiterte Aggregationsszenarien finden Sie in der U-SQL-Referenzdokumentation für Aggregat-, Analyse- und Referenzfunktionen.For advanced aggregation scenarios, see the U-SQL reference documentation for aggregate, analytic, and reference functions

Nächste SchritteNext steps