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 Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
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. 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.
Suporte da plataforma
- PolyBase é um recurso do Microsoft SQL Mecanismo de Banco de Dados que implementa virtualização de dados.
- O PolyBase é suportado no SQL Server 2016 e versões posteriores no Windows e no SQL Server 2019 e versões posteriores no Linux.
- PolyBase não é suportado no SQL Server 2017 no Linux.
- O PolyBase não é compatível com o Banco de Dados SQL do Azure, mas o Banco de Dados SQL do Azure oferece recursos relacionados à virtualização de dados por meio de
OPENROWSETe tabelas externas. Para obter mais informações, consulte Virtualização de dados com o Banco de Dados SQL do Azure (versão prévia). - PolyBase não é um recurso no Instância Gerenciada de SQL do Azure pelo nome, mas o Instância Gerenciada de SQL do Azure possui recursos de virtualização de dados que funcionam de forma semelhante. Para mais informações, consulte Virtualização de dados com a Instância Gerenciada de SQL do Azure.
- O PolyBase não é suportado em banco de dados SQL no Fabric, mas o banco de dados SQL no Fabric oferece suas próprias capacidades de virtualização de dados no OneLake. Para mais informações, veja Virtualização de Dados em banco de dados SQL no Fabric.
- PolyBase não é um recurso em Fabric Data Warehouse. Para virtualização de dados no Fabric Data Warehouse, considere Atalhos do OneLake no Fabric. Para artigos sobre carregamento de dados em Fabric Data Warehouse, veja Ingestão de dados com T-SQL e Modelagem Dimensional: Tabelas de carga.
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 de arquivos reutilizáveis para BI ou 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 |
- Para exploração de arquivos ad hoc, use
OPENROWSET(BULK ...)para inspecionar arquivos sem criar uma tabela reutilizável. - Para consultas de arquivos reutilizáveis em BI ou cenários de relatórios, use tabelas externas em vez de arquivos para persistir um esquema e compartilhar resultados entre consultas.
- Para consultas entre bancos de dados, use conectores PolyBase com tabelas externas para acessar fontes do SQL Server, Oracle, Teradata, MongoDB ou ODBC.
- Para exportar resultados de consulta para arquivos, use
CREATE EXTERNAL TABLE AS SELECT(CETAS) para escrever saídas em Parquet ou CSV fora do banco de dados. - Para ingestão em massa em tabelas, use
BULK INSERTouOPENROWSET(BULK ...)comINSERT ... SELECTpara carregar dados de arquivos em tabelas de banco de dados.
Quais recursos estão disponíveis onde?
A tabela a seguir mostra quais recursos centrais do PolyBase e virtualização de dados estão disponíveis em cada plataforma SQL a partir do SQL Server 2019. Para disponibilidade de recursos no SQL Server 2016 e no SQL Server 2017 no Windows, veja recursos e limitações do PolyBase. 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 | Sim 5 | 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 |
| Cálculo de aplicação | 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 com escopo de banco de dados tem como alvo o endpoint SQL. Use os mesmos passos que para conectar a outra instância do SQL Server.
4 A Autenticação de Identidade Gerenciada é compatível com a conexão com o Armazenamento de blobs do Azure (ABS) e o 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.
5 SQL Server 2019 CU11 e versões posteriores dão suporte ao Azure Data Lake Storage Gen2 com o prefixo abfs ou abfss. No SQL Server 2022 e versões posteriores, use o adls prefixo.
- Tabelas externas são suportadas no SQL Server 2019, SQL Server 2022, SQL Server 2025, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e banco de dados SQL no Microsoft Fabric.
-
OPENROWSET (BULK)é suportado no SQL Server 2019, SQL Server 2022, SQL Server 2025, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e banco de dados SQL no Microsoft Fabric. O SQL Server 2019 suporta caminhos de arquivos locais e de rede, enquanto o SQL Server 2022 e versões posteriores também suportam leitura de armazenamento em nuvem comFORMAT = 'PARQUET',FORMAT = DELTA, eFORMAT = 'CSV'. - A exportação do CETAS não é suportada no SQL Server 2019, Banco de Dados SQL do Azure ou SQL Database no Microsoft Fabric. A exportação CETAS é suportada no SQL Server 2022, SQL Server 2025 e Instância Gerenciada de SQL do Azure.
- CSV e arquivos delimitados são suportados no SQL Server 2019, SQL Server 2022, SQL Server 2025, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e banco de dados SQL no Microsoft Fabric. O SQL Server 2019 requer Hadoop para suporte a CSV, enquanto o SQL Server 2022 e versões posteriores suportam CSV nativamente sem Hadoop.
- Arquivos Parquet não são suportados no SQL Server 2019. Os arquivos Parquet são suportados no SQL Server 2022, SQL Server 2025, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e no banco de dados SQL no Microsoft Fabric.
- As tabelas Delta Lake não são suportadas no SQL Server 2019, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou SQL Database no Microsoft Fabric. As tabelas Delta Lake são suportadas no SQL Server 2022 e no SQL Server 2025.
- A conexão a outra instância do SQL Server é suportada no SQL Server 2019, SQL Server 2022 e SQL Server 2025. Não há suporte para conexão com outra instância do SQL Server no Banco de Dados SQL do Azure, no Instância Gerenciada de SQL do Azure nem em um banco de dados SQL no Microsoft Fabric.
- A conexão ao Banco de Dados SQL do Azure ou Instância Gerenciada de SQL do Azure é suportada pelo SQL Server 2019, SQL Server 2022 e SQL Server 2025 usando o conector SQL Server. A credencial com escopo de banco de dados tem como alvo o endpoint Banco de Dados SQL do Azure ou Instância Gerenciada de SQL do Azure, e as etapas de configuração são as mesmas que para conectar a outra instância do SQL Server. Essas conexões não são suportadas pelo Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou SQL Database no Microsoft Fabric.
- A conexão com Oracle, Teradata ou MongoDB é suportada a partir do SQL Server 2019, SQL Server 2022 e SQL Server 2025. Essas conexões não são suportadas pelo Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou SQL Database no Microsoft Fabric.
- A conexão com o Armazenamento de Blobs do Azure é suportada pelo SQL Server 2019, SQL Server 2022, SQL Server 2025, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure. Conectar ao Armazenamento de Blobs do Azure não é suportado pelo banco de dados SQL no Microsoft Fabric.
- Conectar ao ADLS Gen2 não é suportado nas versões do SQL Server 2019 anteriores ao CU11 nem a partir do banco de dados SQL no Microsoft Fabric. A conexão com ADLS Gen2 é suportada a partir do SQL Server 2019 CU11, e no SQL Server 2022, SQL Server 2025, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure.
- A conexão com armazenamento compatível com S3 não tem suporte no SQL Server 2019, no Banco de Dados SQL do Azure, no Instância Gerenciada de SQL do Azure nem no Banco de Dados SQL no Microsoft Fabric. A conexão com armazenamento compatível com S3 é suportada a partir do SQL Server 2022 e SQL Server 2025.
- A conexão ao OneLake é suportada a partir de banco de dados SQL no Microsoft Fabric. Conectar ao OneLake não é suportado pelo SQL Server 2019, SQL Server 2022, SQL Server 2025, Banco de Dados SQL do Azure ou Instância Gerenciada de SQL do Azure.
- A computação pushdown é suportada no SQL Server 2019, SQL Server 2022 e SQL Server 2025. O cálculo por pressão não é suportado no Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure ou SQL Database no Microsoft Fabric.
- A autenticação por Identidade Gerenciada não é suportada no SQL Server 2019 ou no SQL Server 2022. A autenticação por Identidade Gerenciada tem suporte no SQL Server 2025 para conexões com o Armazenamento de Blobs do Azure e o ADLS Gen2, e requer o SQL Server habilitado para Azure Arc ou o SQL Server em uma máquina virtual do Azure. A autenticação por Identidade Gerenciada também é suportada no Banco de Dados SQL do Azure e no Instância Gerenciada de SQL do Azure, mas não é suportada no banco de dados SQL do Microsoft Fabric.
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 | Instalação do PolyBase necessária |
|---|---|---|---|---|
| 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 em arquivos | 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 | SQL Server 2022: Sim 1 SQL Server 2025 e versões posteriores: Não Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e SQL Database em Fabric: Incorporados |
| Conectores de dados persistentes |
CREATE EXTERNAL TABLE com sqlserver://, oracle://, teradata:// etc. |
Você precisa de acesso recorrente, governança, estatísticas e computação de pushdown para produção | Somente autenticação SQL | Sim |
1 Para acesso a arquivos na nuvem no SQL Server 2022 (16.x), você deve instalar o recurso PolyBase, mas os conectores de armazenamento Armazenamento de Blobs do Azure, ADLS Gen2 e compatíveis com S3 não dependem dos serviços PolyBase. SQL Server 2025 (17.x) e versões posteriores possuem suporte nativo para CSV, Parquet e Delta sem necessidade de instalar ou rodar serviços PolyBase.
- Consultas ad hoc do OLE DB são usadas
OPENROWSET(provider, connection, query)para acesso rápido e único a uma fonte de dados remota sem criar objetos persistentes. Eles podem usar autenticação SQL, autenticação do Windows ou Microsoft Entra ID com MSOLEDBSQL. Esse cenário não exige instalação do PolyBase. - Consultas ad hoc em arquivos são usadas
OPENROWSET(BULK ...)para explorar rapidamente os dados do arquivo ou testar um esquema antes de criar uma tabela. Eles podem usar tokens SAS, chaves de acesso, Identidade Gerenciada ou Microsoft Entra ID. O SQL Server 2022 exige a instalação do recurso PolyBase para arquivos na nuvem, mas não exige serviços PolyBase. SQL Server 2025 e versões posteriores não exigem PolyBase para arquivos na nuvem. As consultas ad hoc em arquivos estão incorporadas ao Banco de Dados SQL do Azure, ao Instância Gerenciada de SQL do Azure e ao SQL database no Fabric. - Conectores de dados persistentes utilizam
CREATE EXTERNAL TABLEcomsqlserver://,oracle://,teradata://e locais semelhantes para acesso recorrente, governança, estatísticas e processamento pushdown em cargas de trabalho de produção. Eles exigem autenticação SQL e serviços PolyBase.
Guia de decisão
| Scenario | Recomendação |
|---|---|
| É necessária a autenticação do Microsoft Entra ID para SQL remoto, ou você deseja evitar os serviços PolyBase. | Use OPENROWSET(MSOLEDBSQL, ...) (ad hoc, sem objetos persistentes). |
| Você precisa de tabelas persistentes, estatísticas ou processamento delegado a bancos de dados remotos. | Use CREATE EXTERNAL TABLE com conectores do PolyBase (sqlserver://, oracle://, teradata://, mongodb://, odbc://).
OPENROWSET Não suporta conectores. |
| Você está explorando um novo arquivo ou testando um esquema. | Use OPENROWSET(BULK ...) (iteração rápida, sem objetos persistentes). |
| Você está importando dados de um arquivo para uma tabela com transformações. | Use INSERT ... SELECT de OPENROWSET(BULK ...). |
| Você precisa de governança ou acesso compartilhado para muitos usuários ou aplicativos. | Use CREATE EXTERNAL TABLE para que permissões e metadados sejam centralizados. |
| Você está trabalhando em banco de dados SQL no Fabric. | Use OPENROWSET(BULK ...) para consultas ad hoc no OneLake ou tabelas externas para acesso reutilizável; para armazenamento externo, use atalhos do OneLake. |
- Se você precisar de autenticação do Microsoft Entra ID para SQL remoto ou quiser evitar os serviços do PolyBase, use
OPENROWSET(MSOLEDBSQL, ...)para consultas remotas ad hoc sem objetos persistentes. - Se você precisar de tabelas persistentes, estatísticas ou processamento pushdown em bancos de dados remotos, use
CREATE EXTERNAL TABLEcom conectores PolyBase comosqlserver://,oracle://,teradata://,mongodb://eodbc://.OPENROWSETNão suporta esses conectores. - Se você estiver explorando um novo arquivo ou testando um esquema, use
OPENROWSET(BULK ...)para iteração rápida e sem objetos persistentes. - Se você estiver carregando dados de um arquivo em uma tabela com transformações, use
INSERT ... SELECTdeOPENROWSET(BULK ...). - Se você precisar de governança ou acesso compartilhado para muitos usuários ou aplicativos, use
CREATE EXTERNAL TABLEpara que as permissões e os metadados fiquem centralizados. - Se você trabalha com um banco de dados SQL no Fabric, use
OPENROWSET(BULK ...)para consultas ad hoc no OneLake ou tabelas externas para acesso reutilizável, e use atalhos do OneLake para armazenamento externo.
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 |
- Para uma consulta rápida e ad hoc em um arquivo Parquet ou CSV, use
OPENROWSET. Esse método não requer uma mesa externa. SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e SQL Database no Fabric suportam esse padrão. - Para consultas repetidas em arquivos Parquet com um esquema persistente, use 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 e SQL Database no Fabric suportam esse padrão.
- Para uma consulta em arquivos CSV, use 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 e SQL Database no Fabric suportam esse padrão.
- Para consultar tabelas Delta Lake, use uma tabela externa com
FILE_FORMAT = DeltaLakeFileFormat. SQL Server 2022 (16.x) e versões posteriores suportam esse padrão. - Para exportar resultados de consulta para arquivos Parquet ou CSV, use
CREATE EXTERNAL TABLE AS SELECT. O SQL Server 2022 (16.x) e versões posteriores e o Instância Gerenciada de SQL do Azure suportam esse padrão.
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 PolyBase RDBMS usam autenticação SQL através de CREATE DATABASE SCOPED CREDENTIAL e não oferecem suporte à autenticação via Microsoft Entra ID, Identidade Gerenciada ou 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 logon 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> |
-
- Instale o PolyBase no Windows ou Linux usando o Install PolyBase no Windows ou Instale o PolyBase no Linux antes de configurar o acesso a dados SQL externos.
-
- Crie uma credencial com escopo de banco de dados com o login alvo usando
CREATE DATABASE SCOPED CREDENTIALpara que o motor possa autenticar no servidor remoto.
- Crie uma credencial com escopo de banco de dados com o login alvo usando
-
- Crie uma fonte de dados externa para o SQL Server remoto usando
CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
- Crie uma fonte de dados externa para o SQL Server remoto usando
-
- Crie uma tabela externa usando
CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')para representar a tabela remota.
- Crie uma tabela externa usando
-
- Consulte a tabela externa usando
SELECT * FROM <external_table>.
- Consulte a tabela externa usando
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 os mesmos passos e defina LOCATION para o endpoint Banco de Dados SQL do Azure ou Instância Gerenciada de 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)) |
- Fontes de dados Oracle usam o Configure PolyBase para acessar dados externos no guia Oracle e requerem SQL Server 2019 (15.x) e versões posteriores, além de drivers cliente Oracle.
- As fontes de dados Teradata utilizam o Configure PolyBase para acessar dados externos no guia Teradata e requerem versões do SQL Server 2019 (15.x) e posteriores, além do driver ODBC do Teradata.
- Fontes de dados do MongoDB ou Cosmos DB usam o Configure PolyBase para acessar dados externos no guia MongoDB e exigem versões do SQL Server 2019 (15.x) e posteriores, além do driver ODBC do MongoDB.
- Qualquer fonte ODBC pode usar o Configure PolyBase para acessar dados externos com o guia de tipos genéricos ODBC e requer SQL Server 2019 (15.x) e versões posteriores no Windows ou SQL Server 2025 (17.x) e versões posteriores no Linux.
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 |
- O SQL Server 2022 e versões posteriores suportam autenticação Armazenamento de Blobs do Azure ou ADLS Gen2 usando tokens SAS, chaves de acesso ou Identidade Gerenciada a partir do SQL Server 2025 (17.x). Para obter mais informações, consulte Configurar o PolyBase para acessar dados externos no Armazenamento de Blobs do Azure.
- O SQL Server 2019 suporta Armazenamento de Blobs do Azure ou ADLS Gen2 usando uma chave de acesso via conector Hadoop. Para obter mais informações, consulte Configurar o PolyBase para acessar dados externos no Armazenamento de Blobs do Azure.
- O Banco de Dados SQL do Azure é compatível com o Armazenamento de Blobs do Azure ou o ADLS Gen2 por meio de tokens de SAS, identidade gerenciada ou autenticação pass-through do Microsoft Entra. Para obter mais informações, consulte Virtualização de dados com o Banco de Dados SQL do Azure (versão prévia).
- Instância Gerenciada de SQL do Azure suporta Armazenamento de Blobs do Azure ou ADLS Gen2 usando tokens SAS ou Identidade Gerenciada. Para mais informações, consulte 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. Exportar para ADLS Gen2 com CETAS requer SQL Server 2022 CU5 ou versão posterior. | Sim | Parquet, CSV | Requer configuração do servidor: permitir 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 |
- O SQL Server 2022 e versões posteriores suportam CETAS e exportam arquivos Parquet e CSV. A configuração do servidor: permitir exportação do PolyBase é necessária. A exportação CETAS para ADLS Gen2 não está disponível nas versões do SQL Server 2022 antes do CU5.
- Instância Gerenciada de SQL do Azure suporta CETAS e exporta arquivos Parquet e CSV. A orientação Desabilitado por padrão descreve o estado padrão.
- Banco de Dados SQL do Azure não suporta CETAS.
- O banco de dados SQL no Fabric não suporta CETAS.
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 Armazenamento de Blobs do Azure
Este exemplo funciona em todas as plataformas SQL que suportam tabelas externas sobre arquivos CSV.
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ê pode pular essa etapa se usar a autenticação Managed Identity ou Microsoft Entra.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<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 = '<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 (Tabela Externa, OPENROWSET, BULK INSERTCETAS).
- Para a sintaxe da fonte de dados externa, veja CREATE EXTERNAL DATA SOURCE.
- Para a sintaxe do formato de arquivo externo, veja CREATE EXTERNAL FILE FORMAT.
- Para a sintaxe de tabelas externas, veja CREATE EXTERNAL TABLE.
- Para a sintaxe de acesso ad hoc a dados, veja OPENROWSET.
- Para a sintaxe CETAS, vejaCREATE EXTERNAL TABLE AS SELECT (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 você precisa de CREATE MASTER KEY?
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 - Uma credencial de token SAS usa
IDENTITY = 'SHARED ACCESS SIGNATURE'e armazena um valor secreto, então requer uma chave mestra do banco de dados. - Uma credencial de chave de acesso S3 usa
IDENTITY = 'S3 ACCESS KEY'e armazena um valor secreto, então requer uma chave mestra de banco de dados.- Um login SQL ou credencial básica de autenticação usa
IDENTITY = '<username>'e armazena um valor secreto, então requer uma chave mestra de banco de dados.
- Um login SQL ou credencial básica de autenticação usa
- Uma credencial de chave de acesso de conta de armazenamento usa
IDENTITY = '<storage_account_name>'e armazena um valor secreto, então requer uma chave mestra de banco de dados.
- Uma credencial de token SAS usa
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 - Uma credencial de Identidade Gerenciada não usa
IDENTITY = 'Managed Identity'nem armazena segredo, então não precisa de uma chave mestra de banco de dados. - Uma credencial do Microsoft Entra ID usa
IDENTITY = 'User Identity'ouIDENTITY = 'Managed Identity'e não armazena nenhum segredo, portanto não requer uma chave mestra do banco de dados.
- Uma credencial de Identidade Gerenciada não usa
Dica
Se sua CREATE DATABASE SCOPED CREDENTIAL declaração não inclui um segredo, você não precisa 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 = '<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 arquivos no SQL Server 2022 (16.x) e no SQL Server 2019 (15.x) | 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 a nuvem 1; Não para o local | SQL Server 2022 (16.x) e SQL Server 2019 (15.x) |
| Consultas de arquivo no SQL Server 2025 (17.x) e versões posteriores | 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 | No | 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 |
| 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) |
1 Para acesso a arquivos em nuvem no SQL Server 2022 (16.x), o recurso PolyBase deve ser instalado.
- As consultas OLE DB usam
OPENROWSET(provider, connection, query)para se conectarem a qualquer fonte OLE DB por meio do MSOLEDBSQL, SQLOLEDB ou outro provedor em todas as versões com suporte do SQL Server. Eles suportam autenticação SQL, autenticação do Windows e Microsoft Entra ID com MSOLEDBSQL, e não exigem a instalação dos serviços PolyBase. - Consultas de arquivo são usadas
OPENROWSET(BULK ...)para ler arquivos em disco local, compartilhamentos de rede ou armazenamento em nuvem, como Armazenamento de Blobs do Azure, ADLS, S3 ou OneLake, usando um token SAS, chave de acesso, Identidade Gerenciada ou Microsoft Entra ID. Eles são suportados para arquivos locais e de rede no SQL Server 2005 e versões posteriores, para arquivos em nuvem no SQL Server 2022 (16.x) e versões posteriores, e no Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e banco de dados SQL no Fabric. Consultas de arquivos não exigem serviços PolyBase para arquivos locais ou para arquivos em nuvem no SQL Server 2022 (16.x) e versões posteriores. - Os conectores PolyBase usam
CREATE EXTERNAL TABLEcomCREATE EXTERNAL DATA SOURCEe o localsqlserver://,oracle://,teradata://,mongodb://ouodbc://para se conectar a fontes remotas de SQL Server, Oracle, Teradata, MongoDB ou ODBC. Eles exigem autenticação SQL e serviços PolyBase no SQL Server 2019 (15.x) e versões posteriores no Windows e SQL Server 2025 (17.x) e versões posteriores no Linux. Para obter mais informações, consulte CREATE EXTERNAL DATA SOURCE (Transact-SQL).
Quando usar cada abordagem
Use OLE DB OPENROWSET para:
- Use o OLE DB
OPENROWSETpara consultas rápidas e pontuais, sem criar objetos persistentes. - Use o OLE DB
OPENROWSETpara autenticação do Microsoft Entra ID ou da Identidade Gerenciada por meio do MSOLEDBSQL. - Use o OLE DB
OPENROWSETpara evitar dependências de serviços PolyBase. - Use o OLE DB
OPENROWSETpara se conectar a qualquer fonte de dados que tenha um provedor OLE DB.
Use Arquivo OPENROWSET(BULK) para:
- Use o arquivo
OPENROWSET(BULK ...)para exploração de arquivos ad hoc e descoberta de esquemas. - Use o arquivo
OPENROWSET(BULK ...)para transformações rápidas e prévias antes de se comprometer com uma definição de tabela. - Use o arquivo
OPENROWSET(BULK ...)para transformações flexíveis de colunas inline, como casting, filtragem e colunas computadas. - Use o arquivo
OPENROWSET(BULK ...)para dados que não mudam com frequência e não precisam de metadados persistentes.
Use Conectores do PolyBase com CREATE EXTERNAL TABLE para:
- Use conectores PolyBase com
CREATE EXTERNAL TABLEpara criar definições de tabelas persistentes e reutilizáveis que podem ser acessadas por vários usuários ou aplicativos. - Use conectores PolyBase com
CREATE EXTERNAL TABLEpara cargas de trabalho de produção que exigem estatísticas e otimização do plano de consulta. - Use conectores PolyBase com
CREATE EXTERNAL TABLEpara processamento por pushdown em fontes remotas, como Oracle e SQL Server. - Use os conectores PolyBase com
CREATE EXTERNAL TABLEpara governança compartilhada e segurança; após a criação da tabela, os usuários precisam apenas da permissãoSELECT. - Use conectores PolyBase com
CREATE EXTERNAL TABLEquando a autenticação SQL estiver disponível para a fonte remota.
OPENROWSET (OLE DB) – consultas remotas ad hoc (não requer serviços do PolyBase)
O formulário OLE DB de OPENROWSET conecta-se a uma fonte de dados remota por meio de um provedor OLE DB, executa uma consulta de passagem 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 em versões anteriores, ele lê a partir de caminhos de arquivo locais 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 a partir do arquivo (Parquet) ou especificado em linha com uma cláusula WITH |
Definido explicitamente na declaração CREATE EXTERNAL TABLE |
| Permissões | Requer ADMINISTER BULK OPERATIONS ou ADMINISTER 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 | Instância Gerenciada de SQL do Azure: estatísticas manuais de coluna única via sys.sp_create_openrowset_statistics. Confira as estatísticas manuais do OPENROWSET. SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure, Banco de Dados SQL no Fabric: criação automática de estatísticas em predicados. Estatísticas manuais OPENROWSET não são suportadas no SQL Server. |
Suporte completo a CREATE STATISTICS em todas as plataformas, além da criação automática no SQL Server 2022 (16.x) e versões posteriores. Consulte Criar estatísticas manuais para tabela externa. |
| Pushdown | Suporte limitado. O mecanismo pode propagar filtros para a varredura de arquivos, mas não há propagação de filtros para fontes RDBMS remotas. | 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 |
-
OPENROWSET(BULK ...)é melhor para exploração ad hoc e consultas pontuais, enquanto uma tabela externa é melhor para definições persistentes e reutilizáveis de tabelas. -
OPENROWSET(BULK ...)não armazena metadados no banco de dados após a execução da consulta, enquanto uma tabela externa armazena a definição da tabela, a fonte de dados e o formato do arquivo como objetos do banco de dados. -
OPENROWSET(BULK ...)deduz automaticamente o esquema de um arquivo Parquet ou o define diretamente com a cláusulaWITH, enquanto uma tabela externa define o esquema explicitamente na instruçãoCREATE EXTERNAL TABLE. -
OPENROWSET(BULK ...)requerADMINISTER BULK OPERATIONSouADMINISTER DATABASE BULK OPERATIONS, enquanto uma tabela externa pode ser consultada por usuários que só precisam de permissão padrãoSELECTuma vez que a tabela existe. -
OPENROWSET(BULK ...)suporta colunas computadas nas funções de consulta e metadados comofilename()efilepath(), enquanto uma tabela externa possui uma lista de colunas fixa e requer transformações em uma visualização ou na consulta que lê a tabela externa. -
OPENROWSET(BULK ...)possui suporte limitado a estatísticas: o Instância Gerenciada de SQL do Azure pode ser usadosys.sp_create_openrowset_statisticspara estatísticas de coluna única, mas o SQL Server 2022 (16.x) e versões posteriores, o Banco de Dados SQL do Azure e o SQL Database no Fabric criam automaticamente estatísticas sobre predicados. Estatísticas manuaisOPENROWSETnão são compatíveis com SQL Server, Banco de Dados SQL do Azure e banco de dados SQL no Fabric. Uma tabela externa oferece suporte completo aCREATE STATISTICSem todas as plataformas, bem como a estatísticas automáticas no SQL Server 2022 (16.x) e versões posteriores, no Banco de Dados SQL do Azure e no banco de dados SQL no Fabric. Veja estatísticas manuais do OPENROWSET e Criar estatísticas manuais para tabela externa. -
OPENROWSET(BULK ...)tem capacidade limitada de pushdown e não oferece pushdown para fontes remotas de RDBMS, enquanto uma tabela externa oferece suporte à computação com pushdown para conectores RDBMS. -
OPENROWSET(BULK ...)é ideal para exploração de dados, descoberta de esquemas, prototipagem, cargas únicas e transformações flexíveis, enquanto uma tabela externa é ideal para cargas de trabalho de produção, consultas repetidas, acesso compartilhado, 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 embutidos ou filtrar com base em expressões calculadas 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 só precisam de permissão SELECT 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 deles devo usar?
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
A instrução independente BULK INSERT não é suportada no banco de dados SQL no Fabric. Para ingerir dados, use INSERT ... SELECT com 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 do arquivo para a tabela no formato original (o mapeamento é controlado pelo arquivo de formato ou pela ordem das colunas). | 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 |
DATA_SOURCEsuporta Armazenamento de Blobs do Azure no SQL Server 2017 (14.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure. O SQL Server 2019 CU11 e atualizações posteriores também suportam ADLS Gen2. Armazenamento compatível com S3 não é suportado. |
DATA_SOURCEsuporta Armazenamento de Blobs do Azure no SQL Server 2017 (14.x) e versões posteriores, ADLS Gen2 no SQL Server 2019 CU11 e versões posteriores, e armazenamento compatível com S3 no SQL Server 2022 (16.x) e versões posteriores. Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure suportam Armazenamento de Blobs do Azure e ADLS Gen2. O banco de dados SQL no Fabric suporta OneLake e armazenamento externo por meio de atalhos OneLake. |
| Arquivos Parquet ou Delta | Sem suporte. Somente texto CSV/delimitado | Sim. SQL Server 2022 (16.x) e versões posteriores, Instância Gerenciada de SQL do Azure e Banco de Dados SQL do Azure suportam FORMAT = 'PARQUET' e FORMAT = 'DELTA'; o Banco de Dados SQL no Fabric suporta FORMAT = 'PARQUET', mas não DELTA. Para obter mais informações, consulte OPENROWSET BULK (Transact-SQL). |
| 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 |
| Log mínimo | Sim. Compatível com os modelos de recuperação simples ou de registro em massa usando TABLOCK |
Sim. Com suporte quando usado com INSERT ... SELECT e TABLOCK |
-
BULK INSERTcarrega dados de um arquivo diretamente na tabela de destino, enquantoOPENROWSET(BULK ...)retorna um conjunto de linhas que você pode usar em uma instruçãoINSERT ... SELECTouSELECT. -
BULK INSERTé uma instrução independente, enquantoOPENROWSET(BULK ...)deve ser usada dentro de uma consulta comoSELECT * FROM OPENROWSET(BULK ...)ouINSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...). -
BULK INSERTsempre grava diretamente em uma tabela de destino, enquantoOPENROWSET(BULK ...)podeSELECTde um arquivo sem inserir os dados em lugar nenhum ou inseri-los em qualquer tabela ou tabela temporária. -
BULK INSERTtem suporte limitado para transformações nas colunas porque os dados fluem do arquivo para a tabela como estão, com o mapeamento controlado por um arquivo de formato ou pela ordem das colunas.OPENROWSET(BULK ...)oferece suporte a expressões,CAST, filtrosWHERE,JOINs e colunas calculadas noSELECTcircundante. -
BULK INSERTusa a cláusulaWITHparaBATCHSIZE,CHECK_CONSTRAINTS,FIRE_TRIGGERS,KEEPIDENTITY,KEEPNULLS,TABLOCKe outras indicações.OPENROWSET(BULK ...)suporta dicas de tabela por meio deINSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...). -
BULK INSERTnão suporta importação de valor único de objetos grandes.OPENROWSET(BULK ...)suportaSINGLE_BLOB,SINGLE_CLOB, eSINGLE_NCLOBpara importar um arquivo inteiro como um valor varbinary(max), varchar(max) ou nvarchar(max ), respectivamente. - Ambos,
BULK INSERTeOPENROWSET(BULK ...), suportam arquivos em formatos XML e não XML. - Para acesso a arquivos na nuvem com
BULK INSERT, oDATA_SOURCEparâmetro suporta Armazenamento de Blobs do Azure no SQL Server 2017 (14.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure. O SQL Server 2019 CU11 e atualizações posteriores também suportam ADLS Gen2, masBULK INSERTnão suportam armazenamento compatível com S3. ParaOPENROWSET(BULK ...),DATA_SOURCEsuporta Armazenamento de Blobs do Azure no SQL Server 2017 (14.x) e versões posteriores, ADLS Gen2 no SQL Server 2019 CU11 e versões posteriores, e armazenamento compatível com S3 no SQL Server 2022 (16.x) e versões posteriores. Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure suportam Armazenamento de Blobs do Azure e ADLS Gen2. O banco de dados SQL no Fabric suporta OneLake e armazenamento externo por meio de atalhos OneLake. -
BULK INSERTnão suporta arquivos Parquet ou Delta e suporta apenas CSV ou texto delimitado.OPENROWSET(BULK ...)suportaFORMAT = 'PARQUET'eFORMAT = 'DELTA', no SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure. O banco de dados SQL no Fabric suportaFORMAT = 'PARQUET', mas nãoFORMAT = 'DELTA'. Para obter mais informações, consulte OPENROWSET BULK (Transact-SQL). -
BULK INSERTrequerADMINISTER BULK OPERATIONSouADMINISTER DATABASE BULK OPERATIONS, além da permissãoINSERTna tabela de destino, enquantoOPENROWSET(BULK ...)requerADMINISTER BULK OPERATIONSouADMINISTER DATABASE BULK OPERATIONS. -
BULK INSERTé compatível com log mínimo no modelo de recuperação simples ou com log em massa comTABLOCK.OPENROWSET(BULK ...)suporta logs mínimos quando usado comINSERT ... SELECTeTABLOCK.
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:
- Use
OPENROWSET(BULK ...)para consultar ou pré-visualizar dados de arquivos sem criar uma tabela antes. - Use
OPENROWSET(BULK ...)para transformar, filtrar ou unir dados durante a importação. - Uso
OPENROWSET(BULK ...)para carregar arquivos Parquet ou Delta porqueBULK INSERTnão suporta esses formatos. - Use
OPENROWSET(BULK ...)para importar um arquivo inteiro como um único valor LOB comSINGLE_BLOB,SINGLE_CLOB, ouSINGLE_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çar com OPENROWSET(BULK ...) em um SELECT para explorar e validar os dados do arquivo e depois mude para BULK INSERT para a carga final em produção, se você não precisar de transformações. Se você precisa de suporte para Parquet ou Delta, ou filtragem em linha, continue com OPENROWSET.
Para obter mais informações, consulte os seguintes guias relacionados:
- O artigo Usar BULK INSERT ou OPENROWSET(BULK...) para importar dados para o SQL Server fornece um guia detalhado com uma comparação lado a lado e considerações de segurança.
- O artigo Importação e Exportação em Massa de Dados (SQL Server) oferece uma visão geral de todos os métodos de movimentação de dados em massa, incluindo bcp,
BULK INSERT, eOPENROWSET. - O artigo BULK INSERT (Transact-SQL) fornece a referência completa do T-SQL de
BULK INSERT. - O artigo OPENROWSET BULK (Transact-SQL) fornece a referência completa do T-SQL para
OPENROWSET(BULK ...). - O artigo Exemplos de acesso em massa a dados no Armazenamento de Blobs do Azure fornece exemplos lado a lado que utilizam ambos os métodos com o Armazenamento do Azure.
- O artigo Importação em massa de dados de objeto grande com o Provedor de Conjunto de Linhas em Massa OPENROWSET (SQL Server) fornece exemplos de
SINGLE_BLOB,SINGLE_CLOBeSINGLE_NCLOB. - O artigo Use a format file to bulk import data (SQL Server) explica o uso de arquivos de formato com ambos os métodos.
- Para orientações sobre como preservar nulos ou aplicar valores padrão durante a importação em massa, veja Manter nulos ou valores padrão durante a importação em massa (SQL Server).
- Para orientações sobre como preservar valores de identidade durante a importação em massa, veja Manter valores de identidade ao importar dados em massa (SQL Server).
Funções de metadados úteis
Quando você consulta arquivos externos usando OPENROWSET ou tabelas externas, utilize as funções e procedimentos integrados para inspecionar metadados de arquivos, descobrir esquemas e implementar consultas conscientes de partições.
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 enésimo (th) segmento de pasta do curinga (*) no caminho BULK, onde 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 filtros filepath() na cláusula WHERE clause em vez de em uma subconsulta ou CTE. Quando o filtro está na cláusula WHERE, o mecanismo pode realizar a eliminação de partições no nível de varredura de arquivos, o que reduz significativamente a E/S.
sp_describe_first_result_set - descobrir tipos de coluna do OPENROWSET
Quando você usa OPENROWSET com arquivos Parquet, o mecanismo infere automaticamente os tipos de dados das colunas (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), onde 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 para SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e banco de dados SQL no Fabric, mas é especialmente útil para consultas OPENROWSET. 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 |
| Cálculo de aplicação | Cálculos de empilhamento no PolyBase | Especifica quais operações de push são enviadas para a fonte remota |
| Como saber se ocorreu o pushdown | Como saber se ocorreu o pushdown 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
- Visão geral do PolyBase
- 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