Introdução ao Catálogo U-SQL no Azure Data Lake Analytics

Importante

O Azure Data Lake Analytics descontinuado a 29 de fevereiro de 2024. Saiba mais com este anúncio.

Para análise de dados, a sua organização pode utilizar o Azure Synapse Analytics ou o Microsoft Fabric.

Criar uma TVF

No script U-SQL anterior, repetiu a utilização de EXTRACT para ler a partir do mesmo ficheiro de origem. Com a função de valor de tabela U-SQL (TVF), pode encapsular os dados para reutilização futura.

O script seguinte cria uma TVF chamada Searchlog() na base de dados e no esquema predefinidos:

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;

O script seguinte mostra-lhe como utilizar a TVF que foi definida no script anterior:

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

Criar vistas

Se tiver uma única expressão de consulta, em vez de uma TVF, pode utilizar uma VISTA U-SQL para encapsular essa expressão.

O script seguinte cria uma vista denominada SearchlogView na base de dados e no esquema predefinidos:

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

O script seguinte demonstra a utilização da vista definida:

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

Criar tabelas

Tal como acontece com as tabelas de bases de dados relacionais, com o U-SQL, pode criar uma tabela com um esquema predefinido ou criar uma tabela que infera o esquema da consulta que preenche a tabela (também conhecida como CREATE TABLE AS SELECT ou CTAS).

Crie uma base de dados e duas tabelas com o seguinte 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

Consulta tabelas

Pode consultar tabelas, como as criadas no script anterior, da mesma forma que consulta os ficheiros de dados. Em vez de criar um conjunto de linhas com EXTRACT, pode agora referir-se ao nome da tabela.

Para ler a partir das tabelas, modifique o script de transformação que utilizou anteriormente:

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

Nota

Atualmente, não pode executar um SELECT numa tabela no mesmo script que aquele em que criou a tabela.

Passos Seguintes