Azure Data Lake Analytics 中的 U-SQL 目录入门

重要

Azure Data Lake Analytics 于 2024 年 2 月 29 日停用。 了解更多信息,请查看此公告

对于数据分析,你的组织可以使用 Azure Synapse AnalyticsMicrosoft Fabric

创建 TVF

在前面的 U-SQL 脚本中,重复使用 EXTRACT 从同一源文件读取。 使用 U-SQL 表值函数 (TVF),可以封装数据以供将来重复使用。

以下脚本将在默认数据库和架构中创建一个名为Searchlog()的 TVF:

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

创建视图

如果有单个查询表达式,可以使用 U-SQL VIEW 来封装该表达式,而不是 TVF。

以下脚本在默认数据库和架构中创建一个名称为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。

后续步骤