Sitemap
Hugo Habbema

Hugo Habbema

Engenheiro de Dados | Linkedin: https://www.linkedin.com/in/hugo-habbema/

Press enter or click to view image in full size

Microsoft PolyBase

A ponte que conecta o SQL Server ao Data Lake e à virtualização de dados

5 min readNov 17, 2025

--

Introdução

No cenário moderno de análise de dados, trabalhamos com uma enorme variedade de fontes, formatos e tecnologias. É comum que informações relevantes estejam distribuídas entre bancos relacionais, sistemas legados, APIs externas e arquivos armazenados em Data Lakes. Embora isso ofereça flexibilidade e poder, também adiciona uma camada significativa de complexidade ao trabalho de engenheiros, analistas e cientistas de dados.

Imagine um time que precisa consolidar informações de vendas que estão em um SQL Server on-premises, clientes em uma API externa e detalhes de produtos armazenados como arquivos CSV em um Azure Data Lake. Como fazer essa união de forma eficiente sem criar pipelines demorados, duplicar dados, aumentar custos ou desenvolver uma camada de transformação que só adiciona complexidade?

É aqui que entra o conceito de virtualização de dados — uma abordagem que permite acessar dados distribuídos como se estivessem em um único lugar, sem movê-los fisicamente. Soluções de virtualização oferecem uma interface comum para leitura, permitindo acesso federado, consulta em tempo real (Query in Place) e eliminação de muitos ETLs desnecessários.

Entre tecnologias como BigQuery, Athena, Trino, Denodo e Redshift Spectrum, a Microsoft oferece uma solução poderosa e muitas vezes subaproveitada: o PolyBase.

Com o PolyBase, o SQL Server consegue consultar diretamente arquivos CSV ou Parquet armazenados no Azure Data Lake Storage, ler dados de Hadoop, consumir tabelas externas e acessar fontes remotas. Tudo isso usando apenas T-SQL, sem mover dados.

Neste artigo você aprenderá:

✔ O que é o PolyBase
✔ Como ele se encaixa no conceito de virtualização de dados
✔ Como provisionar toda a infraestrutura via Azure CLI
✔ Como criar External Tables usando T-SQL
✔ Como consultar dados externos como se fossem tabelas internas

Vamos direto ao ponto.

O que é o Microsoft PolyBase?

O PolyBase é um mecanismo de virtualização de dados que permite ao SQL Server consultar fontes externas como se fossem tabelas nativas, usando apenas T-SQL.

Com ele, você pode acessar:

  • Azure Blob Storage
  • Azure Data Lake Storage Gen2
  • Arquivos CSV e Parquet
  • Hadoop (HDFS)
  • SQL Server remoto
  • Oracle
  • MongoDB (via ODBC)
  • Teradata
  • DB2

Sem ETL.
Sem cópia de dados.
Sem complicações.

O PolyBase atua como uma ponte entre o SQL Server e o restante do ecossistema de dados — essencial para arquiteturas híbridas, Lakehouses e ambientes distribuídos.

Por que usar PolyBase?

PolyBase é útil quando você precisa:

  • Unificar análise sem criar pipelines complexos
  • Consultar dados do Data Lake direto do SQL
  • Ler arquivos CSV/Parquet sem carregá-los para o banco
  • Implementar ELT moderno
  • Reduzir a movimentação de dados
  • Integrar SQL Server + Azure de forma nativa
  • Criar uma arquitetura Lakehouse + DW

Ele resolve um problema clássico: os dados não precisam vir até o SQL; o SQL vai até os dados.

Como o PolyBase funciona?

Três componentes principais compõem a base do PolyBase:

External Data Source

Define onde os dados estão.
Ex.: Azure Data Lake, Blob, Hadoop, SQL externo.

External File Format

Define como os arquivos estão armazenados.
Ex.: CSV, Parquet, texto delimitado.

External Table

Define a estrutura tabular que você quer consultar.

A partir disso, você pode executar:

SELECT * FROM MinhaTabelaExterna;

E o SQL resolve tudo por trás dos panos.

Provisionando tudo via Azure CLI (Infra como Código)

Agora vamos montar tudo via CLI, seguindo boas práticas de Infra as Code.
Criaremos

Get Hugo Habbema’s stories in your inbox

Join Medium for free to get updates from this writer.

✔ Resource Group
✔ Storage Account (com ADLS Gen2)
✔ Container e upload de CSV
✔ SAS Token
✔ VNet e Subnet
✔ Azure SQL Managed Instance
✔ T-SQL com External Tables

Criar Resource Group

az group create \
--name rg-polybase-demo \
--location brazilsouth

Criar Storage Account com ADLS Gen2

