Share via


A U-SQL használatának első lépései az Azure Data Lake Analytics

Fontos

Az Azure Data Lake Analytics 2024. február 29-én megszűnt. További információ ezzel a bejelentéssel.

Az adatelemzéshez a szervezet használhatja a Azure Synapse Analyticset vagy a Microsoft Fabricet.

Az U-SQL egy olyan nyelv, amely egyesíti a deklaratív SQL-t az imperatív C#-tal, hogy bármilyen léptékben feldolgozhassa az adatokat. Az U-SQL skálázható, elosztott lekérdezési képességével hatékonyan elemezheti az adatokat a relációs tárolókban, például Azure SQL Database-ben. Az U-SQL használatával strukturálatlan adatokat dolgozhat fel úgy, hogy sémát alkalmaz az egyéni logikák és UDF-ek olvasására és beszúrására. Emellett az U-SQL bővíthetőséget is tartalmaz, amely részletes szabályozást biztosít a nagy léptékű végrehajtáshoz.

Képzési források

Hozzunk létre néhány adatot

A következő U-SQL-szkript egyszerű, és lehetővé teszi egy mintaadatfájl létrehozását, amelyet a többi U-SQL-szkriptben is hivatkozhatunk. A szkriptet a következő szakaszban fogjuk tárgyalni.

USE DATABASE master;
USE SCHEMA dbo;
@a  = 
    SELECT * FROM 
        (VALUES
            (399266, "2/15/2012 11:53:16 AM", "en-us", "microsoft", 73, "microsoft.com;xbox.com", "NULL"),
			(382045, "2/15/2012 11:53:18 AM", "en-gb", "azure data lake analytics", 614, "microsoft.com;portal.azure.com", "portal.azure.com"),
			(382045, "2/16/2012 11:53:20 AM", "en-gb", "usql", 74, "microsoft.com;github.com", "NULL"),
			(106479, "2/16/2012 11:53:50 AM", "en-ca", "xbox", 24, "xbox.com;xbox.com/xbox360", "xbox.com/xbox360"),
			(906441, "2/16/2012 11:54:01 AM", "en-us", "machine learning", 1213, "microsoft.com;github.com", "NULL"),
			(304305, "2/16/2012 11:54:03 AM", "en-us", "outlook", 60, "microsoft.com;office.com;live.com","microsoft.com"),
			(460748, "2/16/2012 11:54:04 AM", "en-us", "azure storage", 1270, "microsoft.com;portal.azure.com", "portal.azure.com"),
			(354841, "2/16/2012 11:59:01 AM", "en-us", "azure", 610, "microsoft.com;portal.azure.com", "portal.azure.com"),
			(354068, "2/16/2012 12:00:33 PM", "en-mx", "key vault", 422, "microsoft.com;portal.azure.com", "portal.azure.com"),
			(347413, "2/16/2012 12:11:55 PM", "en-gr", "github", 305, "github.com", "NULL"),
			(840614, "2/16/2012 12:13:56 PM", "en-us", "surface", 1220, "microsoft.com", "NULL"),
			(656666, "2/16/2012 12:15:55 PM", "en-us", "visual studio", 691, "microsoft.com;code.visualstudio.com", "NULL"),
			(951513, "2/16/2012 12:17:00 PM", "en-us", "power bi", 63, "microsoft.com;app.powerbi.com", "powerbi.com"),
			(350350, "2/16/2012 12:18:17 PM", "en-us", "data factory", 30, "microsoft.com;portal.azure.com", "NULL"),
			(641615, "2/16/2012 12:19:55 PM", "en-us", "event hubs", 119, "microsoft.com;portal.azure.com", "NULL")
        ) AS 
              D( UserId, Start, Region, Query, Duration, Urls, ClickedUrls );
OUTPUT @a
    TO "Samples/Data/SearchLog.tsv"
    USING Outputters.Tsv();

Adatok olvasása fájlból

Most, hogy van néhány adatunk, olvassuk el a létrehozott fájlbó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();

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

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

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

Fő fogalmak

  • Sorhalmaz-változók: A sorkészletet előállító lekérdezési kifejezések hozzárendelhetők egy változóhoz. Az U-SQL a T-SQL változó elnevezési mintáját követi (@searchlogpéldául) a szkriptben.
  • A EXTRACT kulcsszó beolvassa az adatokat egy fájlból, és az olvasási sémát határozza meg. Extractors.Tsv egy beépített U-SQL-kinyerő a tabulátorral tagolt értékfájlokhoz. Egyéni kiszívókat fejleszthet.
  • Az OUTPUT adatokat ír egy sorkészletből egy fájlba. Outputters.Csv() egy beépített U-SQL-kimenet, amely vesszővel tagolt értékfájlt hoz létre. Egyéni kimenetiket fejleszthet.

Fájlelérési utak

A EXTRACT és a 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 fájlelérési út egy nevű Data Lake Store-beli mystorefájlra hivatkozik:

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

A következő fájl elérési útja 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ókat is használhat, hogy megkönnyítse 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 alakítsa át a sorhalmazokat. Ez a szkript kiválasztja a Start, a Region és az Duration oszlopokat, és a sorokat egy fájlba írja, ha a Régió értéke "en-gb":

@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 egy C# logikai kifejezést használ. A C# kifejezésnyelvet használhatja saját kifejezések és függvények végrehajtásához. Még összetettebb szűrést is végrehajthat, ha logikai kötőszavakkal (AND-kkel) és letiltásokkal (ORS-ekkel) kombinálja őket.

A következő szkript a DateTime.Parse() metódust és egy kötőjelet használ. a Start, a Region és az Duration oszlopokat, ahol a Régió értéke "en-gb". Ezután ellenőrzi az Időtartam oszlop értékeit bizonyos dátumok között, és az értékeket egy fájlba írja:

@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énye alapján működik, amely létrehozza a két szűrő összetett elemét. A változók nevét is újra felhasználhatja, és a nevek lexikális hatókörrel vannak elosztva.

Sorok összesítése

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

Az alábbi lekérdezés megkeresi a régiónkénti teljes időtartamot, majd sorrendben megjeleníti az első öt időtartamot.

Az U-SQL-sorok nem őrzik meg a következő lekérdezés sorrendjét. Így a kimenet megrendeléséhez hozzá kell adnia az ORDER BY értéket 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.

Az U-SQL HAVING záradék használatával 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();

A 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