Introducción a U-SQL en Azure Data Lake AnalyticsGet started with U-SQL in Azure Data Lake Analytics

U-SQL es un lenguaje que combina SQL declarativo con C# imperativo para permitirle procesar sus datos a cualquier escala.U-SQL is a language that combines declarative SQL with imperative C# to let you process data at any scale. Mediante la funcionalidad de consulta distribuida escalable de U-SQL, puede analizar los datos de manera eficaz entre almacenes relacionales, como Azure SQL Database.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, puede procesar los datos no estructurados mediante la aplicación de esquemas en la lectura y la inserción de lógica personalizada y UDF.With U-SQL, you can process unstructured data by applying schema on read and inserting custom logic and UDFs. Además, U-SQL incluye extensibilidad que proporciona un control más preciso sobre cómo ejecutarlo a escala.Additionally, U-SQL includes extensibility that gives you fine-grained control over how to execute at scale.

Recursos de aprendizajeLearning resources

PrerequisitesPrerequisites

Antes de examinar los ejemplos de U-SQL de este documento, lea y realice el Tutorial: Desarrollo de scripts U-SQL mediante Data Lake Tools for 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. En este tutorial se explican los mecanismos de uso de U-SQL con Herramientas de Azure Data Lake para Visual Studio.That tutorial explains the mechanics of using U-SQL with Azure Data Lake Tools for Visual Studio.

El primer script U-SQLYour first U-SQL script

El siguiente script U-SQL es sencillo y nos permite explorar muchos aspectos del lenguaje 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();

Este script no contiene ningún paso de transformación.This script doesn't have any transformation steps. Lee el archivo de origen llamado SearchLog.tsv, lo esquematiza y vuelve a escribir el conjunto de filas en un archivo llamado 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.

Observe el signo de interrogación junto al tipo de datos en el campo Duration.Notice the question mark next to the data type in the Duration field. Esto significa que el campo Duration podría ser nulo.It means that the Duration field could be null.

Conceptos claveKey concepts

  • Variables de conjunto de filas: cada expresión de consulta que produce un conjunto de filas se puede asignar a una variable.Rowset variables: Each query expression that produces a rowset can be assigned to a variable. U-SQL sigue el patrón de nomenclatura de variables de T-SQL (@searchlog, por ejemplo) en el script.U-SQL follows the T-SQL variable naming pattern (@searchlog, for example) in the script.
  • La palabra clave EXTRACT lee los datos de un archivo y define el esquema en la lectura.The EXTRACT keyword reads data from a file and defines the schema on read. Extractors.Tsv es un extractor de U-SQL integrado para archivos de valores separados por tabulación.Extractors.Tsv is a built-in U-SQL extractor for tab-separated-value files. Puede desarrollar extractores personalizados.You can develop custom extractors.
  • OUTPUT escribe datos de un conjunto de filas en un archivo.The OUTPUT writes data from a rowset to a file. Outputters.Csv() es un outputter U-SQL integrado para crear un archivo de valores separados por coma.Outputters.Csv() is a built-in U-SQL outputter to create a comma-separated-value file. También puede desarrollar outputters personalizados.You can develop custom outputters.

Rutas de acceso de archivoFile paths

Las instrucciones EXTRACT y OUTPUT usan rutas de acceso de archivo.The EXTRACT and OUTPUT statements use file paths. Las rutas de acceso de archivo puede ser absolutas o relativas:File paths can be absolute or relative:

La siguiente ruta de acceso absoluta de archivo hace referencia a un archivo de Data Lake Store denominado 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

La siguiente ruta de acceso relativa de archivo comienza con "/".This following file path starts with "/". Hace referencia a un archivo en la cuenta de Data Lake Store predeterminada:It refers to a file in the default Data Lake Store account:

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

Uso de variables escalaresUse scalar variables

Puede usar variables escalares para facilitar el mantenimiento del script.You can use scalar variables as well to make your script maintenance easier. El script de U-SQL anterior también se puede escribir como: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();

Transformación de conjuntos de filasTransform rowsets

Use SELECT para transformar conjuntos de filas: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 cláusula WHERE usa una expresión booleana de C#.The WHERE clause uses a C# Boolean expression. Puede usar el lenguaje de expresiones de C# para crear sus propias expresiones y funciones.You can use the C# expression language to do your own expressions and functions. Incluso puede realizar un filtrado más complejo si las combina con conjunciones (AND) y disyunciones (OR) lógicas.You can even perform more complex filtering by combining them with logical conjunctions (ANDs) and disjunctions (ORs).

El siguiente script usa el método DateTime.Parse() y una conjunción.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 segunda consulta opera con el resultado del primer conjunto de filas, que crea una composición de ambos filtros.The second query is operating on the result of the first rowset, which creates a composite of the two filters. También puede volver a usar un nombre de variable y los nombres tienen un ámbito léxico.You can also reuse a variable name, and the names are scoped lexically.

Conjuntos de filas agregadosAggregate rowsets

U-SQL proporciona las conocidas cláusulas ORDER BY, GROUP BY y agregaciones.U-SQL gives you the familiar ORDER BY, GROUP BY, and aggregations.

La siguiente consulta busca la duración total por región y después muestra las cinco duraciones principales de forma ordenada.The following query finds the total duration per region, and then displays the top five durations in order.

Los conjuntos de filas de U-SQL no conservan el orden en la siguiente consulta.U-SQL rowsets do not preserve their order for the next query. Por lo tanto, para ordenar los resultados, necesita agregar ORDER BY a la instrucción 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 cláusula ORDER BY de The U-SQL requiere el uso de la cláusula FETCH en una expresión SELECT.The U-SQL ORDER BY clause requires using the FETCH clause in a SELECT expression.

La cláusula HAVING de U-SQL puede usarse para restringir los resultados a los grupos que cumplan la condición 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();

Para escenarios avanzados de agregación, consulte la documentación de referencia de U-SQL para agregar, analizar y hacer referencia a funcionesFor advanced aggregation scenarios, see the U-SQL reference documentation for aggregate, analytic, and reference functions

Pasos siguientesNext steps