Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: SQL Server 2022 (16.x)
O SQL Server 2022 (16.x) consegue virtualizar dados a partir de ficheiros Parquet. Esse processo permite que os dados permaneçam em seu local original, mas podem ser consultados a partir de uma instância do SQL Server com comandos T-SQL, como qualquer outra tabela. Esse recurso usa conectores PolyBase e minimiza a necessidade de processos de extração, transformação e carregamento (ETL).
No exemplo a seguir, virtualizaremos um arquivo parquet armazenado no armazenamento de objetos compatível com o S3.
Para obter mais informações sobre virtualização de dados, consulte Introdução à virtualização de dados com o PolyBase.
Pré-requisitos
Para usar os recursos de integração de armazenamento de objetos compatíveis com o S3, você precisa das seguintes ferramentas e recursos:
- Instale o recurso PolyBase para SQL Server.
- Instale SQL Server Management Studio (SSMS).
- Armazenamento compatível com S3.
- Um bucket do S3 foi criado. Os buckets não podem ser criados ou configurados a partir do SQL Server.
- Um usuário (
Access Key ID) e o segredo (Secret Key ID) e esse usuário é conhecido por você. Você precisará de ambos para autenticar no endpoint de armazenamento de objetos do S3. - Permissão ListBucket no usuário do S3.
- Permissão ReadOnly no usuário do S3.
- O TLS deve ter sido configurado. Presume-se que todas as conexões serão transmitidas com segurança por HTTPS e não HTTP. O ponto de extremidade será validado por um certificado instalado no host do sistema operacional SQL Server.
Permissão
Para que o utilizador proxy leia o conteúdo de um bucket do S3, ele precisa ter permissão para executar as seguintes ações no endpoint do S3:
- ListBucket;
- Somente leitura;
Pré-configuração
- Habilite o PolyBase em
sp_configure:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
- Antes de criar uma credencial com escopo de banco de dados, o banco de dados de usuário deve ter uma chave mestra para proteger a credencial. Para obter mais informações, consulte CREATE MASTER KEY.
Criar uma credencial com escopo de banco de dados
O seguinte script de exemplo cria uma credencial de escopo de banco de dados s3-dc no banco de dados do utilizador de origem no SQL Server. Para obter mais informações, consulte CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
IF NOT EXISTS(SELECT * FROM sys.credentials WHERE name = 's3_dc')
BEGIN
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>' ;
END
Verifique a nova credencial com âmbito de base de dados com sys.database_scoped_credentials (Transact-SQL):
SELECT * FROM sys.database_scoped_credentials;
Criar uma fonte de dados externa
O script de exemplo a seguir cria uma fonte de dados externa s3_ds no banco de dados do usuário de origem no SQL Server. A fonte de dados externa faz referência à credencial de escopo do banco de dados s3_dc. Para obter mais informações, consulte CREATE EXTERNAL DATA SOURCE.
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
Verifique a nova fonte de dados externa com sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
URLs hospedadas virtualmente
Alguns sistemas de armazenamento compatíveis com o S3 (como o Amazon Web Services) utilizam URLs no estilo virtual_hosted para implementar a estrutura de pastas no bucket do S3. Adicione o seguinte CONNECTION_OPTIONS para permitir a criação de tabelas externas que apontem para locais de pastas no bucket S3, por exemplo, CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.
Sem essa configuração CONNECTION_OPTIONS, ao consultar tabelas externas apontando para uma pasta, você pode observar o seguinte erro:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
SELECT a partir de um ficheiro parquet usando OPENROWSET
O exemplo a seguir demonstra o uso do T-SQL para consultar um arquivo parquet armazenado no armazenamento de objetos compatível com o S3 por meio da consulta OPENROWSET. Para obter mais informações, consulte OPENROWSET (Transact-SQL).
Como este é um arquivo de parquet, duas coisas importantes estão acontecendo automaticamente:
- O SQL Server lê o esquema do próprio arquivo, portanto, não há necessidade de definir a tabela, as colunas ou os tipos de dados.
- Não há necessidade de declarar o tipo de compactação para o arquivo a ser lido.
SELECT *
FROM OPENROWSET
( BULK '/<bucket>/<parquet_folder>'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 's3_ds'
) AS [cc];
Consultar o armazenamento de objetos compatíveis com o S3 através de uma tabela externa
O exemplo a seguir demonstra o uso do T-SQL para consultar um arquivo parquet armazenado no armazenamento de objetos compatível com o S3 por meio da consulta de tabela externa. O exemplo usa um caminho relativo dentro da fonte de dados externa.
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
GO
CREATE EXTERNAL TABLE Region (
r_regionkey BIGINT,
r_name CHAR(25),
r_comment VARCHAR(152) )
WITH (LOCATION = '/region/', DATA_SOURCE = 's3_ds',
FILE_FORMAT = ParquetFileFormat);
GO
SELECT * FROM [Region];
Para obter mais informações, consulte:
Limitações
- As consultas do SQL Server em uma tabela externa apoiada por armazenamento compatível com o S3 são limitadas a 1.000 objetos por prefixo. Isso ocorre porque a listagem de objetos compatíveis com o S3 é limitada a 1.000 chaves de objeto por prefixo.
- Para armazenamento de objetos compatível com o S3, os clientes não têm permissão para criar seu ID de chave de acesso com um
:caractere. - O comprimento total do URL é limitado a 259 caracteres. Isso significa que
s3://<hostname>/<objectkey>não deve exceder 259 caracteres. As3://conta para este limite, portanto, o comprimento do caminho não pode exceder 259-5 = 254 caracteres. - O nome da credencial SQL é limitado por 128 caracteres no formato UTF-16.
- O nome da credencial criada deve conter o nome do bucket, a menos que essa credencial seja para uma nova fonte de dados externa.
- O ID da Chave de Acesso e o ID da Chave Secreta devem conter apenas valores alfanuméricos.
Próximos passos
- Para saber mais sobre o PolyBase, consulte Visão geral do SQL Server PolyBase
- Configurar o PolyBase para acessar dados externos em de armazenamento de objetos compatíveis com o S3