Azure Data Lake Analytics 'de U-SQL ile çalışmaya başlama

U-SQL, herhangi bir ölçekte verileri işlemenizi sağlamak Için bildirim temelli SQL 'i tanımlayıcı C# ile birleştiren bir dildir. U-SQL ' i n ölçeklenebilir, dağıtılmış sorgu özelliği aracılığıyla Azure SQL veritabanı gibi ilişkisel depolarda verileri verimli bir şekilde çözümleyebilirsiniz. U-SQL ile, okuma ve özel mantık ve UDF 'ler ekleme üzerine şema uygulayarak yapılandırılmamış verileri işleyebilirsiniz. Ayrıca, U-SQL, ölçekte nasıl yürütülebilecek konusunda ayrıntılı denetim sağlayan genişletilebilirlik içerir.

Öğrenme kaynakları

Önkoşullar

Bu belgedeki U-SQL örneklerinden geçmeden önce, öğreticiyi tamamlayın: Visual Studio için Data Lake araçları 'nı kullanarak u-SQL betikleri geliştirin. Bu öğreticide, Visual Studio için Azure Data Lake Araçları ile U-SQL kullanma mekanizması açıklanmaktadır.

İlk U-SQL betiğiniz

Aşağıdaki U-SQL betiği basittir ve U-SQL dilinin birçok yönlerini araştırmamızı sağlar.

@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 betikte herhangi bir dönüştürme adımı yok. Adlı kaynak dosyadan okur SearchLog.tsv , şema bunu birleştirir 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 dikkat edin Duration . Bu, alanın null olabileceği anlamına gelir Duration .

Önemli kavramlar

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

Dosya yolları

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

Aşağıdaki mutlak dosya yolu, adında bir Data Lake Store dosya anlamına gelir mystore :

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

Skalar değişkenler kullanın

Skalar değişkenleri kullanabilir ve betik bakımının daha kolay olmasını sağlayabilirsiniz. Önceki U-SQL betiği de şöyle 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ür

Satır kümelerini dönüştürmek için Seç ' i kullanın:

@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# Boolean ifadesikullanır. C# ifade dilini kullanarak kendi ifadelerinizi ve işlevlerinizi gerçekleştirebilirsiniz. Hatta bunları mantıksal yarışmalar (and) ve ayırt edici (ORs) ile birleştirerek daha karmaşık filtreler de gerçekleştirebilirsiniz.

Aşağıdaki betik DateTime. Parse () yöntemini ve bir birlikte kullanır.

@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ışıyor. Ayrıca bir değişken adını yeniden kullanabilirsiniz ve adlar kapsama göre kapsamlandırılır.

Toplu satır kümeleri

U-SQL, size göre tanıdık SıRALAMA, gruplama ölçütü ve toplamaları sağlar.

Aşağıdaki sorgu, bölge başına toplam süreyi bulur ve sonra ilk beş süreyi sırasıyla 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 ifadesine 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ış koşulunu karşılayan gruplarla sınırlamak 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ında, bkz. toplu, analitik ve başvuru işlevleri için U-SQL başvurusu belgeleri

Sonraki adımlar