Wprowadzenie do wykazu U-SQL na platformie Azure Data Lake Analytics

Ważne

Usługa Azure Data Lake Analytics została wycofana 29 lutego 2024 r. Dowiedz się więcej z tym ogłoszeniem.

W przypadku analizy danych organizacja może używać Azure Synapse Analytics lub Microsoft Fabric.

Tworzenie programu TVF

W poprzednim skryscie U-SQL powtórzone jest użycie funkcji EXTRACT do odczytu z tego samego pliku źródłowego. Za pomocą funkcji U-SQL table-valued (TVF) można hermetyzować dane na potrzeby przyszłego ponownego użycia.

Poniższy skrypt tworzy program TVF o nazwie Searchlog() w domyślnej bazie danych i schemacie:

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;

Poniższy skrypt pokazuje, jak używać programu TVF zdefiniowanego w poprzednim skrypcie:

@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();

Tworzenie widoków

Jeśli masz jedno wyrażenie zapytania, zamiast tvF możesz użyć widoku U-SQL, aby hermetyzować to wyrażenie.

Poniższy skrypt tworzy widok o nazwie SearchlogView w domyślnej bazie danych i schemacie:

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();

Poniższy skrypt demonstruje użycie zdefiniowanego widoku:

@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();

Tworzenie tabel

Podobnie jak w przypadku tabel relacyjnych baz danych, w przypadku języka U-SQL można utworzyć tabelę ze wstępnie zdefiniowanym schematem lub utworzyć tabelę, która wywnioskuje schemat z zapytania, które wypełnia tabelę (znaną również jako CREATE TABLE AS SELECT lub CTAS).

Utwórz bazę danych i dwie tabele przy użyciu następującego skryptu:

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

Wykonywanie zapytań dotyczących tabel

Tabele, takie jak utworzone w poprzednim skrycie, można wykonywać zapytania w taki sam sposób, jak w przypadku wykonywania zapytań dotyczących plików danych. Zamiast tworzyć zestaw wierszy przy użyciu funkcji EXTRACT, możesz teraz odwoływać się do nazwy tabeli.

Aby odczytać z tabel, zmodyfikuj wcześniej użyty skrypt przekształcania:

@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();

Uwaga

Obecnie nie można uruchomić polecenia SELECT w tabeli w tym samym skrycie, co ta, w której utworzono tabelę.

Następne kroki