az storage account create \
--name polybasestoragehugo \
--resource-group rg-polybase-demo \
--location brazilsouth \
--sku Standard_LRS \
--kind StorageV2 \
--https-only true \
--hierarchical-namespace true

Criar container

az storage container create \
--name datalake \
--account-name polybasestoragehugo

Criar o arquivo CSV local e enviar para a Azure

Criar arquivo:

cat << 'EOF' > vendas.csv
id,produto,quantidade,valor
1,Notebook,3,4500
2,Cadeira Gamer,1,1200
3,Monitor,2,1800
EOF

Capturar a chave do storage:

ACCOUNT_KEY=$(az storage account keys list \
--resource-group rg-polybase-demo \
--account-name polybasestoragehugo \
--query "[0].value" -o tsv)

Fazer upload:

az storage blob upload \
--container-name datalake \
--account-name polybasestoragehugo \
--account-key $ACCOUNT_KEY \
--name vendas/vendas.csv \
--file vendas.csv

Gerar SAS Token via CLI

SAS_TOKEN=$(az storage container generate-sas \
--account-name polybasestoragehugo \
--account-key $ACCOUNT_KEY \
--name datalake \
--permissions rl \
--expiry 2030-12-31T23:59Z \
-o tsv)

Criar VNet e Subnet para o SQL Managed Instance

az network vnet create \
--name vnet-polybase \
--resource-group rg-polybase-demo \
--location brazilsouth \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-mi \
--subnet-prefix 10.0.0.0/24

Criar o Azure SQL Managed Instance

az sql mi create \
--name sqlmi-polybase-demo \
--resource-group rg-polybase-demo \
--location brazilsouth \
--admin-user sqladminhugo \
--admin-password 'SenhaForte123!#' \
--license-type BasePrice \
--vcores 4 \
--storage 32 \
--edition GeneralPurpose \
--family Gen5 \
--subnet subnet-mi \
--vnet-name vnet-polybase

Após provisionar (leva bastante tempo), capture o endpoint:

az sql mi show \
--name sqlmi-polybase-demo \
--resource-group rg-polybase-demo \
--query "fullyQualifiedDomainName" \
-o tsv

Configurando PolyBase no SQL Server (T-SQL)

Conecte-se via SSMS ou Azure Data Studio!

Criar Master Key

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'OutraSenhaForte123!';

Criar credencial com SAS (sem o “?”)

CREATE DATABASE SCOPED CREDENTIAL BlobCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=xxxx&ss=b&srt=sco&sp=rl&se=2030-12-31T23:59Z&...';

Criar Data Source

CREATE EXTERNAL DATA SOURCE BlobStorageData
WITH (
TYPE = HADOOP,
LOCATION = 'abfs://datalake@polybasestoragehugo.dfs.core.windows.net',
CREDENTIAL = BlobCredential
);

Criar File Format

CREATE EXTERNAL FILE FORMAT CsvFormat
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (
FIELD_TERMINATOR = ',',
STRING_DELIMITER = '"',
FIRST_ROW = 2
)
);

Criar External Table

CREATE EXTERNAL TABLE dbo.VendasExternas
(
id INT,
produto VARCHAR(100),
quantidade INT,
valor DECIMAL(10,2)
)
WITH (
LOCATION = '/vendas/vendas.csv',
DATA_SOURCE = BlobStorageData,
FILE_FORMAT = CsvFormat
);

Consultando a tabela externa

SELECT * FROM dbo.VendasExternas;

Simples assim: SQL Server lendo diretamente do Azure Data Lake Storage.

Carregando o dado em uma tabela interna (ELT)

SELECT *
INTO dbo.VendasInternas
FROM dbo.VendasExternas;

Atualização incremental:

MERGE dbo.VendasInternas AS alvo
USING dbo.VendasExternas AS origem
ON alvo.id = origem.id
WHEN MATCHED THEN UPDATE SET
quantidade = origem.quantidade,
valor = origem.valor
WHEN NOT MATCHED THEN INSERT (id, produto, quantidade, valor)
VALUES (origem.id, origem.produto, origem.quantidade, origem.valor);

Conclusão

Conforme os ambientes de dados se tornam mais distribuídos, a capacidade de integrar fontes sem mover dados se torna essencial. O PolyBase oferece exatamente isso: uma forma poderosa e simplificada de consultar dados externos usando apenas SQL.

Ele:

✔ Abstrai complexidade
✔ Reduz ETL
✔ Habilita Query in Place
✔ Conecta SQL ↔ Data Lake
✔ Integra múltiplos formatos
✔ É nativo no ecossistema Microsoft

Se você trabalha com SQL Server e Azure, dominar PolyBase não é mais um diferencial — é parte fundamental de uma arquitetura moderna de dados.

Até a próxima!

--

--