بدء استخدام U-SQL في Azure Data Lake Analytics
هام
تم إيقاف Azure Data Lake Analytics في 29 فبراير 2024. تعرف على المزيد من خلال هذا الإعلان.
بالنسبة لتحليلات البيانات، يمكن لمؤسستك استخدام Azure Synapse Analytics أو Microsoft Fabric.
U-SQL هي لغة تجمع بين SQL التعريفي وC# الإلزامي للسماح لك بمعالجة البيانات على أي نطاق. من خلال إمكانية الاستعلام الموزع القابلة للتطوير ل U-SQL، يمكنك تحليل البيانات بكفاءة عبر المتاجر الارتباطية مثل قاعدة بيانات Azure SQL. باستخدام U-SQL، يمكنك معالجة البيانات غير المنظمة عن طريق تطبيق المخطط على قراءة وإدراج منطق مخصص وUDFs. بالإضافة إلى ذلك، يتضمن U-SQL القابلية للتوسعة التي تمنحك تحكما دقيقا في كيفية التنفيذ على نطاق واسع.
موارد التعليم
- يوفر البرنامج التعليمي U-SQL معاينة إرشادية لمعظم لغة U-SQL. يوصى بقراءة هذا المستند لجميع المطورين الذين يرغبون في تعلم U-SQL.
- للحصول على معلومات مفصلة حول بناء جملة لغة U-SQL، راجع مرجع لغة U-SQL.
- لفهم فلسفة تصميم U-SQL، راجع منشور مدونة Visual Studio تقديم U-SQL - لغة تجعل معالجة البيانات الضخمة سهلة.
دعونا ننشئ بعض البيانات
البرنامج النصي U-SQL التالي بسيط ويتيح لنا إنشاء نموذج ملف بيانات يمكننا الرجوع إليه في البرامج النصية U-SQL الأخرى. سنناقش المفاهيم الرئيسية التي تجعل هذا البرنامج النصي ينتقل في القسم التالي.
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();
قراءة البيانات من ملف
الآن بعد أن أصبح لدينا بعض البيانات، دعنا نقرأها من الملف الذي أنشأناه.
@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();
لا يحتوي هذا البرنامج النصي على أي خطوات تحويل. يقرأ من الملف المصدر المسمى SearchLog.tsv
، ويخططه، ويكتب مجموعة الصفوف مرة أخرى في ملف يسمى SearchLog-first-u-sql.csv.
لاحظ علامة الاستفهام بجوار نوع البيانات في Duration
الحقل. وهذا يعني أن Duration
الحقل قد يكون خاليا.
المفاهيم الرئيسية
-
متغيرات مجموعة الصفوف: يمكن تعيين كل تعبير استعلام ينتج مجموعة صفوف إلى متغير. يتبع U-SQL نمط تسمية متغير T-SQL (
@searchlog
على سبيل المثال) في البرنامج النصي. - تقرأ الكلمة الأساسية EXTRACT البيانات من ملف وتحدد المخطط عند القراءة.
Extractors.Tsv
هو مستخرج U-SQL مضمن لملفات القيمة المفصولة بعلامات التبويب. يمكنك تطوير مستخرجات مخصصة. - يقوم OUTPUT بكتابة البيانات من مجموعة صفوف إلى ملف.
Outputters.Csv()
هو مخرج U-SQL مضمن لإنشاء ملف قيمة مفصولة بفواصل. يمكنك تطوير مخرجات مخصصة.
مسارات الملفات
تستخدم عبارات EXTRACT و OUTPUT مسارات الملفات. يمكن أن تكون مسارات الملفات مطلقة أو نسبية:
يشير مسار الملف المطلق التالي إلى ملف في Data Lake Store باسم mystore
:
adl://mystore.azuredatalakestore.net/Samples/Data/SearchLog.tsv
يبدأ مسار الملف التالي هذا ب "/"
. يشير إلى ملف في حساب Data Lake Store الافتراضي:
/output/SearchLog-first-u-sql.csv
استخدام المتغيرات العددية
يمكنك استخدام المتغيرات العددية أيضا لتسهيل صيانة البرنامج النصي. يمكن أيضا كتابة البرنامج النصي U-SQL السابق على النحو التالي:
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();
تحويل مجموعات الصفوف
استخدم SELECT لتحويل مجموعات الصفوف. سيحدد هذا البرنامج النصي أعمدة البدء والمنطقة والمدة، وسيكتب هذه الصفوف إلى ملف عندما تحتوي المنطقة على قيمة "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();
تستخدم عبارة WHERE تعبيرا منطقيا C#. يمكنك استخدام لغة التعبير C# للقيام بالتعبيرات والوظائف الخاصة بك. يمكنك حتى إجراء تصفية أكثر تعقيدا عن طريق دمجها مع الاقترانات المنطقية (AND) والفصل (ORs).
يستخدم البرنامج النصي التالي الأسلوب DateTime.Parse() والتزامن. أعمدة البدء والمنطقة والمدة، حيث تحتوي المنطقة على قيمة "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";
@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();
ملاحظة
الاستعلام الثاني يعمل على نتيجة مجموعة الصفوف الأولى، والتي تنشئ مركبا من عاملي التصفية. يمكنك أيضا إعادة استخدام اسم متغير، ويتم تحديد نطاق الأسماء معجميا.
تجميع مجموعات الصفوف
يمنحك U-SQL ORDER BY وGROUP BY والتجميعات المألوفة.
يبحث الاستعلام التالي عن المدة الإجمالية لكل منطقة، ثم يعرض أفضل خمس مدد بالترتيب.
لا تحتفظ مجموعات صفوف U-SQL بترتيبها للاستعلام التالي. وبالتالي، لطلب إخراج، تحتاج إلى إضافة ORDER BY إلى عبارة 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();
تتطلب عبارة U-SQL ORDER BY استخدام عبارة FETCH في تعبير SELECT.
يمكن استخدام عبارة U-SQL HAVING لتقييد الإخراج إلى المجموعات التي تفي بشرط 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();
للحصول على سيناريوهات التجميع المتقدمة، راجع الوثائق المرجعية U-SQL للوظائف التجميعية والتحليلية والمرجعية.