(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como consultar ficheiros Parquet no Synapse com OPENROWSET

João Barros 16 de July de 2026 4 min de leitura

O serverless SQL pool do Azure Synapse Analytics permite consultar ficheiros Parquet guardados no Data Lake diretamente com T-SQL, sem copiar os dados nem provisionar servidores. A função OPENROWSET abre esses ficheiros como se fossem uma tabela, e paga apenas os dados que a consulta processa.

Pré-requisitos

  • Um workspace do Azure Synapse Analytics (o serverless SQL pool Built-in já vem incluído).
  • Ficheiros Parquet numa conta de armazenamento ADLS Gen2 ou Blob Storage.
  • Permissão de leitura no armazenamento (identidade Microsoft Entra, SAS ou Managed Identity).
  • Um cliente SQL: o Synapse Studio, o Azure Data Studio ou o SSMS ligado ao endpoint serverless.

Passo 1: Consultar um ficheiro Parquet

Comece por ler um único ficheiro. No BULK indica-se o caminho completo e em FORMAT o tipo Parquet. O alias a seguir aos parênteses é obrigatório.

SELECT TOP 100 *
FROM OPENROWSET(
    BULK 'https://minhastorage.dfs.core.windows.net/datalake/vendas/vendas.parquet',
    FORMAT = 'PARQUET'
) AS dados;

Não é preciso declarar colunas: o serverless SQL pool lê os nomes e os tipos de dados a partir dos metadados do próprio ficheiro Parquet.

Passo 2: Ler uma pasta inteira com wildcards

Para tratar muitos ficheiros como uma só tabela, aponte para a pasta e use o wildcard *. Coloque ** no fim do caminho para percorrer também as subpastas.

SELECT TOP 100 *
FROM OPENROWSET(
    BULK 'https://minhastorage.dfs.core.windows.net/datalake/vendas/*.parquet',
    FORMAT = 'PARQUET'
) AS dados;

Ao ler vários ficheiros, o schema é inferido a partir do primeiro ficheiro que o serviço encontra. Ficheiros cujo nome começa por _ ou . são ignorados.

Dica: comece sempre com SELECT TOP 100 para inspecionar os dados antes de correr consultas sobre pastas grandes — assim controla o volume processado e o custo.

Passo 3: Definir o schema com a cláusula WITH

Para escolher só algumas colunas e garantir os tipos certos, acrescente a cláusula WITH. Em Parquet, as colunas são associadas pelo nome (sensível a maiúsculas), por isso os nomes têm de coincidir com os do ficheiro.

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;

A collation Latin1_General_100_BIN2_UTF8 nas colunas de texto dá um ganho de desempenho ao filtrar dados em Parquet.

Passo 4: Filtrar partições com filepath()

Se os dados estiverem organizados em pastas por ano e mês (por exemplo ano=2025/mes=07), a função filepath(n) devolve a parte do caminho que corresponde ao enésimo wildcard. Usá-la no WHERE faz com que só os ficheiros necessários sejam lidos — menos dados processados, menos custo.

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

A função filename() complementa esta abordagem, devolvendo o nome do ficheiro de origem de cada linha.

Passo 5: Simplificar o caminho com uma EXTERNAL DATA SOURCE

Repetir o URL completo em cada consulta é aborrecido. Pode criar uma fonte de dados externa que aponta para a raiz do container e depois usar caminhos relativos.

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;

Agora o BULK contém apenas o caminho relativo e o DATA_SOURCE trata do resto.

Verificar o resultado

Execute a consulta do Passo 1: deve ver as primeiras 100 linhas com os nomes de coluna corretos. Para confirmar que a filtragem por partição funcionou, acrescente dados.filename() ao SELECT e verifique que só aparecem ficheiros das pastas esperadas. No separador de monitorização do Synapse, um valor baixo de data processed confirma que o pruning reduziu a leitura.

Conclusão

Com o OPENROWSET passou a consultar Parquet no Data Lake sem mover um único byte para uma base de dados. O próximo passo natural é encapsular a consulta numa VIEW ou criar uma EXTERNAL DATA SOURCE para não repetir o URL completo em cada query. Uma dica final: mantenha a collation Latin1_General_100_BIN2_UTF8 nas colunas de texto. Que pasta do seu Data Lake vai explorar primeiro?