次の方法で共有


Azure Data Lake Analytics の U-SQL カタログを始める

重要

Azure Data Lake Analytics は 2024 年 2 月 29 日に廃止されました。 このお知らせで詳細を学びましょう

データ分析の場合、組織は Azure Synapse Analytics または Microsoft 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();

ビューの作成

1 つのクエリ式がある場合は、TVF の代わりに U-SQL VIEW を使用してその式をカプセル化できます。

次のスクリプトでは、既定のデータベースとスキーマに 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 とも呼ばれます) からスキーマを推論するテーブルを作成することもできます。

次のスクリプトを使用して、データベースと 2 つのテーブルを作成します。

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 を実行することはできません。

次のステップ