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ı
- U-SQL öğreticisi , u-SQL dilinin büyük bir adım adım kılavuz sağlar. Bu belge, U-SQL öğrenmekle mücadele eden tüm geliştiriciler için okunmaya önerilir.
- U-SQL dili sözdizimi hakkında ayrıntılı bilgi için, bkz. u-SQL dili başvurusu.
- U-SQL tasarım FI'sini anlamak Için, Visual Studio blog gönderisine ( u-SQL tanıtımı), büyük veri işlemeyi kolay hale getiren bir diliinceleyin.
Ö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