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
- A U-SQL oktatóanyag a U-SQL nyelv nagy részének interaktív bemutatóját tartalmazza. Ez a dokumentum minden fejlesztő számára ajánlott, aki szeretné megismerni U-SQL.
- Az U-SQL nyelv szintaxisáról a U-SQL nyelvi referenciában talál részletes információt.
- A U-SQL tervezési filozófiájának megismeréséhez tekintse meg a Visual Studio blogbejegyzést, amely bemutatja a U-SQL – A big data-feldolgozást megkönnyítő nyelvet.
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