Első lépések U-SQL a Azure Data Lake Analytics-ben

U-SQL egy olyan nyelv, amely a deklaratív SQL és az imperatív C# nyelv kombinálásával teszi lehetővé az adatok bármilyen szintű feldolgozását. A U-SQL skálázható, elosztott lekérdezési képességével hatékonyan elemezheti az adatokat relációs tárolókban, például Azure SQL Database. A U-SQL a strukturálatlan adatokat úgy dolgozhatja fel, hogy sémát alkalmaz az egyéni logika és UDF-ek olvasására és beszúrására. Emellett U-SQL bővíthetőséget is tartalmaz, amely részletes vezérlést biztosít a nagy léptékű végrehajtáshoz.

Képzési források

Előfeltételek

Mielőtt végighalad a dokumentumban található U-SQL mintákon, olvassa el és fejezze be a következő oktatóanyagot: U-SQL-szkriptek fejlesztése a Data Lake Tools for Visual Studio használatával. Ez az oktatóanyag a U-SQL az Azure Data Lake Tools for Visual Studio használatával kapcsolatos mechanikát ismerteti.

Az első U-SQL-szkript

Az alábbi U-SQL szkript egyszerű, és lehetővé teszi a U-SQL nyelv számos aspektusának megismerését.

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

Ez a szkript nem rendelkezik átalakítási lépésekkel. Beolvassa a forrásfájlból SearchLog.tsv, sémába helyezi, és visszaírja a sorhalmazt egy SearchLog-first-u-sql.csv nevű fájlba.

Figyelje meg a mező adattípusa melletti kérdőjelet Duration . Ez azt jelenti, hogy a Duration mező null értékű lehet.

Fő fogalmak

  • Sorhalmazváltozók: Minden sorhalmazt előállító lekérdezési kifejezés hozzárendelhető egy változóhoz. U-SQL a T-SQL változó elnevezési mintáját követi (@searchlogpéldául) a szkriptben.
  • A EXTRACT kulcsszó adatokat olvas be egy fájlból, és a sémát olvasottként határozza meg. Extractors.TsvA egy beépített U-SQL-elválasztó a tabulátorral tagolt értékeket tartalmazó fájlokhoz. Egyéni kiszívókat fejleszthet.
  • Az OUTPUT adatokat ír egy sorhalmazból egy fájlba. Outputters.Csv()A egy beépített U-SQL kimenet, amely vesszővel tagolt értékfájlt hoz létre. Egyéni kiírókat is fejleszthet.

Fájlelérési utak

A EXTRACT és az OUTPUT utasítások fájlelérési utakat használnak. A fájlelérési utak lehetnek abszolútak vagy relatívak:

A következő abszolút elérési út egy Data Lake Store-ban mystoretalálható fájlra hivatkozik:

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

A következő fájlelérési út a következővel "/"kezdődik: Az alapértelmezett Data Lake Store-fiókban lévő fájlra hivatkozik:

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

Skaláris változók használata

Skaláris változókkal is megkönnyítheti a szkriptek karbantartását. Az előző U-SQL szkript a következőképpen is írható:

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

Sorhalmazok átalakítása

A SELECT használatával átalakíthatja a sorhalmazokat:

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

A WHERE záradék C# logikai kifejezést használ. A C# kifejezésnyelvet használhatja saját kifejezések és függvények elvégzésére. Még összetettebb szűrést is végezhet, ha logikai kötőszavakkal (AND-kkel) és letiltásokkal (ORs) kombinálja őket.

A következő szkript a DateTime.Parse() metódust és egy kötőszót használ.

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

Megjegyzés

A második lekérdezés az első sorhalmaz eredményén működik, amely létrehozza a két szűrő összetett részét. A változónevek újra felhasználhatók, és a nevek hatóköre lexikális.

Sorok összesítése

U-SQL a megszokott ORDER BY, GROUP BY és aggregációkat biztosítja.

A következő lekérdezés megkeresi a régiónkénti teljes időtartamot, majd sorrendben megjeleníti az első öt időtartamot.

U-SQL sorhalmazok nem őrzik meg a következő lekérdezés sorrendjét. Így a kimenet megrendeléséhez hozzá kell adnia az ORDER BY utasítást az OUTPUT utasításhoz:

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

Az U-SQL ORDER BY záradék használatához a FETCH záradékot kell használni egy SELECT kifejezésben.

A U-SQL HAVING záradékkal a kimenetet olyan csoportokra korlátozhatja, amelyek megfelelnek a HAVING feltételnek:

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

Speciális összesítési forgatókönyvekért tekintse meg az összesítő, elemzési és referenciafüggvények U-SQL referenciadokumentációját

Következő lépések