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
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
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:
- Hadoop
- Azure Blob Storage
- SQL Server
- Oracle
- Teradata
- MongoDB
- Tipos genéricos de ODBC
- Almacenamiento de objetos compatible con S3
- CSV
- Tabla delta
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;