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
Banco de Dados SQL do
AzureInstância
Gerenciada de SQL do AzurePonto de extremidade de análise de SQL no Microsoft Fabric
Warehouse no Microsoft Fabric
Banco de dados SQL no Microsoft Fabric
A OPENROWSET função lê dados de um ou muitos arquivos e retorna o conteúdo como um conjunto de linhas. Dependendo do serviço, o arquivo pode ser armazenado no Armazenamento de Blobs do Azure, Azure Data Lake storage, disco local, compartilhamentos de rede e mais. Você pode ler vários formatos de arquivo, como texto/CSV, Parquet ou linhas JSON.
Você pode referenciar a OPENROWSET função na FROM cláusula de uma consulta como se fosse um nome de tabela. Use-o para ler dados em uma SELECT instrução ou para atualizar dados alvo em UPDATE, INSERT, DELETE, MERGE, CTAS, ou CETAS sentenças.
- Use
OPENROWSET(BULK)para ler dados de arquivos externos. - Use
OPENROWSETsemBULKpara ler de outro motor de banco de dados. Para obter mais informações, consulte OPENROWSET (Transact-SQL).
Dica
Este artigo e a OPENROWSET(BULK) sintaxe diferem entre diferentes plataformas do SQL Mecanismo de Banco de Dados.
Para Microsoft Fabric Data Warehouse sintaxe, selecione Fabric Data Warehouse na lista suspensa de versões.
Detalhes e links para exemplos semelhantes em outras plataformas:
- Para obter mais informações sobre
OPENROWSETo Banco de Dados SQL do Azure, consulte Virtualização de dados com o Banco de Dados SQL do Azure. - Para obter mais informações sobre
OPENROWSETa Instância Gerenciada de SQL do Azure, consulte Virtualização de dados com a Instância Gerenciada de SQL do Azure. - Para obter informações e exemplos com pools de SQL sem servidor no Azure Synapse, consulte Como usar OPENROWSET usando o pool de SQL sem servidor no Azure Synapse Analytics.
- Os pools de SQL dedicados no Azure Synapse não dão suporte à
OPENROWSETfunção.
Convenções de sintaxe de Transact-SQL
Sintaxe
Para SQL Server, Banco de Dados SQL do Azure, SQL Database in Fabric e Instância Gerenciada de SQL do Azure:
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
FORMATFILE = 'format_file_path' |
FORMATFILE_DATA_SOURCE = 'data_source_name' |
SINGLE_BLOB |
SINGLE_CLOB |
SINGLE_NCLOB |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
ERRORFILE_DATA_SOURCE = 'data_source_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ] |
ROWS_PER_BATCH = rows_per_batch
Sintaxe do Fabric Data Warehouse
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
ESCAPECHAR = 'escape_char' |
HEADER_ROW = [true|false] |
PARSER_VERSION = 'parser_version' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ROWS_PER_BATCH = rows_per_batch
Algumas OPENROWSET opções são específicas de formato, enquanto outras são universais. Por exemplo, delimitadores de linha e campo são significativos apenas para texto delimitado (CSV/TSV), enquanto opções como DATA_SOURCE e MAXERRORS se aplicam a todos os formatos. A tabela a seguir resume quais opções são suportadas para os formatos mais comuns.
| Opções | CSV(1.0) | CSV(2.0) | PARQUETE | JSONL |
|---|---|---|---|---|
| DATA_SOURCE, ROWS_PER_BATCH, MAXERRORS | Supported | Supported | Supported | Supported |
| ERRORFILE, ERRORFILE_DATA_SOURCE, FORMATFILE, FORMATFILE_DATA_SOURCE | Supported | Supported | Sem suporte | Supported |
| CODEPAGE, TIPO DE ARQUIVO DE DADOS | Supported | Supported | Sem suporte | Supported |
| PRIMEIRA FILEIRA | Supported | Supported | Sem suporte | Supported |
| ROWTERMINATOR, FIELDTERMINATOR, FIELDQUOTE, ESCAPECHAR | Supported | Supported | Sem suporte | Sem suporte |
| VERSÃO_DO_ANALISADOR | Supported | Supported | Sem suporte | Sem suporte |
| ÚLTIMA LINHA | Supported | Sem suporte | Sem suporte | Sem suporte |
| HEADER_ROW | Sem suporte | Supported | Sem suporte | Sem suporte |
| SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB | Sem suporte | Sem suporte | Sem suporte | Sem suporte |
Arguments
Os argumentos da BULK opção permitem um controle significativo sobre onde começar e terminar a leitura de dados, como lidar com erros e como os dados são interpretados. Por exemplo, você pode especificar que o arquivo de dados é lido como um conjunto de linhas de uma única coluna do tipo varbinary, varchar ou nvarchar. O comportamento padrão é descrito nas descrições de argumento que se seguem.
Para obter informações sobre como usar a opção BULK , consulte a seção Comentários mais adiante neste artigo. Para informações sobre as permissões que a BULK opção exige, veja a seção Permissões mais adiante neste artigo.
Para obter informações sobre como preparar dados para importação em massa, consulte Preparar dados para exportação ou importação em massa.
BULK
O caminho ou URI dos arquivos de dados que OPENROWSET lê e retorna como um conjunto de linhas.
O URI pode fazer referência ao Armazenamento do Azure Data Lake ou ao Armazenamento de Blobs do Azure. O URI dos arquivos de dados cujos dados devem ser lidos e retornados como conjunto de linhas.
Os formatos de caminho com suporte são:
-
<drive letter>:\<file path>para acessar arquivos em disco local -
\\<network-share\<file path>para acessar arquivos em compartilhamentos de rede -
adls://<container>@<storage>.dfs.core.windows.net/<file path>para acessar o Azure Data Lake Storage -
abs://<storage>.blob.core.windows.net/<container>/<file path>para acessar o Armazenamento de Blobs do Azure -
s3://<ip-address>:<port>/<file path>para acessar o armazenamento compatível com s3
Note
Este artigo e os padrões de URI com suporte diferem em diferentes plataformas. Para os padrões de URI disponíveis em Microsoft Fabric Data Warehouse, selecione Fabric Data Warehouse na lista suspensa de versões.
A partir do SQL Server 2017 (14.x), o data_file pode estar no Armazenamento de Blobs do Azure. Para obter exemplos, consulte Exemplos de acesso em massa a dados no Armazenamento de Blobs do Azure.
-
https://<storage>.blob.core.windows.net/<container>/<file path>para acessar o Armazenamento de Blobs do Azure ou o Azure Data Lake Storage -
https://<storage>.dfs.core.windows.net/<container>/<file path>para acessar o Azure Data Lake Storage -
abfss://<container>@<storage>.dfs.core.windows.net/<file path>para acessar o Azure Data Lake Storage -
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/<file path>- para acessar o OneLake no Microsoft Fabric
Ao acessar dados armazenados no Azure Data Lake Storage Gen2, use os abfss://<container>@<storage>.dfs.core.windows.net/<file path> formatos URI de or https://<storage>.dfs.core.windows.net/<container>/<file path> em vez do endpoint do blob. Ambos oferecem suporte completo para o namespace hierárquico (HNS), que permite semântica de diretórios, operações otimizadas de arquivos e listas de controle de acesso (ACLs) no estilo POSIX.
Em contraste, o blob endpoint não expõe características hierárquicas do namespace e trata todos os caminhos como chaves de objeto planas. Isso pode levar a desempenho reduzido, comportamento limitado de diretórios e incompatibilidade com motores que esperam a semântica do sistema de arquivos Azure Data Lake Storage Gen2.
Note
Este artigo e os padrões de URI com suporte diferem em diferentes plataformas. Para os padrões de URI disponíveis no SQL Server, no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure, selecione o produto na lista suspensa de versão.
O URI pode incluir o * caractere para corresponder a qualquer sequência de caracteres, podendo OPENROWSET então fazer patternmatching com o URI. Além disso, o URI pode terminar com /** para permitir a travessia recursiva por todas as subpastas. No SQL Server, esse comportamento está disponível a partir do SQL Server 2022 (16.x).
Por exemplo:
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<scheme:>//pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);
A tabela a seguir mostra os tipos de armazenamento que o URI pode referenciar:
| Versão | Local | Armazenamento do Azure | OneLake no Fabric | S3 | Google Cloud (GCS) |
|---|---|---|---|---|---|
| SQL Server 2017 (14.x), SQL Server 2019 (15.x) | Yes | Yes | Não | Não | Não |
| SQL Server 2022 (16.x) | Yes | Yes | Não | Yes | Não |
| Banco de Dados SQL do Azure | Não | Yes | Não | Não | Não |
| Instância Gerenciada de SQL do Azure | Não | Yes | Não | Não | Não |
| Pool de SQL sem servidor no Azure Synapse Analytics | Não | Yes | Yes | Não | Não |
| Microsoft Fabric Warehouse no Microsoft Fabric e ponto de extremidade de análise de SQL no Microsoft Fabric | Não | Yes | Yes | Sim, usando atalhos do OneLake no Fabric | Sim, usando atalhos do OneLake no Fabric |
| Banco de dados SQL no Microsoft Fabric | Não | Sim, usando atalhos do OneLake no Fabric | Yes | Sim, usando atalhos do OneLake no Fabric | Sim, usando atalhos do OneLake no Fabric |
Você pode ler OPENROWSET(BULK) dados diretamente de arquivos armazenados no OneLake no Microsoft Fabric, especificamente da pasta Arquivos de um Fabric Lakehouse. Essa capacidade elimina a necessidade de contas externas de staging (como ADLS Gen2 ou Armazenamento de Blobs) e permite a ingestão nativa SaaS governada pelo workspace usando permissões do Fabric. Essa funcionalidade dá suporte a:
- Lendo de
Filespastas em Lakehouses - Cargas de workspace para warehouse dentro do mesmo locatário
- ID de identidade nativa usando a ID do Microsoft Entra
Veja as limitações que se aplicam tanto a quanto OPENROWSET(BULK)a COPY INTO .
DATA_SOURCE
DATA_SOURCE define o local raiz do caminho do arquivo de dados. Isso permite que você use caminhos relativos no BULK caminho. Crie a fonte de dados com CREATE EXTERNAL DATA SOURCE.
Além da localização raiz, ele pode definir uma credencial personalizada para acessar os arquivos naquela localização.
Por exemplo:
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<scheme:>//pandemicdatalake.blob.core.windows.net/public')
GO
SELECT *
FROM OPENROWSET(
BULK '/curated/covid-19/bing_covid-19_data/latest/*.parquet',
DATA_SOURCE = 'root'
);
Opções de formato de arquivo
CODEPAGE
Especifica a página de código dos dados no arquivo de dados.
CODEPAGE será relevante somente se os dados contiverem colunas char, varchar ou texto com valores de caractere superiores a 127 ou menos de 32. Os valores válidos são ACP, OEM, RAW, ou uma página de código específica:
| Valor codepage | Description |
|---|---|
ACP |
Converte colunas de tipo de dados char, varchar ou text da página de código ANSI/Microsoft Windows (ISO 1252) para a página de código do SQL Server. |
OEM (padrão) |
Converte colunas de tipo de dados char, varchar ou text da página de código OEM do sistema para a página de código do SQL Server. |
RAW |
Não ocorre nenhuma conversão de uma página de código em outra. Esta é a opção mais rápida. |
| Integer | Indica a página de código de origem na qual são codificados os dados de caracteres do arquivo de dados; por exemplo, 850. |
Important
As versões anteriores ao SQL Server 2016 (13.x) não dão suporte à página de código 65001 (codificação UTF-8).
CODEPAGE não é uma opção suportada no Linux.
Note
Recomendamos a especificação de um nome de ordenação para cada coluna em um arquivo de formato, exceto quando você desejar que a opção 65001 tenha prioridade sobre a especificação de ordenação/página de código.
DATAFILETYPE
Especifica que OPENROWSET(BULK) deve ler conteúdo de um byte (ASCII, UTF8) ou multibyte (UTF16). Os valores válidos são char e widechar:
DATAFILETYPE valor |
Todos os dados representados em: |
|---|---|
| char (padrão) | Formato de caractere. Para obter mais informações, consulte usar o formato de caractere para importar ou exportar dados. |
| widechar | Caracteres Unicode. Para obter mais informações, consulte usar o formato de caractere Unicode para importar ou exportar dados. |
FORMAT
Especifica o formato do arquivo referenciado, por exemplo:
SELECT *
FROM OPENROWSET(BULK N'<data-file-path>',
FORMAT='CSV') AS cars;
Os valores válidos são 'CSV' (arquivo de valores separados por vírgulas em conformidade com o padrão RFC 4180 ), 'PARQUET', 'DELTA' (versão 1.0) e 'JSONL', dependendo da versão:
| Versão | CSV | PARQUETE | DELTA | JSONL |
|---|---|---|---|---|
| SQL Server 2017 (14.x), SQL Server 2019 (15.x) | Yes | Não | Não | Não |
| SQL Server 2022 (16.x) e versões posteriores | Yes | Yes | Yes | Não |
| Banco de Dados SQL do Azure | Yes | Yes | Yes | Não |
| Instância Gerenciada de SQL do Azure | Yes | Yes | Yes | Não |
| Pool de SQL sem servidor no Azure Synapse Analytics | Yes | Yes | Yes | Não |
| Microsoft Fabric Warehouse no Microsoft Fabric e ponto de extremidade de análise de SQL no Microsoft Fabric | Yes | Yes | Não | Yes |
| Banco de dados SQL no Microsoft Fabric | Yes | Yes | Não | Não |
Important
A OPENROWSET função pode ler apenas o formato JSON delimitado por nova linha .
O caractere de nova linha deve ser usado como separador entre documentos JSON e não pode ser colocado no meio de um documento JSON.
Você não precisa especificar a FORMAT opção se a extensão do arquivo no caminho terminar com .csv, .tsv, .parquet, .parq, .jsonl, .ldjson, , ou .ndjson. Por exemplo, a OPENROWSET(BULK) função sabe que o formato é parquet com base na extensão no exemplo a seguir:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
Se o caminho do arquivo não terminar com uma dessas extensões, você precisará especificar uma FORMAT, por exemplo:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='PARQUET'
)
FORMATFILE
Especifica o caminho completo de um arquivo de formato. SQL Server dá suporte a dois tipos de arquivos de formato: XML e não XML.
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'D:\XChange\test-csv.csv',
FORMATFILE= 'D:\XChange\test-format-file.xml'
)
Você precisa de um arquivo de formato para definir tipos de colunas no conjunto de resultados. A única exceção é quando você especifica SINGLE_CLOB, SINGLE_BLOB, ou SINGLE_NCLOB; nesse caso, você não precisa de um arquivo de formatação.
Para mais informações sobre arquivos de formatação, veja Usar um arquivo de formatação para importar dados em massa (SQL Server).
A partir do SQL Server 2017 (14.x), eles format_file_path podem estar no Armazenamento de Blobs do Azure. Para obter exemplos, consulte Exemplos de acesso em massa a dados no Armazenamento de Blobs do Azure.
FORMATFILE_DATA_SOURCE
FORMATFILE_DATA_SOURCE define o local raiz do caminho do arquivo de formato. Ao usar essa fonte de dados, você pode usar caminhos relativos na FORMATFILE opção.
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '//pandemicdatalake/public/curated')
GO
SELECT *
FROM OPENROWSET(
BULK '//pandemicdatalake/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
FORMATFILE = 'covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt',
FORMATFILE_DATA_SOURCE = 'root'
);
Crie a fonte de dados do arquivo de formato com CREATE EXTERNAL DATA SOURCE. Além da localização raiz, ele pode definir uma credencial personalizada para acessar os arquivos naquela localização.
Opções de texto/CSV
ROWTERMINATOR
Especifica o terminador de linha a ser usado para arquivos de dados char e widechar , por exemplo:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWTERMINATOR = '\n'
);
O terminador de linha padrão é \r\n(caractere de nova linha). Para obter mais informações, consulte Especificar terminadores de campo e linha.
FIELDTERMINATOR
Especifica o terminador de campo a ser usado para arquivos de dados char e widechar , por exemplo:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDTERMINATOR = '\t'
);
O terminador de campo padrão é , (vírgula). Para obter mais informações, consulte Especificar Terminadores de Campos e Linhas. Por exemplo, para ler dados delimitados por tabulação de um arquivo:
CITAÇÃO DE CAMPO
A partir do SQL Server 2017 (14.x), esse argumento especifica um caractere que é usado como o caractere de aspas no arquivo CSV, como no seguinte exemplo de Nova York:
Empire State Building,40.748817,-73.985428,"20 W 34th St, New York, NY 10118","\icons\sol.png"
Statue of Liberty,40.689247,-74.044502,"Liberty Island, New York, NY 10004","\icons\sol.png"
Somente um único caractere pode ser especificado como o valor dessa opção. Se não for especificado, o caractere de aspas (") será usado como o caractere de aspas, conforme definido no padrão RFC 4180 . O FIELDTERMINATOR caractere (por exemplo, uma vírgula) pode ser colocado dentro das aspas do campo e será considerado como um caractere regular na célula encapsulada com os FIELDQUOTE caracteres.
Por exemplo, para ler o conjunto de dados CSV de exemplo anterior de Nova York, use FIELDQUOTE = '"'. Os valores do campo de endereço serão mantidos como um único valor, não divididos em vários valores pelas vírgulas dentro dos caracteres (aspas " ).
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDQUOTE = '"'
);
VERSÃO_DO_ANALISADOR
Aplica-se a: Apenas Fabric Data Warehouse
Especifica a versão do analisador a ser usada ao ler arquivos. As versões do analisador com CSV suporte no momento são 1.0 e 2.0:
- PARSER_VERSION = '1,0'
- PARSER_VERSION = '2.0'
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='CSV',
PARSER_VERSION = '2.0'
)
A versão 2.0 do parser CSV é a implementação padrão otimizada para desempenho, mas não suporta todas as opções e codificações legadas disponíveis na versão 1.0. Ao usar o OPENROWSET, o Fabric Data Warehouse automaticamente volta para a versão 1.0 se você usar as opções suportadas apenas nessa versão, mesmo quando a versão não está explicitamente especificada. Em alguns casos, pode ser necessário especificar explicitamente a versão 1.0 para resolver erros causados por recursos não suportados relatados pela versão 2.0 do analisador.
Especificações do analisador CSV versão 1.0:
- As opções a seguir não têm suporte: HEADER_ROW.
- Terminadores padrão são
\r\n,\ne\r. - Se você especificar
\n(newline) como o terminador de linha, ele será automaticamente prefixado com um\rcaractere (retorno de carro), o que resultará em um terminador de linha de\r\n.
Especificações do analisador CSV versão 2.0:
- não há suporte para todos os tipos de dados.
- O tamanho máximo da coluna de caracteres é 8.000.
- O limite de tamanho máximo de linha é de 8 MB.
- Não há suporte para as seguintes opções:
DATA_COMPRESSION. - A cadeia de caracteres vazia entre aspas ("") é interpretada como cadeia de caracteres vazia.
- DATEFORMAT SET A opção não é aceite.
- Formato com suporte para o tipo de dados de data :
YYYY-MM-DD - Formato com suporte para o tipo de dados de tempo :
HH:MM:SS[.fractional seconds] - Formato com suporte para o tipo de dados datetime2 :
YYYY-MM-DD HH:MM:SS[.fractional seconds] - Terminadores padrão são
\r\ne\n.
ESCAPE_CHAR
Especifica o caractere no arquivo que é usado para escapar de si mesmo e todos os valores delimitadores no arquivo, por exemplo:
Place,Address,Icon
Empire State Building,20 W 34th St\, New York\, NY 10118,\\icons\\sol.png
Statue of Liberty,Liberty Island\, New York\, NY 10004,\\icons\\sol.png
Se o caractere de escape for seguido por um valor diferente dele mesmo ou por um dos valores delimitadores, o caractere de escape será removido durante a leitura do valor.
O ESCAPECHAR parâmetro é aplicado independentemente de o FIELDQUOTE parâmetro estar ou não habilitado. Ele não será usado para fazer escape do caractere de aspas. O caractere de aspas deve ter escape com outro caractere de aspas. O caractere de aspas só poderá aparecer dentro do valor da coluna se o valor for encapsulado com aspas de caracteres.
No exemplo a seguir, vírgula (,) e barra invertida (\) são escapadas e representadas como \, e \\:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ESCAPECHAR = '\'
);
HEADER_ROW
Especifica se um arquivo CSV contém uma linha de cabeçalho que não deve ser retornada com outras linhas de dados. Um exemplo de arquivo CSV com um cabeçalho é mostrado no exemplo a seguir:
Place,Latitude,Longitude,Address,Area,State,Zipcode
Empire State Building,40.748817,-73.985428,20 W 34th St,New York,NY,10118
Statue of Liberty,40.689247,-74.044502,Liberty Island,New York,NY,10004
O padrão é FALSE. Suportado no PARSER_VERSION='2.0' Fabric Data Warehouse. Se TRUE, os nomes das colunas serão lidos da primeira linha de acordo com o FIRSTROW argumento. Se TRUE e o esquema for especificado usando WITH, a associação de nomes de coluna será feita pelo nome da coluna, não por posições ordinais.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
HEADER_ROW = TRUE
);
Opções de tratamento de erros
ERRORFILE
Especifica o arquivo usado para coletar linhas com erros de formatação e que não podem ser convertidas em um conjunto de linhas OLE DB. Essas linhas são copiadas do arquivo de dados para esse arquivo de erro "no estado em que se encontram".
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<error-file-path>'
);
O arquivo de erro é criado no início da execução do comando. Um erro será gerado se o arquivo já existir. Além disso, um arquivo de controle com a extensão .ERROR.txt é criado. Esse arquivo faz referência a cada linha do arquivo de erro e fornece um diagnóstico dos erros. Depois que os erros forem corrigidos, os dados poderão ser carregados.
Começando pelo SQL Server 2017 (14.x), o error_file_path pode estar no Armazenamento de Blobs do Azure.
ERRORFILE_DATA_SOURCE
A partir do SQL Server 2017 (14.x), esse argumento é uma fonte de dados externa nomeada que aponta para o local do arquivo de erro que conterá erros encontrados durante a importação.
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<root-error-file-path>')
GO
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<relative-error-file-path>',
ERRORFILE_DATA_SOURCE = 'root'
);
Para obter mais informações, consulte CREATE EXTERNAL DATA SOURCE (Transact-SQL).
MAXERRORS
Especifica o número máximo de erros de sintaxe ou linhas não conformes, conforme definido no arquivo de formato, que pode ocorrer antes OPENROWSET de lançar uma exceção. Até MAXERRORS ser atingido, OPENROWSET ignora cada linha inválida, não a carrega e conta a linha inválida como um erro.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
MAXERRORS = 0
);
O padrão para maximum_errors é 10.
Note
MAX_ERRORS não se aplica a CHECK restrições ou à conversão de dinheiro e tipos de bigint data.
Opções de processamento de dados
PRIMEIRA FILEIRA
Especifica o número da primeira linha a carregar. O padrão é 1. Esse valor indica a primeira linha no arquivo de dados especificado. Os números de linhas são determinados pela contagem dos terminadores de linha.
FIRSTROW é baseado em 1.
ÚLTIMA LINHA
Especifica o número da última linha a ser carregada. O padrão é 0. Esse valor indica a última linha no arquivo de dados especificado.
ROWS_PER_BATCH
Especifica o número aproximado de linhas de dados no arquivo de dados. Esse valor é uma estimativa e deve ser uma aproximação (dentro de uma ordem de magnitude) do número real de linhas. Por padrão, ROWS_PER_BATCH é estimado com base nas características do arquivo (número de arquivos, tamanhos de arquivo, tamanho dos tipos de dados retornados). Especificar ROWS_PER_BATCH = 0 é o mesmo que omitir ROWS_PER_BATCH. Por exemplo:
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWS_PER_BATCH = 100000
);
ORDER ( { coluna [ ASC | DESC ] } [ ,... n ] [ ÚNICO ] )
Uma dica opcional que especifica como os dados são classificados no arquivo de dados. Por padrão, a operação em massa presume que o arquivo de dados não está ordenado. O desempenho pode melhorar se o otimizador de consulta puder explorar a ordem para gerar um plano de consulta mais eficiente. A lista a seguir fornece exemplos de quando a especificação de uma classificação pode ser benéfica:
- Ao inserir linhas em uma tabela que tem um índice clusterizado, na qual os dados dos conjuntos de linhas são classificados na chave do índice clusterizado.
- Ao unir o conjunto de linhas com outra tabela, cujas colunas de classificação e de união correspondam.
- Ao agregar os dados dos conjuntos de linhas pelas colunas de classificação.
- Usando o conjunto de linhas como uma tabela de origem na
FROMcláusula de uma consulta, onde as colunas de classificação e junção correspondem.
UNIQUE
Especifica que o arquivo de dados não tem entradas duplicadas.
Se as linhas reais no arquivo de dados não estiverem ordenadas de acordo com a ordem que você especificou, ou se você especificar a UNIQUE dica e as chaves duplicadas estiverem presentes, um erro é retornado.
Aliases de coluna são necessários quando você usa ORDER. A lista de alias da coluna deve referenciar a tabela derivada acessada pela BULK cláusula. Os nomes das colunas que você especifica na ORDER cláusula referem-se a esta lista de alias. Você não pode especificar colunas de tipos de valor grande (varchar(max), nvarchar(max), varbinary(max) e xml) e tipos de objetos grandes (LOB) (texto, ntext e image).
Opções de conteúdo
SINGLE_BLOB
Retorna o conteúdo de data_file como um conjunto de linhas de uma única coluna do tipo varbinary(max).
Important
Importe dados XML apenas usando a SINGLE_BLOB opção, em vez de SINGLE_CLOB e SINGLE_NCLOB, porque suporta apenas SINGLE_BLOB todas as conversões de codificação do Windows.
SINGLE_CLOB
Lê data_file como ASCII e retorna o conteúdo como um conjunto de linhas únicas e coluna única do tipo varchar(max), usando a colação do banco de dados atual.
SINGLE_NCLOB
Lê data_file como Unicode e retorna o conteúdo como um conjunto de linhas de uma única linha e coluna única do tipo nvarchar(max), usando a colação do banco de dados atual.
SELECT * FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_NCLOB
) AS Document;
COM esquema
O esquema WITH especifica as colunas que definem o conjunto de resultados da função OPENROWSET. Inclui definições de colunas para cada coluna que OPENROWSET retorna e delineia as regras de mapeamento que vinculam as colunas do arquivo subjacente às colunas do conjunto de resultados.
No exemplo a seguir:
- A
country_regioncoluna tem o tipo varchar(50) e faz referência à coluna subjacente com o mesmo nome. - A
datecoluna faz referência a uma coluna CSV, Parquet ou propriedade JSONL com um nome físico diferente. - A
casescoluna faz referência à terceira coluna do arquivo. - A
fatal_casescoluna faz referência a uma propriedade Parquet aninhada ou subobjeto JSONL.
SELECT *
FROM OPENROWSET(<...>)
WITH (
country_region varchar(50), --> country_region column has varchar(50) type and referencing the underlying column with the same name
[date] DATE '$.updated', --> date is referencing a CSV/Parquet column or JSONL property with a different physical name
cases INT 3, --> cases is referencing third column in the file
fatal_cases INT '$.statistics.deaths' --> fatal_cases is referencing a nested Parquet property or JSONL sub-object
);
<Column_name>
O nome da coluna que OPENROWSET retorna no conjunto de linhas do resultado.
OPENROWSET lê dados dessa coluna da coluna de arquivo subjacente com o mesmo nome, a menos que você a sobrescrita usando <column_path> ou <column_ordinal>. O nome da coluna deve seguir as regras para identificadores de nome de coluna.
<Column_type>
O tipo T-SQL da coluna no conjunto de resultados.
OPENROWSET converte valores do arquivo subjacente para esse tipo quando retorna os resultados. Para obter mais informações, consulte Os tipos de dados no Fabric Warehouse.
<column_path>
Um caminho separado por ponto (por exemplo, $.description.location.lat) usado para referenciar campos aninhados em tipos complexos como Parquet.
<column_ordinal>
Um número que representa o índice físico da coluna que corresponde à coluna da WITH cláusula.
Permissions
Para usar OPENROWSET com fontes de dados externas, você precisa das seguintes permissões:
-
ADMINISTER DATABASE BULK OPERATIONSou ADMINISTER BULK OPERATIONS
O exemplo T-SQL a seguir concede ADMINISTER DATABASE BULK OPERATIONS a uma entidade de segurança.
GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];
Se a conta de armazenamento de destino for privada, você também deve atribuir a filiação ao papel de Leitor de Dados de Blob de Armazenamento (ou superior) ao principal no nível do contêiner ou da conta de armazenamento.
Remarks
Uma
FROMcláusula que você usa comSELECTpode chamarOPENROWSET(BULK...)em vez de um nome de tabela, com funcionalidade completaSELECT.OPENROWSETcom a opçãoBULKexige um nome de correlação, também conhecido como variável ou alias de intervalo, na cláusulaFROM. Se você não adicionar oAS <table_alias>, recebe a mensagem de erro 491: "Um nome de correlação deve ser especificado para o conjunto de linhas em massa na cláusula from."Você pode especificar aliases de coluna. Se você não especificar uma lista de alias de coluna, o arquivo de formato deve ter nomes de colunas. Especificar aliases de colunas sobrepõe os nomes das colunas no arquivo de formato. Por exemplo:
FROM OPENROWSET(BULK...) AS table_aliasFROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
Uma instrução
SELECT...FROM OPENROWSET(BULK...)consulta diretamente os dados em um arquivo, sem importá-los para uma tabela.Uma instrução pode listar aliases de colunas em massa usando um arquivo de formato para especificar nomes de
SELECT...FROM OPENROWSET(BULK...)colunas e tipos de dados.
- Ao usar
OPENROWSET(BULK...)como tabela de origem em umaINSERTinstrução ou,MERGEvocê importa dados em massa de um arquivo de dados para uma tabela. Para obter mais informações, consulte Use BULK INSERT ou OPENROWSET(BULK...) para importar dados para SQL Server. - Quando você usa a
OPENROWSET BULKopção com umaINSERTinstrução, aBULKcláusula suporta dicas de tabela. Além de dicas de tabela normais, comoTABLOCK, a cláusulaBULKpode aceitar as seguintes dicas de tabela especializadas:IGNORE_CONSTRAINTS(ignora somente as restriçõesCHECKeFOREIGN KEY),IGNORE_TRIGGERS,KEEPDEFAULTSeKEEPIDENTITY. Para obter mais informações, confira Dicas de tabela (Transact-SQL). - Para obter informações sobre como usar instruções
INSERT...SELECT * FROM OPENROWSET(BULK...), confira Importação e exportação em massa de dados (SQL Server). Para informações sobre quando as operações de inserção de linhas realizadas pela importação em massa são registradas no registro de transações, veja Pré-requisitos para um registro mínimo na importação em massa. - Quando você usa
OPENROWSET (BULK ...)para importar dados com o modelo de recuperação completo, não otimiza o registro.
Note
Quando você usa OPENROWSETo , é importante entender como o SQL Server lida com a representação. Para informações sobre considerações de segurança, veja Use BULK INSERT ou OPENROWSET(BULK...) para importar dados para o SQL Server.
Em Microsoft Fabric Data Warehouse, a tabela a seguir resume as funcionalidades suportadas:
| Feature | Supported | Não disponível |
|---|---|---|
| Formatos de arquivo | Parquet, CSV, JSONL | Delta, Azure Cosmos DB, JSON, bancos de dados relacionais |
| Authentication | Entra ID/SPN passthrough, armazenamento público | SAS/SAK, SPN, Acesso gerenciado |
| Storage | Armazenamento de Blobs do Azure, Azure Data Lake Storage, OneLake no Microsoft Fabric | |
| Options | Somente URI completo/absoluto em OPENROWSET |
Caminho de URI relativo em OPENROWSET, DATA_SOURCE |
| Partitioning | Você pode usar a função filepath() em uma consulta. |
Importação em massa de dados SQLCHAR, SQLNCHAR ou SQLBINARY
OPENROWSET(BULK...) assume que, se você não especificar o contrário, o comprimento máximo de SQLCHAR, SQLNCHAR, ou SQLBINARY dados não ultrapassa 8.000 bytes. Se você estiver importando dados em um campo de dados LOB que contenha quaisquer objetos varchar(max), nvarchar(max) ou varbinary(max) que excedam 8.000 bytes, você deve usar um arquivo em formato XML que defina o comprimento máximo do campo de dados. Para especificar o comprimento máximo, edite o arquivo de formato e declare o MAX_LENGTH atributo.
Note
Um arquivo de formato gerado automaticamente não especifica o comprimento ou o comprimento máximo de um campo LOB. No entanto, você pode editar um arquivo de formato e especificar o comprimento ou o comprimento máximo manualmente.
Exportar ou importar documentos SQLXML em massa
Para exportar ou importar dados SQLXML em massa, use um dos tipos de dados a seguir em seu arquivo de formato.
| Tipo de dados | Effect |
|---|---|
SQLCHAR ou SQLVARYCHAR |
Os dados são enviados na página de código do cliente ou na página de código implícita na ordenação. |
SQLNCHAR ou SQLNVARCHAR |
Os dados são enviados como Unicode. |
SQLBINARY ou SQLVARYBIN |
Os dados são enviados sem qualquer conversão. |
Funções de metadados de arquivo
Às vezes, você pode precisar saber qual fonte de arquivo ou pasta correlaciona com uma linha específica no conjunto de resultados.
Você pode usar funções filepath e filename retornar nomes de arquivos e o caminho no conjunto de resultados. Ou você pode usá-los para filtrar dados com base no nome do arquivo e no caminho da pasta. Nas seções seguintes, você encontra descrições curtas junto com amostras.
Função de nome de arquivo
Essa função retorna o nome do arquivo da linha.
O tipo de dado de retorno é nvarchar(1024). Para desempenho ideal, sempre faça cast do resultado da função de nome de arquivo para um tipo de dado apropriado. Se você usar um tipo de dado de personagem, certifique-se de usar um comprimento apropriado.
O exemplo a seguir lê os arquivos de dados do NYC Yellow Taxi dos últimos três meses de 2017 e retorna o número de viagens por arquivo. A OPENROWSET parte da consulta especifica quais arquivos ler.
SELECT
nyc.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM
OPENROWSET(
BULK 'parquet/taxi/year=2017/month=9/*.parquet',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT='PARQUET'
) nyc
GROUP BY nyc.filename();
O exemplo a seguir mostra como usar filename() a WHERE cláusula para filtrar os arquivos para serem lidos. Ele acessa toda a pasta na OPENROWSET parte da consulta e filtra os arquivos da WHERE cláusula.
Seus resultados são os mesmos do exemplo anterior.
SELECT
r.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2)
WITH (C1 varchar(200) ) AS [r]
WHERE
r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
r.filename()
ORDER BY
[filename];
Função de caminho de arquivo
Essa função retorna um caminho completo ou parte de um caminho:
- Quando você chama a
filepathfunção sem um parâmetro, ela retorna o caminho completo do arquivo de onde uma linha se origina. - Quando você chama a
filepathfunção com um parâmetro, ela retorna a parte do caminho que corresponde ao curinga na posição especificada no parâmetro. Por exemplo, um valor de parâmetro 1 retorna a parte do caminho que corresponde ao primeiro coringa.
O tipo de retorno da filepath função é nvarchar(1024). Para desempenho ideal, sempre faça cast do resultado da filepath função para o tipo de dado apropriado. Se você usar um tipo de dado de personagem, certifique-se de usar um comprimento apropriado.
A amostra a seguir lê os arquivos de dados do Táxi Amarelo de Nova York para os últimos três meses de 2017. Ele retorna o número de viagens por caminho de arquivo. A OPENROWSET parte da consulta especifica quais arquivos ler.
SELECT
r.filepath() AS filepath
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
GROUP BY
r.filepath()
ORDER BY
filepath;
O exemplo a seguir mostra como usar filepath() a WHERE cláusula para filtrar os arquivos para serem lidos.
Você pode usar curingas na OPENROWSET parte da consulta e filtrar os arquivos na WHERE cláusula. Seus resultados serão os mesmos do exemplo anterior.
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_*-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
Examples
Esta seção fornece exemplos gerais para demonstrar como usar OPENROWSET BULK a sintaxe.
A. Use OPENROWSET para BULK INSERT arquivar dados em uma coluna varbinary(max)
Aplica-se a: Somente o SQL Server.
O exemplo a Text1.txt seguir cria uma tabela pequena para fins de demonstração e insere dados de arquivo de um arquivo nomeado C: localizado no diretório raiz em uma coluna varbinary(max).
CREATE TABLE myTable (
FileName NVARCHAR(60),
FileType NVARCHAR(60),
Document VARBINARY(MAX)
);
GO
INSERT INTO myTable (
FileName,
FileType,
Document
)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
*
FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_BLOB
) AS Document;
GO
B. Usar o provedor OPENROWSET BULK com um arquivo de formato para recuperar linhas de um arquivo de texto
Aplica-se a: Somente o SQL Server.
O exemplo a seguir usa um arquivo de formato para recuperar linhas de um arquivo de texto delimitado por tabulação, values.txt, que contém os seguintes dados:
1 Data Item 1
2 Data Item 2
3 Data Item 3
O arquivo de formato values.fmt descreve as colunas em values.txt:
9.0
2
1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN
2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
Esta consulta recupera esses dados:
SELECT a.* FROM OPENROWSET(
BULK 'C:\test\values.txt',
FORMATFILE = 'C:\test\values.fmt'
) AS a;
C. Especificar um arquivo de formato e uma página de código
Aplica-se a: Somente o SQL Server.
O exemplo a seguir mostra como usar as opções de arquivo de formato e página de código ao mesmo tempo.
INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
BULK N'D:\data.csv',
FORMATFILE = 'D:\format_no_collation.txt',
CODEPAGE = '65001'
) AS a;
D. Acessar dados de um arquivo CSV com um arquivo de formato
Aplica-se a: Somente o SQL Server 2017 (14.x) e versões posteriores.
SELECT * FROM OPENROWSET(
BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW = 2,
FORMAT = 'CSV'
) AS cars;
E. Acessar dados de um arquivo CSV sem um arquivo de formato
Aplica-se a: Somente o SQL Server.
SELECT * FROM OPENROWSET(
BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14\MSSQL\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
SELECT *
FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
'SELECT * FROM E:\Tlog\TerritoryData.csv'
);
Important
O driver ODBC deve ser de 64 bits. Abra a guia Drivers do aplicativo Conectar-se a uma Fonte de Dados ODBC (Assistente de Importação e Exportação do SQL Server) no Windows para verificar isso. Existe um 32 bits Microsoft Text Driver (*.txt, *.csv) que não funciona com uma versão de 64 bits do sqlservr.exe.
F. Acessar dados de um arquivo armazenado no Armazenamento de Blobs do Azure
Aplica-se a: Somente o SQL Server 2017 (14.x) e versões posteriores.
No SQL Server 2017 (14.x) e versões posteriores, o exemplo a seguir usa uma fonte de dados externa que aponta para um contêiner em uma conta de armazenamento do Azure e uma credencial no escopo do banco de dados criada para uma assinatura de acesso compartilhado.
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoices',
SINGLE_CLOB
) AS DataFile;
Para obter exemplos completos OPENROWSET , incluindo a configuração da credencial e da fonte de dados externa, consulte Exemplos de acesso em massa a dados no Armazenamento de Blobs do Azure.
G. Importar para uma tabela de um arquivo armazenado no Armazenamento de Blobs do Azure
O exemplo a seguir mostra como usar o OPENROWSET comando para carregar dados de um arquivo CSV em um local de armazenamento Azure Blob onde você criou a chave SAS. Você configura o local de armazenamento do Azure Blob como uma fonte de dados externa. Esse processo requer uma credencial com escopo de banco de dados que utilize uma assinatura de acesso compartilhado (SAS) criptografada por meio de uma chave mestra no banco de dados do usuário.
-- Optional: a MASTER KEY is not required if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
-- Optional: a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
-- Make sure that you don't have a leading ? in the SAS token, and that you
-- have at least read permission on the object that should be loaded srt=o&sp=r,
-- and that expiration period is valid (all dates are in UTC time)
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/curriculum',
-- CREDENTIAL is not required if a blob is configured for public (anonymous) access!
CREDENTIAL = MyAzureBlobStorageCredential
);
INSERT INTO achievements
WITH (TABLOCK) (
id,
description
)
SELECT * FROM OPENROWSET(
BULK 'csv/achievements.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FORMATFILE = 'csv/achievements-c.xml',
FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage'
) AS DataFile;
H. Usar uma identidade gerenciada para uma fonte externa
Aplica-se a: Instância Gerenciada de SQL do Azure e Banco de Dados SQL do Azure
O exemplo a seguir cria uma credencial usando uma identidade gerenciada, cria uma fonte externa e então carrega dados de um CSV hospedado na fonte externa.
Primeiro, crie a credencial e especifique o armazenamento de blobs como a fonte externa:
CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';
CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
CREDENTIAL = sampletestcred
);
Em seguida, carregue dados do arquivo CSV hospedado no armazenamento de blobs:
SELECT * FROM OPENROWSET(
BULK 'Test - Copy.csv',
DATA_SOURCE = 'SampleSource',
SINGLE_CLOB
) as test;
I. Use OPENROWSET para acessar vários arquivos Parquet usando o armazenamento de objetos compatível com S3
Aplica-se a : SQL Server 2022 (16.x) e versões posteriores.
O exemplo a seguir acessa vários arquivos Parquet de diferentes locais, todos armazenados em armazenamento de objetos compatíveis com S3:
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = 'contosoadmin:contosopwd';
GO
CREATE EXTERNAL DATA SOURCE s3_eds
WITH
(
LOCATION = 's3://10.199.40.235:9000/movies',
CREDENTIAL = s3_dsc
);
GO
SELECT * FROM OPENROWSET(
BULK (
'/decades/1950s/*.parquet',
'/decades/1960s/*.parquet',
'/decades/1970s/*.parquet'
),
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_eds'
) AS data;
J. Usar OPENROWSET para acessar várias tabelas Delta do Azure Data Lake Gen2
Aplica-se a : SQL Server 2022 (16.x) e versões posteriores.
Neste exemplo, o contêiner da tabela de dados é chamado Contoso e está localizado em uma conta de armazenamento do Azure Data Lake Gen2.
CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';
CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = delta_storage_dsc
);
SELECT *
FROM OPENROWSET(
BULK '/Contoso',
FORMAT = 'DELTA',
DATA_SOURCE = 'Delta_ED'
) AS result;
K. Usar OPENROWSET para consultar o conjunto de dados público-anônimo
O exemplo a seguir usa o conjunto de dados aberto de registros de corrida de táxi amarelo de NYC disponíveis publicamente.
Crie a fonte de dados primeiro:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
Consultar todos os arquivos com .parquet extensão em pastas que correspondem ao padrão de nome:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
A. Ler um arquivo parquet do Armazenamento de Blobs do Azure
No exemplo a seguir, você pode ver como ler 100 linhas de um arquivo Parquet:
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
B. Ler um arquivo CSV personalizado
No exemplo a seguir, você pode ver como ler linhas de um arquivo CSV com uma linha de cabeçalho e caracteres exterminadores explicitamente especificados que separam linhas e campos:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv',
HEADER_ROW = TRUE,
ROW_TERMINATOR = '\n',
FIELD_TERMINATOR = ',');
C. Especificar o esquema de coluna de arquivo durante a leitura de um arquivo
No exemplo a seguir, você especifica o esquema da linha que a OPENROWSET função retorna:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet')
WITH (
updated DATE
,confirmed INT
,deaths INT
,iso2 VARCHAR(8000)
,iso3 VARCHAR(8000)
);
D. Ler conjuntos de dados particionados
No exemplo a seguir, você usa a filepath() função para ler as partes do URI a partir do caminho do arquivo correspondente:
SELECT TOP 10
files.filepath(2) AS area
, files.*
FROM OPENROWSET(
BULK 'https://<storage account>.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
HEADER_ROW = TRUE)
AS files
WHERE files.filepath(1) = '2009';
E. Especificar o esquema de coluna de arquivo ao ler um arquivo JSONL
No exemplo a seguir, você pode ver como especificar explicitamente o esquema de linha que será retornado como resultado da OPENROWSET função:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.dfs.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl')
WITH (
country_region varchar(50),
date DATE '$.updated',
cases INT '$.confirmed',
fatal_cases INT '$.deaths'
);
Se um nome de coluna não corresponder ao nome físico de uma coluna nas propriedades se o arquivo JSONL for especificado, você poderá especificar o nome físico no caminho JSON após a definição de tipo. Você pode usar várias propriedades. Por exemplo, $.location.latitude para fazer referência às propriedades aninhadas em tipos complexos parquet ou sub-objetos JSON.
Mais exemplos
A. Use o OPENROWSET para ler um arquivo CSV de um Fabric Lakehouse
Neste exemplo, você lê OPENROWSET um arquivo CSV em um Fabric Lakehouse. O arquivo recebe um nome customer.csv e é armazenado na Files/Contoso/ pasta. Como você não fornece uma fonte de dados ou credenciais com escopo de banco de dados, o banco de dados Fabric SQL usa seu contexto Entra ID para autenticar.
SELECT * FROM OPENROWSET
( BULK ' abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/customer.csv'
, FORMAT = 'CSV'
, FIRST_ROW = 2
) WITH
(
CustomerKey INT,
GeoAreaKey INT,
StartDT DATETIME2,
EndDT DATETIME2,
Continent NVARCHAR(50),
Gender NVARCHAR(10),
Title NVARCHAR(10),
GivenName NVARCHAR(100),
MiddleInitial VARCHAR(2),
Surname NVARCHAR(100),
StreetAddress NVARCHAR(200),
City NVARCHAR(100),
State NVARCHAR(100),
StateFull NVARCHAR(100),
ZipCode NVARCHAR(20),
Country_Region NCHAR(2),
CountryFull NVARCHAR(100),
Birthday DATETIME2,
Age INT,
Occupation NVARCHAR(100),
Company NVARCHAR(100),
Vehicle NVARCHAR(100),
Latitude DECIMAL(10,6),
Longitude DECIMAL(10,6) ) AS DATA
B. Use o OPENROWSET para ler um arquivo de um Fabric Lakehouse e inserir dados em uma nova tabela
Neste exemplo, você utiliza OPENROWSET para ler dados de um arquivo Parquet chamado store.parquet. Depois, você adiciona INSERT os dados a uma nova tabela chamada Store. O arquivo Parquet está localizado em uma casa de lago Fabric. Como você não fornece uma fonte de dados ou credenciais com escopo de banco de dados, o banco de dados SQL no Fabric usa seu contexto do Entra ID para autenticar.
SELECT *
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS dataset;
-- insert into new table
SELECT *
INTO Store
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS STORE;
Mais exemplos
Para obter mais exemplos que mostram o uso OPENROWSET(BULK...)do , consulte os seguintes artigos:
- Importação e exportação em massa de dados (SQL Server)
- Exemplos de importação e exportação em massa de documentos XML (SQL Server)
- Manter valores de identidade ao importar dados em massa (SQL Server)
- Manter valores nulos ou padrão durante a importação em massa (SQL Server)
- Usar um arquivo de formato para importação em massa de dados (SQL Server)
- Usar o formato de caractere para importar ou exportar dados (SQL Server)
- Usar um arquivo de formato para ignorar uma coluna de tabela (SQL Server)
- Usar um arquivo de formato para ignorar um campo de dados (SQL Server)
- Usar um arquivo de formato para mapear colunas de tabela para campos de arquivo de dados (SQL Server)
- Consultar fontes de dados usando OPENROWSET em Instâncias Gerenciadas de SQL do Azure
- Especificar terminadores de linha e de campo (SQL Server)