Share via


Aan de slag met de U-SQL-catalogus in Azure Data Lake Analytics

Belangrijk

Azure Data Lake Analytics op 29 februari 2024 buiten gebruik gesteld. Meer informatie over deze aankondiging.

Voor gegevensanalyse kan uw organisatie gebruikmaken van Azure Synapse Analytics of Microsoft Fabric.

Een TVF maken

In het vorige U-SQL-script hebt u het gebruik van EXTRACT herhaald om uit hetzelfde bronbestand te lezen. Met de U-SQL-functie tabelwaarde (TVF) kunt u de gegevens inkapselen voor toekomstig hergebruik.

Met het volgende script maakt u een TVF met de naam Searchlog() in de standaarddatabase en het standaardschema:

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;

In het volgende script ziet u hoe u de TVF gebruikt die in het vorige script is gedefinieerd:

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

Weergaven maken

Als u één query-expressie hebt, kunt u in plaats van een TVF een U-SQL VIEW gebruiken om die expressie in te kapselen.

Met het volgende script maakt u een weergave met de naam SearchlogView in de standaarddatabase en het standaardschema:

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

Het volgende script demonstreert het gebruik van de gedefinieerde weergave:

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

Tabellen maken

Net als bij relationele databasetabellen kunt u met U-SQL een tabel maken met een vooraf gedefinieerd schema of een tabel maken die het schema afdekent uit de query waarmee de tabel wordt gevuld (ook wel CREATE TABLE AS SELECT of CTAS genoemd).

Maak een database en twee tabellen met behulp van het volgende script:

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

Querytabellen

U kunt query's uitvoeren op tabellen, zoals de tabellen die in het vorige script zijn gemaakt, op dezelfde manier als waarop u een query uitvoert op de gegevensbestanden. In plaats van een rijenset te maken met behulp van EXTRACT, kunt u nu verwijzen naar de tabelnaam.

Als u uit de tabellen wilt lezen, wijzigt u het transformatiescript dat u eerder hebt gebruikt:

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

Notitie

Op dit moment kunt u een SELECT niet uitvoeren op een tabel in hetzelfde script als het script waarin u de tabel hebt gemaakt.

Volgende stappen