Cómo consultar archivos Parquet en Synapse con OPENROWSET
El serverless SQL pool de Azure Synapse Analytics permite consultar archivos Parquet almacenados en el Data Lake directamente con T-SQL, sin copiar los datos ni aprovisionar servidores. La función OPENROWSET abre esos archivos como si fueran una tabla, y solo paga por los datos que procesa cada consulta.
Requisitos previos
- Un área de trabajo de Azure Synapse Analytics (el serverless SQL pool Built-in ya viene incluido).
- Archivos Parquet en una cuenta de almacenamiento ADLS Gen2 o Blob Storage.
- Permiso de lectura en el almacenamiento (identidad de Microsoft Entra, SAS o Managed Identity).
- Un cliente SQL: Synapse Studio, Azure Data Studio o SSMS conectado al endpoint serverless.
Paso 1: Consultar un archivo Parquet
Empiece leyendo un único archivo. En BULK se indica la ruta completa y en FORMAT el tipo Parquet. El alias tras los paréntesis es obligatorio.
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://minhastorage.dfs.core.windows.net/datalake/vendas/vendas.parquet',
FORMAT = 'PARQUET'
) AS dados;
No hace falta declarar columnas: el serverless SQL pool lee los nombres y los tipos de datos a partir de los metadatos del propio archivo Parquet.
Paso 2: Leer una carpeta entera con wildcards
Para tratar muchos archivos como una sola tabla, apunte a la carpeta y use el wildcard *. Coloque ** al final de la ruta para recorrer también las subcarpetas.
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://minhastorage.dfs.core.windows.net/datalake/vendas/*.parquet',
FORMAT = 'PARQUET'
) AS dados;
Al leer varios archivos, el esquema se infiere a partir del primer archivo que el servicio encuentra. Los archivos cuyo nombre empieza por _ o . se ignoran.
Consejo: empiece siempre con SELECT TOP 100 para inspeccionar los datos antes de ejecutar consultas sobre carpetas grandes — así controla el volumen procesado y el coste.
Paso 3: Definir el esquema con la cláusula WITH
Para elegir solo algunas columnas y asegurar los tipos correctos, añada la cláusula WITH. En Parquet, las columnas se asocian por nombre (distingue mayúsculas), por lo que los nombres deben coincidir con los del archivo.
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://minhastorage.dfs.core.windows.net/datalake/vendas/*.parquet',
FORMAT = 'PARQUET'
)
WITH (
data_venda date,
produto varchar(100) COLLATE Latin1_General_100_BIN2_UTF8,
quantidade int,
total decimal(10,2)
) AS dados;
La collation Latin1_General_100_BIN2_UTF8 en las columnas de texto ofrece una mejora de rendimiento al filtrar datos en Parquet.
Paso 4: Filtrar particiones con filepath()
Si los datos están organizados en carpetas por año y mes (por ejemplo ano=2025/mes=07), la función filepath(n) devuelve la parte de la ruta que corresponde al enésimo wildcard. Usarla en el WHERE hace que solo se lean los archivos necesarios — menos datos procesados, menos coste.
SELECT
dados.filepath(1) AS ano,
dados.filepath(2) AS mes,
COUNT_BIG(*) AS linhas
FROM OPENROWSET(
BULK 'https://minhastorage.dfs.core.windows.net/datalake/vendas/ano=*/mes=*/*.parquet',
FORMAT = 'PARQUET'
) AS dados
WHERE dados.filepath(1) = '2025' AND dados.filepath(2) = '07'
GROUP BY dados.filepath(1), dados.filepath(2);
La función filename() complementa este enfoque devolviendo el nombre del archivo de origen de cada fila.
Paso 5: Simplificar la ruta con una EXTERNAL DATA SOURCE
Repetir la URL completa en cada consulta es tedioso. Puede crear un origen de datos externo que apunte a la raíz del contenedor y luego usar rutas relativas.
CREATE EXTERNAL DATA SOURCE datalake
WITH ( LOCATION = 'https://minhastorage.dfs.core.windows.net/datalake' );
GO
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'vendas/*.parquet',
DATA_SOURCE = 'datalake',
FORMAT = 'PARQUET'
) AS dados;
Ahora BULK solo contiene la ruta relativa y DATA_SOURCE se encarga del resto.
Verificar el resultado
Ejecute la consulta del Paso 1: debería ver las primeras 100 filas con los nombres de columna correctos. Para confirmar que el filtrado por partición funcionó, añada dados.filename() al SELECT y compruebe que solo aparecen archivos de las carpetas esperadas. En la pestaña de monitorización de Synapse, un valor bajo de data processed confirma que el pruning redujo la lectura.
Conclusión
Con OPENROWSET ya puede consultar Parquet en el Data Lake sin mover un solo byte a una base de datos. El siguiente paso natural es encapsular la consulta en una VIEW o crear una EXTERNAL DATA SOURCE para no repetir la URL completa en cada consulta. Un consejo final: mantenga la collation Latin1_General_100_BIN2_UTF8 en las columnas de texto. ¿Qué carpeta de su Data Lake explorará primero?