Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
A virtualização de dados permite que você execute consultas Transact-SQL (T-SQL) em dados externos sem carregá-los em seu banco de dados. O PolyBase é o recurso do mecanismo de banco de dados que implementa a virtualização de dados no SQL Server e no SQL do Azure. Você define uma fonte de dados externa, um formato de arquivo opcional e uma tabela externa e, em seguida, consulta a tabela externa como SELECT qualquer outra tabela.
Este guia ajuda você a:
- Entenda quais recursos do PolyBase são suportados pela sua plataforma e versão do SQL.
- Escolha entre
OPENROWSET, tabelas externas eBULK INSERTpara consultar ou ingerir dados. - Siga os links passo a passo para cenários comuns.
- Examine o desempenho, a solução de problemas e as práticas recomendadas para cargas de trabalho de produção.
Casos de uso comuns
A tabela a seguir descreve possíveis cenários de uso.
| Scenario | Utilização |
|---|---|
| Exploração de arquivo ad hoc | OPENROWSET(BULK ...) |
| Consulta reutilizável de arquivos para Business Intelligence/relatórios | Tabelas externas sobre arquivos |
| Consulta entre bancos de dados (SQL Server, Oracle, Teradata, MongoDB, ODBC) | Conectores PolyBase com tabelas externas |
| Exportando resultados da consulta para arquivos |
CREATE EXTERNAL TABLE AS SELECT (CETAS) |
| Ingestão em massa em tabelas |
BULK INSERT ou OPENROWSET(BULK ...) com INSERT ... SELECT |
Quais recursos estão disponíveis onde?
A tabela a seguir mostra quais recursos principais do PolyBase e da virtualização de dados estão disponíveis em cada plataforma SQL. Use esta tabela para determinar o que você pode fazer em sua plataforma antes de usar os guias detalhados.
| Característica | SQL Server 2019 | SQL Server 2022 | SQL Server 2025 | Banco de Dados SQL do Azure | Instância Gerenciada de SQL do Azure | Banco de dados SQL no Microsoft Fabric |
|---|---|---|---|---|---|---|
| tabelas externas | Sim | Sim | Sim | Sim | Sim | Sim |
| OPENROWSET (BULK) | Sim 1 | Sim | Sim | Sim | Sim | Sim |
| CETAS (exportação) | No | Sim | Sim | No | Sim | No |
| Arquivos CSV/delimitados | Sim 2 | Sim | Sim | Sim | Sim | Sim |
| Arquivos Parquet | No | Sim | Sim | Sim | Sim | Sim |
| Tabelas Delta Lake | No | Sim | Sim | No | No | No |
| Conectar-se a outro SQL Server | Sim | Sim | Sim | No | No | No |
| Conectar-se ao Banco de Dados SQL do Azure ou à Instância Gerenciada de SQL do Azure | Sim 3 | Sim 3 | Sim 3 | No | No | No |
| Conectar-se ao Oracle/Teradata/MongoDB | Sim | Sim | Sim | No | No | No |
| Conectar-se ao Armazenamento de Blobs do Azure | Sim | Sim | Sim | Sim | Sim | No |
| Conectar-se ao ADLS Gen2 | No | Sim | Sim | Sim | Sim | No |
| Conectar-se ao armazenamento compatível com S3 | No | Sim | Sim | No | No | No |
| Conectar-se ao OneLake (Fabric) | No | No | No | No | No | Sim |
| Computação por pushdown | Sim | Sim | Sim | No | No | No |
| Autenticação de Identidade Gerenciada | No | No | Sim 4 | Sim | Sim | No |
1 O SQL Server 2019 (15.x) dá suporte a caminhos OPENROWSET(BULK...) de arquivos locais e de rede. No SQL Server 2022 (16.x) e versões posteriores, OPENROWSET(BULK...) também dá suporte à leitura do armazenamento em nuvem com FORMAT = 'PARQUET', FORMAT = DELTAe FORMAT = 'CSV'.
2 Suporte de CSV no SQL Server 2019 (15.x) necessário para Hadoop. No SQL Server 2022 (16.x) e versões posteriores, o CSV tem suporte nativo sem Hadoop.
3 Usa o conector do SQL Server (sqlserver://). A credencial no escopo do banco de dados tem como destino o ponto de extremidade do SQL do Azure, as mesmas etapas que a conexão com outro SQL Server.
Suporte para autenticação de Identidade Gerenciada 4 está disponível para conectar-se ao Armazenamento de Blobs do Azure (ABS) e ao ADLS Gen2. Ele requer o SQL Server com suporte para Azure Arc ou o SQL Server em uma VM do Azure para uso em SQL Server no local. Ele está disponível nativamente no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure.
Observação
A partir do SQL Server 2025 (17.x), a consulta de arquivos de dados (CSV, Parquet e Delta) no Armazenamento de Blobs do Azure, no ADLS Gen2 ou no armazenamento compatível com S3 é uma funcionalidade do mecanismo nativo e não requer mais a instalação ou a execução de serviços do PolyBase. Os conectores RDBMS (SQL Server, Oracle, Teradata, MongoDB, ODBC) ainda exigem que os serviços do PolyBase sejam instalados e em execução. O SQL Server 2025 (17.x) também adiciona suporte ao Linux para esses conectores, que estavam disponíveis anteriormente apenas no Windows.
Consultar dados externos
Antes de escolher um cenário específico, entenda as três maneiras de consultar dados externos:
| Abordagem | Sintaxe | Usar quando | Autenticação | PolyBase necessário |
|---|---|---|---|---|
| Consultas ad hoc do OLE DB | OPENROWSET(provider, connection, query) |
Você deseja uma consulta única rápida sem objetos persistentes ou precisa da autenticação da ID do Microsoft Entra | Autenticação SQL, Autenticação do Windows, Microsoft Entra ID (MSOLEDBSQL) | No |
| Consultas ad hoc de arquivo | OPENROWSET(BULK ...) |
Você deseja explorar dados de arquivo rapidamente ou testar esquemas antes de criar uma tabela | Token SAS, chave de acesso, Identidade Gerenciada, ID do Microsoft Entra | Sim para o Banco de Dados SQL do Azure e a Instância Gerenciada de SQL do Azure Não se aplica a instâncias do SQL Server |
| Conectores de dados persistentes |
CREATE EXTERNAL TABLE com sqlserver://, oracle://, teradata:// etc. |
Você precisa de acesso recorrente, governança, estatísticas e computação otimizada para produção | Somente autenticação SQL | Sim |
Os serviços do PolyBase são necessários para acesso a arquivos de nuvem no SQL Server 2019 (15.x) e no SQL Server 2022 (16.x). O SQL Server 2025 (17.x) e versões posteriores têm suporte nativo para CSV, Parquet e Delta sem PolyBase.
Guia de decisão
| Scenario | Recomendação |
|---|---|
| Preciso da autenticação da ID do Microsoft Entra para SQL remoto ou quero evitar serviços do PolyBase | Usar OPENROWSET(MSOLEDBSQL, ...) (ad hoc, sem objetos persistentes) |
| Preciso de tabelas persistentes, estatísticas, ou de computação delegada para bancos de dados remotos | Use CREATE EXTERNAL TABLE com conectores do PolyBase (sqlserver://, oracle://, teradata://, mongodb://, odbc://).
OPENROWSET
não dá suporte a conectores |
| Estou explorando um novo arquivo ou testando um esquema | Uso OPENROWSET(BULK ...) (iteração rápida, sem objetos persistentes) |
| Estou importando dados de arquivo para tabela com transformações | Utilizar INSERT ... SELECT a partir de OPENROWSET(BULK ...) |
| Preciso de governança ou acesso compartilhado para muitos usuários ou aplicativos | Use CREATE EXTERNAL TABLE para que as permissões e os metadados sejam centralizados |
| Estou trabalhando no banco de dados SQL no Fabric | Use OPENROWSET(BULK ...) para consultas ad hoc do OneLake ou tabelas externas para acesso reutilizável; para armazenamento externo, use atalhos do OneLake |
Escolha seu cenário
Agora que você entende as três abordagens, use um dos guias a seguir para implementar seu caso de uso específico.
Arquivos de consulta (Parquet, CSV ou Delta)
Se os dados estiverem em arquivos Parquet, CSV ou Delta no Armazenamento de Blobs do Azure, no ADLS Gen2, no armazenamento compatível com S3 ou no OneLake, siga um destes guias:
| Scenario | Guia recomendado | Plataformas |
|---|---|---|
| Consulta ad hoc rápida em um arquivo Parquet ou CSV | Use OPENROWSET. Nenhuma tabela externa é necessária |
SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no Fabric |
| Consultas repetidas em arquivos Parquet com um esquema persistente | Criar uma tabela externa sobre Parquet | SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no Fabric |
| Consultar arquivos CSV com uma tabela externa | Criar uma tabela externa com um formato de arquivo para texto delimitado | SQL Server 2019 (15.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no Fabric |
| Consultar tabelas do Delta Lake | Criar uma tabela externa com FILE_FORMAT = DeltaLakeFileFormat |
SQL Server 2022 (16.x) e versões posteriores |
| Exportar resultados da consulta para arquivos Parquet ou CSV (CETAS) | Utilize CREATE EXTERNAL TABLE AS SELECT |
SQL Server 2022 (16.x) e versões posteriores, Instância Gerenciada de SQL do Azure |
Você também pode seguir um destes tutoriais passo a passo:
| Tutorial | Descrição |
|---|---|
| Introdução ao PolyBase no SQL Server 2022 | Cobre OPENROWSET utilizando Parquet e CSV, tabelas externas e navegação entre pastas. |
| Virtualizar o arquivo Parquet em um armazenamento de objetos compatível com o S3 usando o PolyBase | Tutorial para o SQL Server 2022 (16.x) e versões posteriores. |
| Virtualizar o arquivo CSV com o PolyBase | Tutorial para o SQL Server 2022 (16.x) e versões posteriores. |
| Virtualizar tabela delta com o PolyBase | Tutorial para o SQL Server 2022 (16.x) e versões posteriores. |
| Virtualização de dados com o Banco de Dados SQL do Azure (versão prévia) | Guia do Banco de Dados SQL do Azure para Parquet e CSV. |
| Virtualização de dados com a Instância Gerenciada de SQL do Azure | Guia da Instância Gerenciada de SQL do Azure para Parquet, CSV e CETAS. |
| Virtualização de dados em banco de dados SQL no Fabric | Guia do banco de dados SQL no Fabric para arquivos OneLake. |
Conectar-se a outra instância do SQL Server, o Banco de Dados SQL do Azure ou a Instância Gerenciada de SQL
No SQL Server 2019 (15.x) e versões posteriores, o PolyBase pode consultar tabelas em outra instância do SQL Server, banco de dados SQL do Azure ou Instância Gerenciada de SQL do Azure, sem usar servidores vinculados.
Importante
No banco de dados SQL no Fabric, não há suporte para o conector sqlserver://. Os conectores RDBMS do PolyBase utilizam autenticação SQL através de CREATE DATABASE SCOPED CREDENTIAL e não oferecem suporte à ID do Microsoft Entra, Identidade Gerenciada ou autenticação de entidade de serviço. Como o banco de dados SQL no Fabric requer autenticação do Microsoft Entra, você não pode se conectar a ele usando o PolyBase.
| Etapa | O que fazer |
|---|---|
| 1. Instalar o PolyBase | Instalar o PolyBase no Windows ou instalar o PolyBase no Linux |
| 2. Criar uma credencial |
CREATE DATABASE SCOPED CREDENTIAL com o login de destino |
| 3. Criar uma fonte de dados externa | CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>') |
| 4. Criar uma tabela externa | CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') |
| 5. Consulta | SELECT * FROM <external_table> |
Dica
O conector do SQL Server (sqlserver://) também funciona para o Banco de Dados SQL do Azure e a Instância Gerenciada de SQL do Azure. Use as mesmas etapas e defina LOCATION para o ponto de extremidade do SQL do Azure (por exemplo, sqlserver://myserver.database.windows.net).
Para obter um guia detalhado, consulte Configurar o PolyBase para acessar dados externos no SQL Server.
Conectar-se ao Oracle, Teradata ou MongoDB
O SQL Server 2019 (15.x) e versões posteriores podem consultar bancos de dados Oracle, Teradata, MongoDB e Cosmos DB por meio de conectores ODBC do PolyBase.
| Fonte de dados | Guide | Requisitos |
|---|---|---|
| Oracle | Configurar o PolyBase para acessar dados externos no Oracle | SQL Server 2019 (15.x) e versões posteriores, drivers de cliente Oracle |
| Teradata | Configurar o PolyBase para acessar dados externos no Teradata | SQL Server 2019 (15.x) e versões posteriores, driver ODBC do Teradata |
| MongoDB /Cosmos DB | Configurar o PolyBase para acessar dados externos no MongoDB | SQL Server 2019 (15.x) e versões posteriores, driver ODBC do MongoDB |
| Qualquer fonte ODBC | Configurar o PolyBase para acessar dados externos com tipos genéricos ODBC | SQL Server 2019 (15.x) e versões posteriores (Windows) (Linux começando com o SQL Server 2025 (17.x)) |
Conectar-se ao Armazenamento de Blobs do Azure ou ao ADLS Gen2
| Plataforma SQL | Opções de autenticação | Guide |
|---|---|---|
| SQL Server 2022 (16.x) e versões posteriores | Token SAS, chave de acesso, Identidade Gerenciada (a partir do SQL Server 2025 (17.x)) | Configurar o PolyBase para acessar dados externos no Armazenamento de Blobs do Azure |
| SQL Server 2019 (15.x) | Chave de acesso (por meio do conector do Hadoop) | Configurar o PolyBase para acessar dados externos no Armazenamento de Blobs do Azure |
| Banco de Dados SQL do Azure | Token SAS, Identidade Gerenciada, passagem Microsoft Entra | Virtualização de dados com o Banco de Dados SQL do Azure (versão prévia) |
| Instância Gerenciada de SQL do Azure | Token SAS, Identidade Gerenciada | Virtualização de dados com a Instância Gerenciada de SQL do Azure |
No SQL Server 2022 (16.x), os prefixos de URI foram alterados. Ao migrar do SQL Server 2019 (15.x) ou versões anteriores:
-
Armazenamento de Blobs do Azure: alterar
wasb[s]://paraabs:// -
ADLS Gen2: Alterar
abfs[s]://paraadls://
Para obter mais informações, consulte Configurar o PolyBase para acessar dados externos no Armazenamento de Blobs do Azure.
Conectar-se ao armazenamento de objetos compatível com S3
O SQL Server 2022 (16.x) e versões posteriores dão suporte ao armazenamento compatível com S3, como Amazon S3, MinIO e Ceph.
Para obter mais informações, confira Configurar o PolyBase para acessar dados externos no armazenamento de objetos compatível com o S3.
Exportar dados com CREATE EXTERNAL TABLE AS SELECT (CETAS)
O CETAS exporta os resultados da consulta para arquivos externos (Parquet ou CSV) no Armazenamento de Blobs do Azure, no ADLS Gen2 ou no armazenamento compatível com S3.
| Plataforma SQL | Supported | Formatos de exportação | Observações |
|---|---|---|---|
| SQL Server 2022 (16.x) e versões posteriores | Sim | Parquet, CSV | Requer a configuração do servidor: permitir a exportação de polybase |
| Instância Gerenciada de SQL do Azure | Sim | Parquet, CSV | Desabilitado por padrão |
| Banco de Dados SQL do Azure | No | Nenhum | Não disponível |
| Banco de dados SQL no Fabric | No | Nenhum | Não disponível |
Para obter a referência Transact-SQL, consulte CREATE EXTERNAL TABLE AS SELECT (CETAS).
Exemplos de início rápido
Exemplo 1: consulta ad hoc em um arquivo Parquet (OPENROWSET)
Nenhuma tabela externa é necessária. Funciona no SQL Server 2022 (16.x) e versões posteriores, no Banco de Dados SQL do Azure, na Instância Gerenciada de SQL do Azure e no Banco de Dados SQL no Fabric.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
FORMAT = 'PARQUET'
) AS [result];
Exemplo 2: tabela externa em CSV no Azure Blob Storage
Este exemplo funciona em todas as plataformas SQL que dão suporte ao PolyBase.
Etapa 1: criar uma DMK (chave mestra de banco de dados). Essa etapa é necessária porque a credencial armazena um segredo de token SAS. No entanto, você poderá usar essa etapa se usar a Identidade Gerenciada ou a autenticação do Microsoft Entra.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';Etapa 2: criar uma credencial com um token SAS. Omita o inicial
?.CREATE DATABASE SCOPED CREDENTIAL MyStorageCred WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<your_SAS_token>'; -- omit the leading '?'Etapa 3: criar uma fonte de dados externa.
CREATE EXTERNAL DATA SOURCE MyAzureStorage WITH ( LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net', CREDENTIAL = MyStorageCred );Etapa 4: criar um formato de arquivo para o CSV.
CREATE EXTERNAL FILE FORMAT CsvFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', STRING_DELIMITER = '"', FIRST_ROW = 2 ) );Etapa 5: Criar a tabela externa.
CREATE EXTERNAL TABLE dbo.SalesExternal ( OrderId INT, OrderDate DATE, Amount DECIMAL (18, 2), Customer NVARCHAR (100) ) WITH ( DATA_SOURCE = MyAzureStorage, LOCATION = '/data/sales/', FILE_FORMAT = CsvFormat );Etapa 6: Consultar a tabela externa.
SELECT * FROM dbo.SalesExternal WHERE OrderDate >= '2025-01-01';
Exemplo 3: consultar uma tabela em outro SQL Server
Este exemplo funciona no SQL Server 2019 (15.x) e versões posteriores.
Etapa 1: criar uma chave mestra de banco de dados (necessária porque a credencial armazena uma senha).
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';Etapa 2: criar uma credencial para a instância remota do SQL Server.
CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred WITH IDENTITY = 'remote_user', SECRET = '<password>';Etapa 3: criar a fonte de dados externa.
CREATE EXTERNAL DATA SOURCE RemoteSqlServer WITH ( LOCATION = 'sqlserver://remote-server.contoso.com', PUSHDOWN = ON, CREDENTIAL = RemoteSqlCred );Etapa 4: Criar a tabela externa (nome em três partes no
LOCATION).CREATE EXTERNAL TABLE dbo.RemoteCustomers ( CustomerId INT, CustomerName NVARCHAR (200) COLLATE SQL_Latin1_General_CP1_CI_AS ) WITH ( DATA_SOURCE = RemoteSqlServer, LOCATION = 'SalesDB.dbo.Customers' );Etapa 5: Consultar entre servidores.
SELECT c.CustomerName, s.Amount FROM dbo.RemoteCustomers AS c INNER JOIN dbo.LocalSales AS s ON c.CustomerId = s.CustomerId;
Exemplo 4: Exportar resultados para Parquet com CETAS
Funciona no SQL Server 2022 (16.x) e em versões posteriores, Instância Gerenciada de SQL do Azure.
Etapa 1: Habilitar o CETAS (somente SQL Server).
EXECUTE sp_configure 'allow polybase export', 1; RECONFIGURE;Etapa 2: criar credencial e fonte de dados (reutilizar de exemplos anteriores).
Etapa 3: Criar um formato de arquivo para exportação Parquet.
CREATE EXTERNAL FILE FORMAT ParquetFormat WITH ( FORMAT_TYPE = PARQUET );Etapa 4: Exportar resultados da consulta.
CREATE EXTERNAL TABLE dbo.Sales2025Export WITH ( DATA_SOURCE = MyAzureStorage, LOCATION = '/exports/sales_2025.parquet', FILE_FORMAT = ParquetFormat ) AS SELECT * FROM Sales.Orders WHERE OrderDate >= '2025-01-01';
Blocos de construção T-SQL para PolyBase
Antes de implementar qualquer cenário, entenda os principais objetos T-SQL que o PolyBase usa e como eles se encaixam:
Diagrama mostrando objetos T-SQL do PolyBase e suas relações, desde autenticação (chave mestra de banco de dados, credenciais) até fontes de dados e formatos de arquivo até métodos de consulta (External Table, OPENROWSET, BULK INSERT, CETAS).
Para obter informações sobre essas instruções T-SQL, consulte:
- CRIAR FONTE DE DADOS EXTERNA
- CRIAR FORMATO DE ARQUIVO EXTERNO
- CRIAR TABELA EXTERNA
- OPENROWSET
- CRIAR UMA TABELA EXTERNA COMO SELEÇÃO (CETAS)
Para obter uma referência de Transact-SQL completa para todos os objetos, consulte a referência de Transact-SQL PolyBase.
Importante
Verifique o mapeamento de tipo de dados para o formato de arquivo externo. Quando você cria um formato de arquivo externo ou arquivos de consulta usando OPENROWSET, o PolyBase mapeia automaticamente os tipos de dados de origem (Parquet, CSV, Delta, Oracle, Teradata, MongoDB) para tipos de dados do SQL Server. Tipos incompatíveis podem causar truncamento silencioso, perda de precisão ou erros de consulta. Por exemplo, um Parquet DECIMAL(38,18) mapeia para DECIMAL(18,0). Examine as tabelas de mapeamento antes de definir colunas de tabela externas ou uma WITH cláusula. Para obter a referência completa, consulte Mapeamento de tipo com o PolyBase.
Quando CREATE MASTER KEY é necessário?
Uma chave mestra de banco de dados (DMK) é criada usando a sintaxe CREATE MASTER KEY. O DMK criptografa os segredos armazenados dentro das credenciais com escopo de banco de dados. Ela é necessária somente quando a credencial contém um valor secreto, ou seja, quando armazena uma senha, um token ou uma chave de acesso.
O DMK é necessário (a credencial armazena um segredo):
Tipo de autenticação Valor IDENTITYTem segredo DMK token SAS 'SHARED ACCESS SIGNATURE'Sim Obrigatório Chave de acesso S3 'S3 ACCESS KEY'Sim Obrigatório Logon do SQL/autenticação básica '<username>'Sim Obrigatório Chave de acesso da conta de armazenamento '<storage_account_name>'Sim Obrigatório O DMK não é necessário (nenhum segredo armazenado):
Tipo de autenticação Valor IDENTITYTem segredo DMK Identidade Gerenciada 'Managed Identity'No Não é necessário Microsoft Entra ID 'User Identity'ou'Managed Identity'No Não é necessário
Dica
Se não houver segredo em sua CREATE DATABASE SCOPED CREDENTIAL declaração, você não precisará de um DMK. A Identidade Gerenciada e a autenticação do Microsoft Entra ID delegam confiança à plataforma. O banco de dados não armazena senhas ou tokens.
Exemplos:
Nesta consulta de exemplo, o DMK é necessário (a Credencial armazena um token SAS).
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';
CREATE DATABASE SCOPED CREDENTIAL SasCred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<your_SAS_token>';
Nesta consulta de exemplo, o DMK não é necessário (Identidade Gerenciada, sem segredo).
CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';
Nesta consulta de exemplo, o DMK não é necessário (autenticação por passagem do Microsoft Entra, sem necessidade de chave secreta).
CREATE DATABASE SCOPED CREDENTIAL EntraIdCred
WITH IDENTITY = 'User Identity';
Acesso a dados remotos com OPENROWSET e tabelas externas
O SQL Server oferece três abordagens distintas para consultar dados remotos. Você pode escolher a abordagem certa ao entender as diferenças de sintaxe, autenticação e arquitetura.
| Abordagem | Sintaxe | Conecta-se a | Autenticação | Serviços do PolyBase | Plataformas |
|---|---|---|---|---|---|
| Consultas OLE DB | OPENROWSET(provider, connection, query) |
Qualquer fonte OLE DB por meio de MSOLEDBSQL, SQLOLEDB ou outros provedores | Autenticação SQL, Autenticação do Windows, Microsoft Entra ID (MSOLEDBSQL) | No | SQL Server (todas as versões com suporte) |
| Consultas de arquivo | OPENROWSET(BULK ...) |
Arquivos em disco local, rede ou nuvem (Blob do Azure, ADLS, S3, OneLake) | Token SAS, chave de acesso, Identidade Gerenciada, ID do Microsoft Entra | Sim para nuvem*; Não para local | SQL Server 2005; SQL Server 2022 (16.x) e versões posteriores (nuvem); Azure SQL |
| Conectores do PolyBase |
CREATE EXTERNAL TABLE com CREATE EXTERNAL DATA SOURCE usando sqlserver://, oracle://, teradata://, mongodb://, odbc:// |
Fontes remotas do SQL Server, Oracle, Teradata, MongoDB e ODBC | Somente autenticação SQL | Sim | SQL Server 2019 (15.x) e versões posteriores (Windows); SQL Server 2025 (17.x) e versões posteriores (Linux) |
Os serviços do PolyBase são necessários para acesso a arquivos de nuvem no SQL Server 2019 (15.x) e no SQL Server 2022 (16.x). O SQL Server 2025 (17.x) e versões posteriores têm suporte de arquivo de nuvem nativo e não exigem mais o PolyBase para CSV, Parquet ou Delta.
Quando usar cada abordagem
Use OLE DB OPENROWSET para:
- Consultas ad hoc rápidas sem criar objetos persistentes
- Microsoft Entra ID ou autenticação de Identidade Gerenciada (via MSOLEDBSQL)
- Evitando dependências de serviço do PolyBase
- Conectar a qualquer fonte de dados com um provedor OLE DB
Use o arquivo OPENROWSET(BULK) para:
- Exploração de arquivo ad hoc e descoberta de esquema
- Transformações e visualizações rápidas antes de se comprometer com uma definição de tabela
- Transformações de coluna flexíveis embutidas (conversão, filtragem, colunas computadas)
- Dados que não mudam com frequência e não precisam de metadados persistentes
Use conectores do PolyBase com CREATE EXTERNAL TABLE para:
- Definições de tabela persistentes e reutilizáveis acessadas por vários usuários ou aplicativos
- Cargas de trabalho de produção que exigem estatísticas e otimização de plano de consulta
- Cálculo por push para fontes remotas (filtros enviados por push para Oracle, SQL Server etc.)
- Governança e segurança compartilhadas (uma vez criadas, os usuários só precisam de
SELECTpermissão) - Quando você tem a autenticação SQL disponível para a origem remota
OPENROWSET (OLE DB) – consultas remotas ad hoc (não requer serviços do PolyBase)
A forma OLE DB conecta a uma fonte de dados remota OPENROWSET por meio de um provedor OLE DB, executa uma consulta pass-through e retorna os resultados como um conjunto de linhas. É uma alternativa ad hoc única para um servidor vinculado. Nenhum metadado persistente é criado. Essa sintaxe não requer serviços do PolyBase e não dá suporte a arquivos de nuvem ou fontes de dados externas.
Esta consulta de exemplo se conecta a um SQL Server remoto por meio do OLE DB (não do PolyBase).
SELECT *
FROM OPENROWSET (
'MSOLEDBSQL',
'Server=remote-server;Database=AdventureWorks;Trusted_Connection=yes;',
'SELECT TOP 10 * FROM AdventureWorks.Sales.SalesOrderHeader'
);
OPENROWSET(BULK) – consultas baseadas em arquivo (PolyBase)
A BULK forma de OPENROWSET lê dados diretamente dos arquivos. No SQL Server 2019 (15.x) e versões anteriores, ele lê de caminhos de arquivo local ou UNC e requer um arquivo de formato. No SQL Server 2022 (16.x) e versões posteriores, você pode ler do armazenamento em nuvem usando os parâmetros DATA_SOURCE e FORMAT. Essa abordagem é a versão integrada do PolyBase usada para virtualização de dados.
No contexto do PolyBase e da virtualização de dados, quando este guia se refere a OPENROWSET, isso significa a sintaxe OPENROWSET(BULK ...) com a cláusula FORMAT para consultar arquivos externos.
Exemplos:
Esta consulta de exemplo lê um arquivo Parquet do Armazenamento de Blobs do Azure (SQL Server 2022 e versões posteriores).
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'data/sales/*.parquet',
DATA_SOURCE = 'MyAzureStorage',
FORMAT = 'PARQUET'
) AS [result];
Esta consulta de exemplo lê um arquivo Parquet com um caminho embutido (Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure).
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
FORMAT = 'PARQUET'
) AS [result];
Quando usar OPENROWSET versus tabelas externas
Ambas as tabelas externas e OPENROWSET(BULK ...) permitem consultar dados externos com T-SQL, mas são projetadas para diferentes casos de uso. A tabela a seguir resume as principais diferenças para ajudá-lo a decidir qual abordagem se encaixa em seu cenário.
| Capacidade | OPENROWSET(BULK ...) |
Tabela externa |
|---|---|---|
| Purpose | Exploração ad hoc e consultas únicas | Definição de tabela persistente e reutilizável |
| Metadados armazenados no banco de dados | Não. Nada é salvo após a execução da consulta | Sim. A definição de tabela, a fonte de dados e o formato de arquivo são armazenados como objetos de banco de dados |
| Definição de esquema | Inferido automaticamente do arquivo (Parquet) ou especificado diretamente com uma cláusula WITH. |
Definido explicitamente na declaração CREATE EXTERNAL TABLE |
| Permissões |
ADMINISTER BULK OPERATIONS Requer ouADMINISTER DATABASE BULK OPERATIONS |
Depois de a tabela ser criada, a permissão padrão SELECT é suficiente. |
| Colunas computadas | Sim. Adicione expressões e colunas computadas na lista SELECT; as funções de metadados como filename() e filepath() só estão disponíveis aqui. |
Não. Lista de colunas fixa; executar transformações em uma exibição ou na consulta que lê a tabela externa |
| Estatísticas | SQL do Azure: estatísticas manuais de coluna única por meio de sys.sp_create_openrowset_statistics; SQL Server 2022 (16.x) e versões posteriores: criar estatísticas automaticamente em predicados (sem estatísticas manuais no SQL Server). Confira as estatísticas manuais do OPENROWSET. |
Suporte completo CREATE STATISTICS em todas as plataformas, além de criar automaticamente no SQL Server 2022 (16.x) e versões posteriores. Consulte Criar estatísticas manuais de tabela externa. |
| Pushdown | Suporte limitado. O mecanismo pode otimizar filtros para a varredura de arquivo, mas não há otimização de filtro para fontes remotas de SGBD. | Sim. Dá suporte à computação pushdown para conectores RDBMS (SQL Server, Oracle, Teradata, MongoDB) |
| Mais adequado para | Exploração de dados, descoberta de esquema, consultas de protótipo, cargas de dados únicos, transformações flexíveis | Cargas de trabalho de produção, consultas repetidas, acesso compartilhado entre usuários, dashboards e relatórios |
Usar OPENROWSET quando precisar de flexibilidade
Use OPENROWSET para explorar um arquivo, testar esquemas diferentes ou adicionar colunas e transformações computadas sem criar objetos persistentes. Por exemplo, você pode extrair o caminho do arquivo como uma coluna, converter tipos de dados diretamente ou filtrar com base em expressões computadas em uma única consulta.
Esta consulta de exemplo inclui colunas computadas e transformações:
SELECT result.filename() AS [FileName],
result.filepath(1) AS [Year],
result.filepath(2) AS [Month],
CAST (OrderDate AS DATE) AS OrderDate,
Amount,
OrderDate
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*/*.parquet',
FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025';
Dica
As funções filepath() e filename() estão disponíveis no Banco de Dados SQL do Azure, na Instância Gerenciada do Azure SQL e no SQL Server 2022 (16.x) e versões posteriores. Eles permitem filtrar partes do caminho do arquivo (eliminação de partição) e expor o nome do arquivo de origem como uma coluna, o que não é diretamente possível com tabelas externas.
Utilize tabelas externas quando precisar de persistência e governança
Use tabelas externas quando vários usuários ou aplicativos precisarem consultar os mesmos dados externos repetidamente. Você define o esquema, a fonte de dados e as credenciais uma vez e as armazena no banco de dados. Os consumidores apenas necessitam de SELECT permissão na tabela.
Tabelas externas também dão suporte a estatísticas, que o otimizador de consulta usa para criar planos de execução melhores. Você pode criar estatísticas manualmente ou permitir que o mecanismo as crie automaticamente (SQL Server 2022 (16.x) e versões posteriores).
Esta consulta de exemplo cria estatísticas em uma tabela externa para melhores planos de consulta.
CREATE STATISTICS Stats_OrderDate
ON dbo.SalesExternal(OrderDate)
WITH FULLSCAN;
Para obter mais informações sobre estatísticas para ambas as abordagens, consulte considerações de desempenho do PolyBase – Estatísticas.
BULK INSERT vs. OPENROWSET(BULK): Qual deve ser usado?
Ambos BULK INSERT e OPENROWSET(BULK ...) importam dados de arquivos para o SQL Server utilizando o mesmo mecanismo subjacente de carregamento em massa. No entanto, elas diferem em sintaxe, flexibilidade e o que você pode fazer com os resultados. A tabela a seguir resume as principais diferenças:
Observação
BULK INSERT não está disponível no banco de dados SQL no Fabric. Para o Fabric, use OPENROWSET(BULK ...) contra o OneLake.
| Capacidade | BULK INSERT |
OPENROWSET(BULK ...) |
|---|---|---|
| Finalidade básica | Carrega dados de um arquivo diretamente em uma tabela de destino | Retorna um conjunto de linhas que você usa em uma instrução SELECT ou INSERT ... SELECT |
| Padrão de uso | Instrução autônoma: BULK INSERT <table> FROM '<file>' |
Deve ser usado dentro de uma consulta: SELECT * FROM OPENROWSET(BULK ...) ou INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...) |
| Requer uma tabela de destino? | Sim. Sempre escreve diretamente em uma tabela | Não. Você pode SELECT a partir dele sem inserir em qualquer lugar ou inserir em qualquer tabela ou tabela temporária |
| Transformações de coluna durante a carga | Suporte limitado. Os dados fluem de arquivo para tabela 'as-is' (mapeamento controlado por arquivo de formato ou ordem de coluna) | Suporte completo. Você pode adicionar expressões, CASTWHERE filtros, JOIN outras tabelas e colunas computadas ao redorSELECT |
| Sugestões de tabela | A WITH cláusula inclui suporte para BATCHSIZE, , CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS, TABLOCKe muito mais |
Dá suporte a dicas de tabela por meio da INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...) sintaxe |
| Importação de valor único de objeto grande (LOB) | Sem suporte | Sim. Suporta SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB para importar um arquivo inteiro como um valor varbinary(max), varchar(max), ou nvarchar(max) |
| Formatar arquivos | Sim. Com suporte por meio de (XML e formatos não XML) | Sim. Com suporte (XML e não XML) |
| Acesso a arquivos na nuvem (Armazenamento de Blobs do Azure, ADLS Gen2, S3) | Sim. Suportado por meio do parâmetro DATA_SOURCE (SQL Server 2017 (14.x) e versões posteriores, do Azure SQL) |
Sim. Com suporte via parâmetro DATA_SOURCE ou URL in-line com cláusula FORMAT (SQL Server 2022 (16.x) e versões posteriores, Azure SQL) |
| Arquivos Parquet ou Delta | Sem suporte. Somente texto CSV/delimitado | Sim. Com suporte com FORMAT = 'PARQUET' ou FORMAT = 'DELTA' (SQL Server 2022 (16.x) e versões posteriores, SQL do Azure) |
| Permissão necessária |
ADMINISTER BULK OPERATIONS ou ADMINISTER DATABASE BULK OPERATIONS, mais INSERT na tabela de destino |
ADMINISTER BULK OPERATIONS ou ADMINISTER DATABASE BULK OPERATIONS |
| Registro em log mínimo | Sim. Modelos de recuperação simples ou registrados em massa com suporte em TABLOCK |
Sim. Com suporte quando usado com INSERT ... SELECT e TABLOCK |
Quando escolher BULK INSERT
Use BULK INSERT quando você tiver uma carga simples de arquivo para tabela e não precisar transformar, filtrar ou unir dados durante a importação. Ele usa uma sintaxe mais simples para CSV ou outros arquivos delimitados:
Esta consulta de exemplo carrega um arquivo CSV do Armazenamento de Blobs do Azure diretamente em uma tabela.
BULK INSERT Sales.Invoices
FROM 'invoices/inv-2025-01.csv'
WITH (
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
Esta consulta de exemplo carrega um arquivo local com um arquivo de formato para mapeamento de coluna.
BULK INSERT dbo.Products
FROM 'C:\Data\products.csv'
WITH (
FORMATFILE = 'C:\Data\products.fmt',
FIRSTROW = 2,
TABLOCK
);
Quando escolher OPENROWSET(BULK)
Use OPENROWSET(BULK ...) quando precisar de uma ou mais das seguintes condições:
- Consultar ou visualizar dados de arquivo sem criar uma tabela primeiro.
- Transformar, filtrar ou unir dados durante a importação.
-
Carregue arquivos Parquet ou Delta (só
OPENROWSETdá suporte a esses formatos). -
Importar um arquivo inteiro como um único valor LOB (
SINGLE_BLOB,SINGLE_CLOB, ).SINGLE_NCLOB
Esta consulta de exemplo visualiza um arquivo CSV do Armazenamento de Blobs do Azure sem inserir os dados em qualquer lugar.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'invoices/inv-2025-01.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ','
) AS src;
Esta consulta de exemplo insere dados com transformação e filtragem.
INSERT INTO Sales.Invoices (InvoiceDate, Amount, Customer)
SELECT CAST (InvoiceDate AS DATE),
Amount * 1.1, -- Apply a 10% markup
UPPER(Customer)
FROM OPENROWSET (
BULK 'invoices/inv-2025-01.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2
) WITH (
InvoiceDate VARCHAR (10),
Amount DECIMAL (18, 2),
Customer VARCHAR (100)
) AS src
WHERE Amount IS NOT NULL;
Esta consulta de exemplo carrega um arquivo Parquet (não é possível com BULK INSERT).
INSERT INTO Sales.Invoices
SELECT *
FROM OPENROWSET (
BULK 'data/invoices/*.parquet',
DATA_SOURCE = 'MyAzureStorage',
FORMAT = 'PARQUET') AS src;
Esta consulta de exemplo importa um arquivo XML inteiro como um único valor varbinary(max ).
INSERT INTO dbo.XmlDocuments (DocContent)
SELECT BulkColumn
FROM OPENROWSET (
BULK 'C:\Data\catalog.xml',
SINGLE_BLOB
) AS x;
Dica
Uma abordagem é começando com OPENROWSET(BULK ...) para SELECT explorar e validar dados de arquivo e alternando para BULK INSERT para a carga de produção final se você não precisar de transformações. Se você precisar de suporte Parquet ou Delta ou de filtragem embutida, fique com OPENROWSET.
Para obter mais informações, consulte os seguintes guias relacionados:
- Use BULK INSERT ou OPENROWSET(BULK...) para importar dados para o SQL Server: um guia detalhado lado a lado com considerações de segurança.
-
Importação e exportação em massa de dados (SQL Server): uma visão geral de todos os métodos de movimentação de dados em massa (bcp,
BULK INSERT, ).OPENROWSET - BULK INSERT (Transact-SQL): uma referência T-SQL completa.
- OPENROWSET BULK (Transact-SQL): uma referência T-SQL completa.
- Exemplos de acesso em massa aos dados no Armazenamento de Blobs do Azure: exemplos lado a lado usando ambos os métodos com o armazenamento do Azure.
-
Importar em massa dados de grandes objetos com o PROVEDOR BULK ROWSET OPENROWSET (SQL Server): exemplos de
SINGLE_BLOB,SINGLE_CLOBeSINGLE_NCLOB. - Usar um arquivo de formato para importar dados em massa (SQL Server): Uso do arquivo de formato com ambos os métodos.
Funções de metadados úteis
Ao consultar arquivos externos com ou tabelas OPENROWSET externas, você pode usar várias funções internas e procedimentos para inspecionar metadados de arquivo, descobrir esquemas e implementar consultas com reconhecimento de partição.
filepath() e filename()
As funções filepath() e filename() retornam partes do caminho ou do nome do arquivo para cada linha no conjunto de resultados. Eles são especialmente úteis para:
Eliminação de partição: filtre em segmentos de pasta (por exemplo, partições de ano/mês/dia) para que o mecanismo leia apenas os arquivos correspondentes em vez de verificar tudo.
Expondo metadados de origem: inclua o nome ou o caminho do arquivo de origem como uma coluna nos resultados da consulta, o que é útil para auditoria ou depuração.
| Função | Devoluções | Exemplo |
|---|---|---|
filename() |
O nome do arquivo (incluindo a extensão) do arquivo de origem para cada linha | sales_2025_01.parquet |
filepath(N) |
O Nº segmento de pasta a partir do curinga (*) no caminho BULK, no qual N começa em 1 |
Para caminho sales/2025/01/*.parquet, filepath(1) retorna 2025, filepath(2) retorna 01 |
Aplica-se a: Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, SQL Server 2022 (16.x) e versões posteriores, banco de dados SQL no Fabric.
Este exemplo de consulta usa filepath() para eliminação de partição e filename() para identificar arquivos de origem. Ele lê apenas arquivos na /2025/ pasta e lê apenas arquivos na /06/ subpasta.
SELECT result.filename() AS SourceFile,
result.filepath(1) AS [Year],
result.filepath(2) AS [Month],
*
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*.parquet',
FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025'
AND result.filepath(2) = '06';
Dica
Coloque filepath() filtros na WHERE cláusula ao invés de em uma subconsulta ou CTE. Quando o filtro está na WHERE cláusula, o mecanismo pode executar a eliminação de partição no nível de verificação de arquivo, o que reduz significativamente a E/S.
sp_describe_first_result_set – identificar tipos de coluna do OPENROWSET
Quando você usa OPENROWSET com arquivos Parquet, o mecanismo infere os tipos de dados de coluna automaticamente (inferência de esquema). Os tipos inferidos podem ser maiores do que o necessário. Por exemplo, as colunas de caractere geralmente são inferidas como varchar(8000) porque os metadados Parquet não incluem um comprimento máximo. Essa opção pode prejudicar o desempenho e consumir mais memória.
Use sp_describe_first_result_set para inspecionar o esquema inferido antes de finalizar sua consulta. Depois de ver os tipos inferidos, especifique tipos mais estreitos em uma WITH cláusula para melhorar o desempenho.
Etapa 1: inspecione o esquema inferido.
EXECUTE sp_describe_first_result_set N' SELECT * FROM OPENROWSET( BULK ''abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet'', FORMAT = ''PARQUET'' ) AS result';A saída mostra o nome de cada coluna, o tipo de dados inferido, o comprimento máximo, a precisão e a escala. Se você vir varchar(8000) em que um varchar(100) seria suficiente, substitua-o:
Etapa 2: use tipos explícitos para melhorar o desempenho.
SELECT TOP 100 * FROM OPENROWSET ( BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet', FORMAT = 'PARQUET' ) WITH ( OrderId INT, OrderDate DATE, Amount DECIMAL (18, 2), Customer VARCHAR (100) -- much narrower than the inferred varchar(8000) ) AS result;
A inferência de esquema só funciona com arquivos Parquet. Para arquivos CSV, sempre especifique definições de coluna, seja em uma cláusula WITH (para OPENROWSET), ou na declaração CREATE EXTERNAL TABLE.
sp_describe_first_result_set é um procedimento geral do SQL Server e do SQL do Azure, mas é especialmente útil para OPENROWSET consultas. Para mais informações, consulte sp_describe_first_result_set.
Desempenho, solução de problemas e práticas recomendadas
Depois de implementar a virtualização de dados, use estes guias para otimizar o desempenho, diagnosticar problemas e garantir a preparação para a produção:
| Area | Artigo | Detalhes |
|---|---|---|
| Desempenho do PolyBase | Considerações de desempenho no PolyBase para SQL Server | Estatísticas, pushdown, paralelismo e gerenciamento de memória |
| Computação por pushdown | Cálculos de empilhamento no PolyBase | Especifica quais operações de push são enviadas para a fonte remota |
| Como saber se houve pushdown | Como saber se ocorreu um rebaixamento externo | Planos de consulta e DMVs |
| Solução de problemas | Monitorar e solucionar problemas do PolyBase | Erros e resoluções comuns |
| Conectividade Kerberos | Solucionar problemas de conectividade do PolyBase Kerberos | |
| perguntas frequentes | Perguntas frequentes sobre o PolyBase | |
| Erros e soluções | Erros do PolyBase e possíveis soluções |
Conteúdo relacionado
- Virtualização de dados com o PolyBase no SQL Server
- Introdução ao PolyBase no SQL Server 2022
- Referência Transact-SQL do PolyBase
- Mapeamento de tipo com o PolyBase
- Instalar o PolyBase no Windows
- Instalar o PolyBase no Linux