بدء استخدام كتالوج U-SQL في Azure Data Lake Analytics

هام

تم إيقاف Azure Data Lake Analytics في 29 فبراير 2024. تعرف على المزيد من خلال هذا الإعلان.

بالنسبة لتحليلات البيانات، يمكن لمؤسستك استخدام Azure Synapse Analytics أو Microsoft Fabric.

إنشاء TVF

في البرنامج النصي U-SQL السابق، كررت استخدام EXTRACT للقراءة من نفس الملف المصدر. باستخدام الدالة U-SQL ذات القيمة الجدولية (TVF)، يمكنك تغليف البيانات لإعادة استخدامها في المستقبل.

ينشئ البرنامج النصي التالي TVF يسمى Searchlog() في قاعدة البيانات الافتراضية والمخطط:

DROP FUNCTION IF EXISTS Searchlog;

CREATE FUNCTION Searchlog()
RETURNS @searchlog TABLE
(
            UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
)
AS BEGIN
@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
USING Extractors.Tsv();
RETURN;
END;

يوضح لك البرنامج النصي التالي كيفية استخدام TVF الذي تم تعريفه في البرنامج النصي السابق:

@res =
    SELECT
        Region,
        SUM(Duration) AS TotalDuration
    FROM Searchlog() AS S
GROUP BY Region
HAVING SUM(Duration) > 200;

OUTPUT @res
    TO "/output/SearchLog-use-tvf.csv"
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

إنشاء طرق عرض

إذا كان لديك تعبير استعلام واحد، فبدلا من TVF، يمكنك استخدام طريقة عرض U-SQL لتغليف هذا التعبير.

ينشئ البرنامج النصي التالي طريقة عرض تسمى SearchlogView في قاعدة البيانات الافتراضية والمخطط:

DROP VIEW IF EXISTS SearchlogView;

CREATE VIEW SearchlogView AS  
    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 SearchlogView
GROUP BY Region
HAVING SUM(Duration) > 200;

OUTPUT @res
    TO "/output/Searchlog-use-view.csv"
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

إنشاء جداول

كما هو الحال مع جداول قاعدة البيانات الارتباطية، باستخدام U-SQL، يمكنك إنشاء جدول بمخطط محدد مسبقا أو إنشاء جدول يستنتج المخطط من الاستعلام الذي يملأ الجدول (المعروف أيضا باسم CREATE TABLE AS SELECT أو CTAS).

إنشاء قاعدة بيانات وجدولين باستخدام البرنامج النصي التالي:

DROP DATABASE IF EXISTS SearchLogDb;
CREATE DATABASE SearchLogDb;
USE DATABASE SearchLogDb;

DROP TABLE IF EXISTS SearchLog1;
DROP TABLE IF EXISTS SearchLog2;

CREATE TABLE SearchLog1 (
            UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string,

            INDEX sl_idx CLUSTERED (UserId ASC)
                DISTRIBUTED BY HASH (UserId)
);

INSERT INTO SearchLog1 SELECT * FROM master.dbo.Searchlog() AS s;

CREATE TABLE SearchLog2(
    INDEX sl_idx CLUSTERED (UserId ASC)
            DISTRIBUTED BY HASH (UserId)
) AS SELECT * FROM master.dbo.Searchlog() AS S; // You can use EXTRACT or SELECT here

جداول الاستعلام

يمكنك الاستعلام عن الجداول، مثل تلك التي تم إنشاؤها في البرنامج النصي السابق، بنفس الطريقة التي تستعلم بها عن ملفات البيانات. بدلا من إنشاء مجموعة صفوف باستخدام EXTRACT، يمكنك الآن الرجوع إلى اسم الجدول.

للقراءة من الجداول، قم بتعديل البرنامج النصي للتحويل الذي استخدمته سابقا:

@rs1 =
    SELECT
        Region,
        SUM(Duration) AS TotalDuration
    FROM SearchLogDb.dbo.SearchLog2
GROUP BY Region;

@res =
    SELECT *
    FROM @rs1
    ORDER BY TotalDuration DESC
    FETCH 5 ROWS;

OUTPUT @res
    TO "/output/Searchlog-query-table.csv"
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

ملاحظة

حاليا، لا يمكنك تشغيل SELECT على جدول في نفس البرنامج النصي مثل البرنامج النصي الذي أنشأت الجدول فيه.

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