Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Azure Data Lake Analytics pensiun pada 29 Februari 2024. Pelajari lebih lanjut dengan pengumuman ini.
Untuk analitik data, organisasi Anda dapat menggunakan Azure Synapse Analytics atau Microsoft Fabric.
U-SQL adalah bahasa yang menggabungkan SQL deklaratif dengan C# imperatif untuk memungkinkan Anda memproses data dalam skala apa pun. Melalui kemampuan kueri terdistribusi U-SQL yang dapat diskalakan, Anda dapat menganalisis data secara efisien di seluruh penyimpanan relasional seperti Azure SQL Database. Dengan U-SQL, Anda dapat memproses data yang tidak terstruktur dengan menerapkan skema pada membaca dan menyisipkan logika kustom dan UDF. Selain itu, U-SQL mencakup ekstensibilitas yang memberi Anda kontrol halus tentang cara mengeksekusi dalam skala besar.
Sumber daya pembelajaran
- Tutorial U-SQL menyediakan panduan dari sebagian besar bahasa U-SQL. Dokumen ini direkomendasikan untuk dibaca untuk semua pengembang yang ingin mempelajari U-SQL.
- Untuk informasi terperinci tentang sintaks bahasa U-SQL, lihat Referensi Bahasa U-SQL.
- Untuk memahami filosofi desain U-SQL, lihat posting blog Visual Studio Memperkenalkan U-SQL - Bahasa yang memudahkan Pemrosesan Big Data.
Mari kita buat beberapa data
Skrip U-SQL berikut ini sederhana dan memungkinkan kita membuat file data sampel yang dapat kita referensikan dalam skrip U-SQL kita yang lain. Kita akan membahas konsep utama yang membuat skrip ini masuk di bagian berikutnya.
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();
Membaca data dari sebuah file
Karena kita sudah memiliki beberapa data, mari kita baca dari file yang kita buat.
@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();
Skrip ini tidak memiliki langkah transformasi apa pun. Ini membaca dari file sumber yang disebut SearchLog.tsv
, menskemakannya, dan menulis set baris kembali ke dalam file yang disebut SearchLog-first-u-sql.csv.
Perhatikan tanda tanya di samping jenis data di Duration
bidang . Ini berarti bahwa Duration
bidang bisa null (kosong).
Konsep utama
-
Variabel set baris: Setiap ekspresi kueri yang menghasilkan set baris dapat ditetapkan ke variabel. U-SQL mengikuti pola penamaan variabel T-SQL (
@searchlog
misalnya) dalam skrip. - Kata kunci EXTRACT membaca data dari file dan menentukan skema saat dibaca.
Extractors.Tsv
adalah ekstraktor U-SQL bawaan untuk file nilai yang dipisahkan tab. Anda dapat mengembangkan ekstraktor kustom. -
OUTPUT menulis data dari kumpulan baris ke file.
Outputters.Csv()
adalah outputter U-SQL bawaan untuk membuat file nilai yang dipisahkan koma. Anda dapat mengembangkan outputter kustom.
Jalur file
Pernyataan EXTRACT dan OUTPUT menggunakan jalur file. Jalur file bisa absolut atau relatif:
Jalur file absolut berikut ini mengacu pada file di Data Lake Store bernama mystore
:
adl://mystore.azuredatalakestore.net/Samples/Data/SearchLog.tsv
Jalur file berikut ini dimulai dengan "/"
. Ini mengacu pada file di akun Data Lake Store default:
/output/SearchLog-first-u-sql.csv
Menggunakan variabel skalar
Anda juga dapat menggunakan variabel skalar untuk mempermudah pemeliharaan skrip Anda. Skrip U-SQL sebelumnya juga dapat ditulis sebagai:
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();
Mengubah kumpulan baris
Gunakan SELECT untuk mengubah kumpulan baris. Skrip ini akan memilih kolom Mulai, Wilayah, dan Durasi, dan akan menulis baris tersebut ke file ketika Wilayah memiliki nilai "en-gb":
@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();
Klausa WHERE menggunakan ekspresi C# Boolean. Anda dapat menggunakan bahasa ekspresi C# untuk melakukan ekspresi dan fungsi Anda sendiri. Anda bahkan dapat melakukan pemfilteran yang lebih kompleks dengan menggabungkannya dengan konjungsi logis (AND) dan disjungsi (OR).
Skrip berikut menggunakan metode DateTime.Parse() dan konjunsi. kolom Mulai, Wilayah, dan Durasi, di mana Wilayah memiliki nilai "en-gb". Kemudian memeriksa nilai kolom Durasi antara tanggal tertentu dan menulis nilai tersebut ke file:
@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();
Nota
Kueri kedua dijalankan pada hasil kumpulan baris pertama, yang menciptakan gabungan dari dua filter. Anda juga dapat menggunakan kembali nama variabel, dan nama dicakup secara leksikal.
Kumpulan baris teragregasi
U-SQL memberikan Anda ORDER BY, GROUP BY, dan agregasi yang sudah dikenal.
Kueri berikut menemukan total durasi per wilayah, lalu menampilkan lima durasi teratas secara berurutan.
Himpunan baris U-SQL tidak mempertahankan urutannya untuk kueri berikutnya. Dengan demikian, untuk memesan output, Anda perlu menambahkan ORDER BY ke pernyataan OUTPUT:
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();
Klausa U-SQL ORDER BY memerlukan penggunaan klausa FETCH dalam ekspresi SELECT.
Klausul U-SQL HAVING dapat digunakan untuk membatasi output ke grup yang memenuhi kondisi HAVING:
@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();
Untuk skenario agregasi tingkat lanjut, lihat dokumentasi referensi U-SQL untuk fungsi agregat, analitik, dan referensi.