Introduzione a U-SQLGet started with U-SQL

U-SQL è un linguaggio che combina SQL dichiarativo con C# imperativo per consentire di elaborare da su qualsiasi scala.U-SQL is a language that combines declarative SQL with imperative C# to let you process data at any scale. Le funzionalità di query scalabili e distribuite offerte da U-SQL consentono di analizzare con efficienza i dati presenti in archivi relazionali, ad esempio il database SQL di Azure.Through the scalable, distributed-query capability of U-SQL, you can efficiently analyze data across relational stores such as Azure SQL Database. Con U-SQL è possibile elaborare i dati non strutturati applicando schemi in lettura e inserendo logiche personalizzate e funzioni definite dall'utente.With U-SQL, you can process unstructured data by applying schema on read and inserting custom logic and UDFs. Inoltre, U-SQL include estendibilità che consente un controllo specifico delle modalità di esecuzione su vasta scala.Additionally, U-SQL includes extensibility that gives you fine-grained control over how to execute at scale.

Risorse di formazioneLearning resources

PrerequisitiPrerequisites

Prima di analizzare gli esempi in U-SQL di questo documento, leggere e completare l'Esercitazione: Sviluppare script U-SQL tramite Strumenti di Data Lake per Visual Studio.Before you go through the U-SQL samples in this document, read and complete Tutorial: Develop U-SQL scripts using Data Lake Tools for Visual Studio. Questa esercitazione illustra la meccanica dell'uso di U-SQL con Strumenti Azure Data Lake per Visual Studio.That tutorial explains the mechanics of using U-SQL with Azure Data Lake Tools for Visual Studio.

Il primo script U-SQLYour first U-SQL script

Lo script U-SQL seguente è semplice e ci consente di esplorare molti aspetti del linguaggio U-SQL.The following U-SQL script is simple and lets us explore many aspects the U-SQL language.

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

Lo script non è stato sottoposto a molte procedure di trasformazione.This script doesn't have any transformation steps. Legge i dati dal file di origine denominato SearchLog.tsv, li schematizza e scrive il set di righe in un file denominato SearchLog-first-u-sql.csv.It reads from the source file called SearchLog.tsv, schematizes it, and writes the rowset back into a file called SearchLog-first-u-sql.csv.

Osservare il punto interrogativo accanto al tipo di dati del campo Duration.Notice the question mark next to the data type in the Duration field. Significa che il campo Duration può avere anche un valore null.It means that the Duration field could be null.

Concetti chiaveKey concepts

  • Variabili del set di righe: ad ogni espressione di query che produce un set di righe può essere assegnata una variabile.Rowset variables: Each query expression that produces a rowset can be assigned to a variable. U-SQL segue il modello di denominazione delle variabili T-SQ, ad esempio @searchlog, nello script.U-SQL follows the T-SQL variable naming pattern (@searchlog, for example) in the script.
  • La parola chiave EXTRACT legge i dati di un file e definisce lo schema sulla lettura.The EXTRACT keyword reads data from a file and defines the schema on read. Extractors.Tsv è un estrattore di U-SQL integrato per i valori separati da tabulazioni.Extractors.Tsv is a built-in U-SQL extractor for tab-separated-value files. È possibile sviluppare estrattori personalizzati.You can develop custom extractors.
  • OUTPUT scrive i dati da un set di righe a un file.The OUTPUT writes data from a rowset to a file. Outputters.Csv() è un outputter di U-SQL integrato per creare un file con valori separati da virgole.Outputters.Csv() is a built-in U-SQL outputter to create a comma-separated-value file. È possibile sviluppare anche outputter personalizzati.You can develop custom outputters.

Percorsi di fileFile paths

Le istruzioni EXTRACT e OUTPUT usano percorsi di file.The EXTRACT and OUTPUT statements use file paths. I percorsi di file possono essere assoluti o relativi:File paths can be absolute or relative:

Il seguente percorso di file assoluto fa riferimento a un file in un Data Lake Store denominato mystore:This following absolute file path refers to a file in a Data Lake Store named mystore:

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

Il seguente percorso di file inizia con "/".This following file path starts with "/". Fa riferimento a un file nell'account di Data Lake Store predefinito:It refers to a file in the default Data Lake Store account:

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

Usare variabili scalariUse scalar variables

Per gestire più facilmente lo script, è possibile usare anche variabili scalari.You can use scalar variables as well to make your script maintenance easier. Lo script U-SQL precedente può essere anche scritto come indicato di seguito:The previous U-SQL script can also be written as:

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

Trasformare set di righeTransform rowsets

Usare l'istruzione SELECT per trasformare set di righe:Use SELECT to transform rowsets:

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

La clausola WHERE usa un'espressione booleana C#.The WHERE clause uses a C# Boolean expression. È possibile usare il linguaggio di espressione C# per creare espressioni e funzioni personali.You can use the C# expression language to do your own expressions and functions. È anche possibile combinarle con congiunzioni (AND) e disgiunzioni (OR) logiche per eseguire operazioni di filtro più complesse.You can even perform more complex filtering by combining them with logical conjunctions (ANDs) and disjunctions (ORs).

Lo script seguente usa il metodo DateTime.Parse() e una congiunzione.The following script uses the DateTime.Parse() method and a conjunction.

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

Nota

La seconda query fa riferimento al risultato del primo set di righe e il risultato è pertanto una composizione dei due filtri.The second query is operating on the result of the first rowset, which creates a composite of the two filters. È anche possibile riusare un nome di variabile poiché i nomi vengono definiti nell'ambito lessicale.You can also reuse a variable name, and the names are scoped lexically.

Aggregare set di righeAggregate rowsets

U-SQL consente di usare le istruzioni familiari ORDER BY e GROUP BY, nonché le aggregazioni.U-SQL gives you the familiar ORDER BY, GROUP BY, and aggregations.

La query seguente trova la durata totale per area e mostra quindi le prime cinque durate, elencate in ordine.The following query finds the total duration per region, and then displays the top five durations in order.

I set di righe U-SQL non mantengono l'ordine per la query successiva.U-SQL rowsets do not preserve their order for the next query. Per ordinare un output, pertanto, è necessario aggiungere ORDER BY all'istruzione OUTPUT:Thus, to order an output, you need to add ORDER BY to the OUTPUT statement:

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

La clausola U-SQL ORDER BY richiede l'uso della clausola FETCH in un'espressione SELECT.The U-SQL ORDER BY clause requires using the FETCH clause in a SELECT expression.

È possibile usare la clausola U-SQL HAVING per limitare l'output ai gruppi che soddisfano la condizione HAVING:The U-SQL HAVING clause can be used to restrict the output to groups that satisfy the HAVING condition:

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

Per gli scenari avanzati di aggregazione, vedere la documentazione di riferimento U-SQL per le funzioni di aggregazione, analisi e riferimentoFor advanced aggregation scenarios, see the The U-SQL reference documentation for aggregate, analytic, and reference functions

Passaggi successiviNext steps