بدء استخدام 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 الأخرى. سنناقش المفاهيم الرئيسية التي تجعل هذا البرنامج النصي ينتقل في القسم التالي.

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 للوظائف التجميعية والتحليلية والمرجعية.

الخطوات التالية