다음을 통해 공유


Azure Data Lake Analytics에서 U-SQL 시작

중요합니다

Azure Data Lake Analytics는 2024년 2월 29일에 사용 중지되었습니다. 에 대해 더 알고 싶다면 이 공지을 확인하세요.

데이터 분석을 위해 조직은 Azure Synapse Analytics 또는 Microsoft Fabric 사용할 수 있습니다.

U-SQL은 선언적 SQL과 명령적 C#을 결합하여 모든 규모의 데이터를 처리할 수 있도록 하는 언어입니다. U-SQL의 확장 가능한 분산 쿼리 기능을 통해 Azure SQL Database와 같은 관계형 저장소에서 데이터를 효율적으로 분석할 수 있습니다. U-SQL을 사용하면 읽기에 스키마를 적용하고 사용자 지정 논리 및 UDF를 삽입하여 구조화되지 않은 데이터를 처리할 수 있습니다. 또한 U-SQL에는 대규모로 실행하는 방법을 세밀하게 제어할 수 있는 확장성이 포함되어 있습니다.

학습 리소스

  • U-SQL 자습서은 U-SQL 언어의 대부분을 안내하는 체계적인 연습 과정을 제공합니다. 이 문서는 U-SQL을 학습하려는 모든 개발자를 위해 읽는 것이 좋습니다.
  • U-SQL 언어 구문대한 자세한 내용은 U-SQL 언어 참조참조하세요.
  • U-SQL 디자인 철학이해하려면 Visual Studio 블로그 게시물 U-SQL 소개 - 빅 데이터 처리를 쉽게언어를 참조하세요.

일부 데이터를 만들어 보겠습니다.

다음 U-SQL 스크립트는 간단하며 다른 U-SQL 스크립트에서 참조할 수 있는 샘플 데이터 파일을 만들 수 있습니다. 이 스크립트가 다음 섹션에서 진행되도록 하는 주요 개념에 대해 설명합니다.

USE DATABASE master;
USE SCHEMA dbo;
@a  = 
    SELECT * FROM 
        (VALUES
            (399266, "2/15/2012 11:53:16 AM", "en-us", "microsoft", 73, "microsoft.com;xbox.com", "NULL"),
			(382045, "2/15/2012 11:53:18 AM", "en-gb", "azure data lake analytics", 614, "microsoft.com;portal.azure.com", "portal.azure.com"),
			(382045, "2/16/2012 11:53:20 AM", "en-gb", "usql", 74, "microsoft.com;github.com", "NULL"),
			(106479, "2/16/2012 11:53:50 AM", "en-ca", "xbox", 24, "xbox.com;xbox.com/xbox360", "xbox.com/xbox360"),
			(906441, "2/16/2012 11:54:01 AM", "en-us", "machine learning", 1213, "microsoft.com;github.com", "NULL"),
			(304305, "2/16/2012 11:54:03 AM", "en-us", "outlook", 60, "microsoft.com;office.com;live.com","microsoft.com"),
			(460748, "2/16/2012 11:54:04 AM", "en-us", "azure storage", 1270, "microsoft.com;portal.azure.com", "portal.azure.com"),
			(354841, "2/16/2012 11:59:01 AM", "en-us", "azure", 610, "microsoft.com;portal.azure.com", "portal.azure.com"),
			(354068, "2/16/2012 12:00:33 PM", "en-mx", "key vault", 422, "microsoft.com;portal.azure.com", "portal.azure.com"),
			(347413, "2/16/2012 12:11:55 PM", "en-gr", "github", 305, "github.com", "NULL"),
			(840614, "2/16/2012 12:13:56 PM", "en-us", "surface", 1220, "microsoft.com", "NULL"),
			(656666, "2/16/2012 12:15:55 PM", "en-us", "visual studio", 691, "microsoft.com;code.visualstudio.com", "NULL"),
			(951513, "2/16/2012 12:17:00 PM", "en-us", "power bi", 63, "microsoft.com;app.powerbi.com", "powerbi.com"),
			(350350, "2/16/2012 12:18:17 PM", "en-us", "data factory", 30, "microsoft.com;portal.azure.com", "NULL"),
			(641615, "2/16/2012 12:19:55 PM", "en-us", "event hubs", 119, "microsoft.com;portal.azure.com", "NULL")
        ) AS 
              D( UserId, Start, Region, Query, Duration, Urls, ClickedUrls );
OUTPUT @a
    TO "Samples/Data/SearchLog.tsv"
    USING Outputters.Tsv();

파일에서 데이터 읽기

이제 일부 데이터가 있으므로 만든 파일에서 읽어 보겠습니다.

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

OUTPUT @searchlog
    TO "/output/SearchLog-first-u-sql.csv"
    USING Outputters.Csv();

이 스크립트에는 변환 단계가 없습니다. SearchLog.tsv라는 소스 파일에서 읽고, 스키마를 만들고, 행 집합을 SearchLog-first-u-sql.csv파일에 다시 씁니다.

Duration 필드의 데이터 형식 옆에 물음표가 표시됩니다. 즉, Duration 필드는 null일 수 있습니다.

