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ı
- U-SQL Öğreticisi, U-SQL dilinin çoğuna yönelik kılavuzlu bir kılavuz sağlar. Bu belgenin U-SQL öğrenmek isteyen tüm geliştiriciler için okunması önerilir.
- U-SQL dili söz dizimi hakkında ayrıntılı bilgi için bkz. U-SQL Dil Başvurusu.
- U-SQL tasarım felsefesini anlamak için Visual Studio blog gönderisine bakın. Büyük Veri İşlemeyi Kolaylaştıran Bir Dil olan U-SQL'e Giriş.
Ş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.tsv
kaynak 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ı mystore
Data 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.