Compartir vía


Referencia de Transact-SQL de PolyBase

Se aplica a: SQL Server

En este artículo, se revisan las opciones de uso de PolyBase para consultar datos externos en contexto, conocidos como virtualización de datos, para una variedad de orígenes de datos externos.

Sintaxis de T-SQL usada en PolyBase

Para usar PolyBase, debe crear tablas externas para hacer referencia a los datos externos. Consulte

Nota:

Para poder usar PolyBase debe tener permisos a nivel de CONTROL SERVER o sysadmin en la base de datos.

Tutoriales

Para obtener ejemplos de consultas, vea Consultas de PolyBase.

Para obtener más tutoriales sobre varios orígenes de datos externos, consulte:

Funciones de metadatos del archivo

A veces, puede que necesite saber qué origen de archivo o carpeta se correlaciona con una fila específica en el conjunto de resultados.

Puede usar las funciones filepath y filename para devolver nombres de archivo o la ruta de acceso en el conjunto de resultados. O bien puede usarlas para filtrar los datos según el nombre de archivo o la ruta de acceso de la carpeta. En las siguientes secciones, encontrará descripciones cortas, junto con ejemplos.

Función Filename

Esta función devuelve el nombre de archivo del que se origina la fila.

El tipo de datos devuelto es nvarchar (1024). Para obtener un rendimiento óptimo, convierta siempre el resultado de la función filename al tipo de datos adecuado. Si usa un tipo de datos de caracteres, asegúrese de que se usa la longitud apropiada.

En el ejemplo siguiente se leen los archivos de datos de NYC Yellow Taxi de los últimos tres meses de 2017 y se devuelve el número de carreras por archivo. La parte OPENROWSET de la consulta especifica qué archivos se leerán.

SELECT
    nyc.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM  
    OPENROWSET(
        BULK 'parquet/taxi/year=2017/month=9/*.parquet',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT='PARQUET'
    ) nyc
GROUP BY nyc.filename();

En el ejemplo siguiente se muestra cómo se puede usar filename() en la cláusula WHERE para filtrar los archivos que se van a leer. Accede a toda la carpeta en la parte de OPENROWSET de la consulta y filtra los archivos en la cláusula WHERE.

Los resultados serán los mismos que en el ejemplo anterior.

SELECT
    r.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
    BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        FIRSTROW = 2) 
        WITH (C1 varchar(200) ) AS [r]
WHERE
    r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
    r.filename()
ORDER BY
    [filename];

Función Filepath

Esta función devuelve una ruta de acceso completa o una parte de una ruta de acceso:

  • Cuando se llama sin parámetro, devuelve la ruta de acceso completa al archivo del que se origina una fila.
  • Cuando se llama sin parámetro, devuelve la parte de la ruta de acceso que coincide con el carácter comodín en la posición especificada del parámetro. Por ejemplo, el valor 1 del parámetro devolverá la parte de la ruta de acceso que coincide con el primer carácter comodín.

El tipo de datos devuelto es nvarchar (1024). Para obtener un rendimiento óptimo, convierta siempre el resultado de la función filepath al tipo de datos adecuado. Si usa un tipo de datos de caracteres, asegúrese de que se usa la longitud apropiada.

En el ejemplo siguiente se leen archivos de datos de NYC Yellow Taxi para los últimos tres meses de 2017. Devuelve el número de carreras por ruta de acceso de archivo. La parte OPENROWSET de la consulta especifica qué archivos se leerán.

SELECT
    r.filepath() AS filepath
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        vendor_id INT
    ) AS [r]
GROUP BY
    r.filepath()
ORDER BY
    filepath;

En el ejemplo siguiente se muestra cómo se puede usar filepath() en la cláusula WHERE para filtrar los archivos que se van a leer.

Puede usar los caracteres comodín en la parte de OPENROWSET de la consulta y filtrar los archivos en la cláusula WHERE. Los resultados serán los mismos que en el ejemplo anterior.

SELECT
    r.filepath() AS filepath
    ,r.filepath(1) AS [year]
    ,r.filepath(2) AS [month]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_*-*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',        
        FIRSTROW = 2
    )
WITH (
    vendor_id INT
) AS [r]
WHERE
    r.filepath(1) IN ('2017')
    AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
    r.filepath()
    ,r.filepath(1)
    ,r.filepath(2)
ORDER BY
    filepath;