Azure Data Lake Analytics'de U-SQL kullanmaya başlama

Önemli

Azure Data Lake Analytics 29 Şubat 2024'te kullanımdan kaldırıldı. Bu duyuru ile daha fazla bilgi edinin.

Veri analizi için kuruluşunuz Azure Synapse Analytics veya Microsoft Fabric kullanabilir.

U-SQL, verileri herhangi bir ölçekte işlemenize olanak sağlamak için bildirim temelli SQL'i kesin C# ile birleştiren bir dildir. U-SQL'in ölçeklenebilir, dağıtılmış sorgu özelliği sayesinde verileri Azure SQL Veritabanı gibi ilişkisel depolarda verimli bir şekilde analiz edebilirsiniz. U-SQL ile, okuma işlemine şema uygulayıp özel mantık ve UDF'ler ekleyerek yapılandırılmamış verileri işleyebilirsiniz. Ayrıca U-SQL, büyük ölçekte yürütme konusunda ayrıntılı denetim sağlayan genişletilebilirlik içerir.

Öğrenme kaynakları

Şimdi bazı veriler oluşturalım

Aşağıdaki U-SQL betiği basittir ve diğer U-SQL betiklerimizde başvurabileceğiniz bir örnek veri dosyası oluşturmamıza olanak tanır. Sonraki bölümde bu betiğin kullandırılacağı temel kavramları ele alacağız.

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

Dosyadan veri okuma

Artık bazı verilerimiz olduğuna göre, oluşturduğumuz dosyadan okuyalım.

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

Bu betiğin herhangi bir dönüştürme adımı yoktur. adlı SearchLog.tsvkaynak dosyadan okur, şema haline getirir ve satır kümesini SearchLog-first-u-sql.csv adlı bir dosyaya geri yazar.

Alandaki veri türünün yanındaki soru işaretine Duration dikkat edin. Bu, Duration alanın null olabileceği anlamına gelir.

Önemli kavramlar

  • Satır kümesi değişkenleri: Satır kümesi oluşturan her sorgu ifadesi bir değişkene atanabilir. U-SQL, betikteki T-SQL değişken adlandırma desenini (@searchlogörneğin) izler.
  • EXTRACT anahtar sözcüğü bir dosyadaki verileri okur ve okumada şemayı tanımlar. Extractors.Tsv , sekmeyle ayrılmış değer dosyaları için yerleşik bir U-SQL ayıklayıcısıdır. Özel ayıklayıcılar geliştirebilirsiniz.
  • OUTPUT, verileri satır kümesinden bir dosyaya yazar. Outputters.Csv() , virgülle ayrılmış-değer dosyası oluşturmak için kullanılan yerleşik bir U-SQL çıkışlayıcısıdır. Özel çıkışlayıcılar geliştirebilirsiniz.

Dosya yolları

EXTRACT ve OUTPUT deyimleri dosya yollarını kullanır. Dosya yolları mutlak veya göreli olabilir:

Aşağıdaki mutlak dosya yolu, Adlı mystoreData Lake Store'daki bir dosyaya başvurur:

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

Aşağıdaki dosya yolu ile "/"başlar. Varsayılan Data Lake Store hesabındaki bir dosyaya başvurur:

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

Skaler değişkenleri kullanma

Betik bakımınızı kolaylaştırmak için skaler değişkenleri de kullanabilirsiniz. Önceki U-SQL betiği şu şekilde de yazılabilir:

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

Satır kümelerini dönüştürme

Satır kümelerini dönüştürmek için SELECT kullanın. Bu betik Başlangıç, Bölge ve Süre sütunlarını seçer ve Region değeri "en-gb" olduğunda bu satırları bir dosyaya yazar:

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

WHERE yan tümcesi bir C# Boole ifadesi kullanır. Kendi ifadelerinizi ve işlevlerinizi yapmak için C# ifade dilini kullanabilirsiniz. Hatta bunları mantıksal bağlaçlar (AND' ler) ve disjunctions (OR) ile birleştirerek daha karmaşık filtreleme de gerçekleştirebilirsiniz.

Aşağıdaki betik DateTime.Parse() yöntemini ve bir bağlaıcıyı kullanır. Başlangıç, Bölge ve Süre sütunlarını gösterir; burada Region değeri "en-gb" olur. Ardından, belirli tarihler arasındaki Süre sütununun değerlerini denetler ve bu değerleri bir dosyaya yazar:

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

Not

İkinci sorgu, iki filtrenin bileşimini oluşturan ilk satır kümesinin sonucu üzerinde çalışır. Ayrıca bir değişken adını yeniden kullanabilirsiniz ve adların kapsamı sözcük temelli olarak belirlenmiştir.

Satır kümelerini toplama

U-SQL size bilindik ORDER BY, GROUP BY ve toplamalar sağlar.

Aşağıdaki sorgu, bölge başına toplam süreyi bulur ve ardından ilk beş süreyi sırayla görüntüler.

U-SQL satır kümeleri bir sonraki sorgu için sıralarını korumaz. Bu nedenle, bir çıktıyı sıralamak için OUTPUT deyimine ORDER BY eklemeniz gerekir:

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

U-SQL ORDER BY yan tümcesi, BIR SELECT ifadesinde FETCH yan tümcesinin kullanılmasını gerektirir.

U-SQL HAVING yan tümcesi, çıkışı HAVING koşulunu karşılayan gruplarda kısıtlamak için kullanılabilir:

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

Gelişmiş toplama senaryoları için toplama, analiz ve başvuru işlevleri için U-SQL başvuru belgelerine bakın.

Sonraki adımlar