주요 개념

  • 행 집합 변수: 행 집합을 생성하는 각 쿼리 식을 변수에 할당할 수 있습니다. U-SQL은 스크립트의 T-SQL 변수 명명 패턴(예:@searchlog)을 따릅니다.
  • EXTRACT 키워드는 파일에서 데이터를 읽고 읽기 시 스키마를 정의합니다. Extractors.Tsv 탭으로 구분된 값 파일에 대한 기본 제공 U-SQL 추출기입니다. 사용자 지정 추출기를 개발할 수 있습니다.
  • OUTPUT 행 집합에서 파일에 데이터를 씁니다. Outputters.Csv() 쉼표로 구분된 값 파일을 만드는 기본 제공 U-SQL 출력자입니다. 사용자 지정 출력자를 개발할 수 있습니다.

파일 경로

EXTRACT 및 OUTPUT 문은 파일 경로를 사용합니다. 파일 경로는 절대 경로 또는 상대 경로일 수 있습니다.

다음 절대 파일 경로는 mystoreData Lake Store의 파일을 참조합니다.

adl://mystore.azuredatalakestore.net/Samples/Data/SearchLog.tsv

다음 파일 경로는 "/"시작합니다. 기본 Data Lake Store 계정의 파일을 참조합니다.

/output/SearchLog-first-u-sql.csv

스칼라 변수 사용

스칼라 변수를 사용하여 스크립트 유지 관리를 더 쉽게 수행할 수 있습니다. 이전 U-SQL 스크립트는 다음과 같이 작성할 수도 있습니다.

DECLARE @in  string = "/Samples/Data/SearchLog.tsv";
DECLARE @out string = "/output/SearchLog-scalar-variables.csv";
@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM @in
    USING Extractors.Tsv();
OUTPUT @searchlog
    TO @out
    USING Outputters.Csv();

행 집합 변환

SELECT 사용하여 행 집합을 변환합니다. 이 스크립트는 시작, 지역 및 기간 열을 선택하고 지역 값이 "en-gb"인 경우 해당 행을 파일에 씁니다.

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();
@rs1 =
    SELECT Start, Region, Duration
    FROM @searchlog
WHERE Region == "en-gb";
OUTPUT @rs1
    TO "/output/SearchLog-transform-rowsets.csv"
    USING Outputters.Csv();

WHERE 절은 C#의 부울 식을 사용합니다. C# 식 언어를 사용하여 고유한 식 및 함수를 수행할 수 있습니다. AND(논리 결합) 및 OU(분리)와 결합하여 더 복잡한 필터링을 수행할 수도 있습니다.

다음 스크립트는 DateTime.Parse() 메서드와 결합을 사용합니다. columns Start, "Region", Duration에서 "Region"의 값은 "en-gb"입니다. 그런 다음 특정 날짜 사이의 Duration 열 값을 확인하고 해당 값을 파일에 씁니다.

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();
@rs1 =
    SELECT Start, Region, Duration
    FROM @searchlog
WHERE Region == "en-gb";
@rs1 =
    SELECT Start, Region, Duration
    FROM @rs1
    WHERE Start >= DateTime.Parse("2012/02/16") AND Start <= DateTime.Parse("2012/02/17");
OUTPUT @rs1
    TO "/output/SearchLog-transform-datetime.csv"
    USING Outputters.Csv();

비고

두 번째 쿼리는 두 필터의 복합을 만드는 첫 번째 행 집합의 결과에서 작동합니다. 변수 이름을 다시 사용할 수도 있으며 이름은 어휘적으로 범위가 지정됩니다.

집계된 행 집합

U-SQL은 친숙한 ORDER BY, GROUP BY 및 집계를 제공합니다.

다음 쿼리는 지역당 총 기간을 찾은 다음 상위 5개 기간을 순서대로 표시합니다.

U-SQL 행 집합은 다음 쿼리에 대한 순서를 유지하지 않습니다. 따라서 출력을 주문하려면 OUTPUT 문에 ORDER BY를 추가해야 합니다.

DECLARE @outpref string = "/output/Searchlog-aggregation";
DECLARE @out1    string = @outpref+"_agg.csv";
DECLARE @out2    string = @outpref+"_top5agg.csv";
@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();
@rs1 =
    SELECT
        Region,
        SUM(Duration) AS TotalDuration
    FROM @searchlog
GROUP BY Region;
@res =
    SELECT *
    FROM @rs1
    ORDER BY TotalDuration DESC
    FETCH 5 ROWS;
OUTPUT @rs1
    TO @out1
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();
OUTPUT @res
    TO @out2
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

U-SQL ORDER BY 절에는 SELECT 식에서 FETCH 절을 사용해야 합니다.

U-SQL HAVING 절을 사용하여 출력을 HAVING 조건을 충족하는 그룹으로 제한할 수 있습니다.

@searchlog =
    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 @searchlog
    GROUP BY Region
    HAVING SUM(Duration) > 200;
OUTPUT @res
    TO "/output/Searchlog-having.csv"
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

고급 집계 시나리오는 집계, 분석 및 참조 함수에 대한 U-SQL 참조 설명서를 참조하세요.

다음 단계