Aan de slag met U-SQL in Azure Data Lake Analytics

U-SQL is een taal die declaratieve SQL combineert met dwingende C#, zodat u gegevens op elke schaal kunt verwerken. U kunt met behulp van de schaal bare, gedistribueerde query mogelijkheden van U-SQL efficiënt gegevens in relationele winkels, zoals Azure SQL Database, analyseren. Met U-SQL kunt u ongestructureerde gegevens verwerken door schema toe te passen op lezen en aangepaste logica en Udf's in te voegen. Daarnaast bevat U-SQL-uitbrei ding waarmee u nauw keurige controle krijgt over het uitvoeren op schaal.

Trainingsmateriaal

Vereisten

Voordat u de U-SQL-voor beelden in dit document gaat door lopen, lees en volledige zelf studie: U-SQL-scripts ontwikkelen met data Lake-Hulpprogram ma's voor Visual Studio. In deze zelf studie worden de mechanismen uitgelegd van het gebruik van U-SQL met Azure Data Lake-Hulpprogram Ma's voor Visual Studio.

Uw eerste U-SQL-script

Het volgende U-SQL-script is eenvoudig en Hiermee kunnen we veel aspecten van de U-SQL-taal verkennen.

@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();

Dit script heeft geen transformatie stappen. Het Lees programma van het bron bestand met de naam SearchLog.tsv schematizes en schrijft de rijenset terug naar een bestand met de naam SearchLog-first-u-sql.csv.

Let op het vraag teken naast het gegevens type in het Duration veld. Dit betekent dat het Duration veld Null kan zijn.

Belangrijkste concepten

  • Variabelen van de rijenset: elke query-expressie die een rijenset produceert, kan worden toegewezen aan een variabele. U-SQL volgt het naamgevings patroon T-SQL-variabele ( @searchlog bijvoorbeeld) in het script.
  • Het sleutel woord extract leest gegevens uit een bestand en definieert het schema bij lezen. Extractors.Tsv is een ingebouwde U-SQL-extractor voor bestanden met door tabs gescheiden waarden. U kunt aangepaste Extracts ontwikkelen.
  • De uitvoer schrijft gegevens van een rijenset naar een bestand. Outputters.Csv() is een ingebouwde U-SQL-outputter voor het maken van een bestand met door komma's gescheiden waarden. U kunt aangepaste outputters ontwikkelen.

Bestands paden

De instructies EXTRACT en OUTPUT gebruiken bestands paden. Bestands paden kunnen absoluut of relatief zijn:

Het volgende absolute bestandspad verwijst naar een bestand in een Data Lake Store met de naam mystore :

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

Het volgende bestandspad begint met "/" . Dit verwijst naar een bestand in de standaard Data Lake Store account:

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

Scalaire variabelen gebruiken

U kunt scalaire variabelen ook gebruiken om uw script onderhoud eenvoudiger te maken. Het vorige U-SQL-script kan ook worden geschreven als:

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();

Rijen sets transformeren

Gebruik selecteren om rijen sets te transformeren:

@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();

De component WHERE maakt gebruik van een C# Boole-expressie. U kunt de C#-expressie taal gebruiken om uw eigen expressies en functies uit te voeren. U kunt zelfs complexere filters uitvoeren door ze te combi neren met logische samen voegingen (and) en ontkoppelingen (or).

Het volgende script maakt gebruik van de methode DateTime. parse () en een combi natie van.

@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();

Notitie

De tweede query wordt uitgevoerd op het resultaat van de eerste rijenset, waardoor een samen stelling van de twee filters wordt gemaakt. U kunt ook een naam van een variabele hergebruiken en de namen worden op een lexicale scope toegepast.

Cumulatieve rijen sets

U-SQL geeft u de bekende volg orde van, groeperen op en aggregaties.

Met de volgende query wordt de totale duur per regio gezocht, waarna de vijf meest voorkomende duur in de volg orde wordt weer gegeven.

U-SQL-rijen sets bewaren de volg orde van de volgende query niet. Als u een uitvoer wilt best Ellen, moet u dus een bestelling toevoegen aan de instructie OUTPUT:

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();

Voor de U-SQL ORDER BY-component moet de component FETCH worden gebruikt in een SELECT-expressie.

De component U-SQL HAVING kan worden gebruikt om de uitvoer te beperken tot groepen die voldoen aan de voor waarde HAVING:

@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();

Zie de naslag documentatie over U-SQL voor aggregatie, analyse en referentie functies voor geavanceerde aggregatie scenario's

Volgende stappen