Exercício - Use o PolyBase para consultar um arquivo Parquet
Neste exercício você:
- Instale e habilite o PolyBase.
- Crie um banco de dados.
- Crie uma chave mestra de banco de dados para proteger a credencial de âmbito do banco de dados.
- Crie uma credencial com escopo de banco de dados para acessar a fonte de dados.
- Crie a fonte de dados.
- Consultar e manipular dados armazenados na fonte de dados pública.
- Crie um formato de arquivo externo e uma tabela externa.
Instalar o PolyBase
Você pode instalar o PolyBase com o executável de instalação do SQL Server durante a instalação inicial ou adicioná-lo como um recurso posteriormente. Na página Seleção de Funcionalidades do SQL Server setup.exe, selecione Serviço de Consulta PolyBase para Dados Externos.
Os serviços PolyBase exigem que as portas de firewall estejam habilitadas para se conectar a fontes de dados externas. Por padrão, o PolyBase usa portas que variam de 16450 a 16460.
A instalação do PolyBase instala dois serviços PolyBase, SQL Server PolyBase Engine e SQL Server PolyBase Data Movement. Para obter informações completas e pré-requisitos para a instalação do PolyBase, consulte:
- Instalar o PolyBase no Windows
- Instalar o PolyBase no Linux
Ativar o PolyBase
Depois de instalar o serviço, conecte-se à sua instância do SQL Server 2025 no SQL Server Management Studio (SSMS) e execute o seguinte comando para habilitar o PolyBase.
EXEC SP_CONFIGURE @CONFIGNAME = N'POLYBASE ENABLED', @CONFIGVALUE = 1;
RECONFIGURE;
Observação
Neste exercício, você consulta arquivos Apache Parquet usando a API REST do PolyBase, portanto, não precisa habilitar ou configurar os serviços SQL Server PolyBase Data Movement ou SQL Server PolyBase Engine .
Criar uma base de dados
Execute o seguinte comando no SSMS para criar um banco de dados para este exercício chamado Demo1. Se o banco de dados já tiver sido criado, o script elimina-o e recria-o.
USE MASTER;
IF EXISTS (SELECT * FROM sys.databases WHERE [name] = N'Demo1')
BEGIN
ALTER DATABASE Demo1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE IF EXISTS Demo1
END;
CREATE DATABASE Demo1;
USE Demo1;
Criar a chave mestra do banco de dados
Você deve criar uma chave mestra de banco de dados para garantir a segurança das credenciais com escopo no banco de dados. O exemplo a seguir cria a chave com uma senha gerada aleatoriamente e um backup é necessário.
DECLARE @randomWord VARCHAR(64) = NEWID();
DECLARE @createMasterKey NVARCHAR(500) = N'
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE name = ''##MS_DatabaseMasterKey##'')
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ' + QUOTENAME(@randomWord, '''')
EXECUTE sp_executesql @createMasterKey;
SELECT * FROM sys.symmetric_keys;
Para entender e manter melhor as chaves de criptografia em um ambiente de produção, consulte:
Criar a credencial restringida ao âmbito do banco de dados
A credencial com escopo do banco de dados é responsável por armazenar as credenciais utilizadas pela fonte de dados para se conectar ao endpoint. Este exemplo usa um ponto de extremidade público, portanto, a credencial não precisa de uma chave secreta.
IF EXISTS (SELECT * FROM sys.database_scoped_credentials WHERE name = N'PublicCredential')
DROP DATABASE SCOPED CREDENTIAL PublicCredential;
CREATE DATABASE SCOPED CREDENTIAL PublicCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<KEY>'; -- This example doesn't need the SECRET because the data source is public
Criar a fonte de dados
Este exemplo usa um conjunto de dados COVID Parquet disponível publicamente armazenado no Armazenamento de Blobs do Azure. Você utiliza o escopo do banco de dados PublicCredential que criou para estabelecer a conexão.
Valores de LOCALIZAÇÃO:
- Prefixo:
abs - Conta de armazenamento do Azure:
pandemicdatalake - Caminho completo da conta de Armazenamento do Azure:
pandemicdatalake.blob.core.windows.net - Nome do recipiente:
public - Caminho completo do contêiner:
public/curated/covid-19/bing_covid-19_data/latest
IF EXISTS (SELECT * FROM sys.external_data_sources WHERE name = N'Public_Covid') DROP EXTERNAL DATA SOURCE Public_Covid;
CREATE EXTERNAL DATA SOURCE Public_Covid
WITH (
LOCATION = 'abs://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest',
CREDENTIAL = [PublicCredential]
);
- Para obter uma lista completa de fontes de dados e prefixos correspondentes, consulte CREATE EXTERNAL DATA SOURCE.
- Para obter mais informações sobre o conjunto de dados públicos, consulte Bing COVID-19.
Consultar os dados com OPENROWSET
Você pode usar OPENROWSET para acessar e explorar os dados. OPENROWSET é otimizado para cenários ad-hoc de carga de trabalho e exploração de dados.
Valores OPENROWSET:
- BULK: Nome do arquivo e extensão. BULK acrescenta automaticamente às informações sobre a fonte de dados, de forma que a localização completa do ficheiro seja
abs://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet - FORMATO:
PARQUET - DATA_SOURCE: Informações de conexão, neste caso sua nova fonte de dados
Public_Covid
SELECT TOP 1000 *
FROM OPENROWSET
(BULK 'bing_covid-19_data.parquet'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 'Public_Covid')
AS [COVID_Dataset]
O exemplo a seguir usa a flexibilidade T-SQL para consultar o arquivo Parquet em tempo real, assim como uma tabela normal. Para retornar o número de casos confirmados por estado dos EUA em ordem decrescente, execute a seguinte consulta:
SELECT [COVID_Dataset].admin_region_1,
SUM(CAST([COVID_Dataset].confirmed AS BIGINT)) AS Confirmed
FROM OPENROWSET
(BULK 'bing_covid-19_data.parquet'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 'Public_Covid')
AS [COVID_Dataset]
WHERE [COVID_Dataset].country_region = 'United States' AND
[COVID_Dataset].admin_region_1 IS NOT NULL
GROUP BY [COVID_Dataset].admin_region_1
ORDER BY confirmed DESC
Criar e consultar uma tabela externa
OPENROWSET é otimizado para execução ad-hoc e exploração de dados. As tabelas externas são mais adequadas para acesso recorrente, porque também podem usar estatísticas.
Descubra o esquema da tabela externa
Para criar uma tabela externa, primeiro determine as colunas e o tipo. O esquema vem de um arquivo externo, portanto, pode ser demorado determinar com precisão os tipos e intervalos de dados. Felizmente, você pode usar o procedimento armazenado sp_describe_first_result_set (Transact-SQL) para acelerar esse processo.
DECLARE @tsql NVARCHAR(MAX) = 'SELECT TOP 1000 *
FROM OPENROWSET
(BULK ''bing_covid-19_data.parquet''
, FORMAT = ''PARQUET''
, DATA_SOURCE = ''Public_Covid'')
AS [COVID_Dataset]';
EXEC sys.sp_describe_first_result_set @tsql;
Você pode ver que sp_describe_first_result_set retornou os nomes das colunas, tipos, comprimento, precisão e até mesmo o agrupamento da fonte de dados.
Criar o formato de arquivo externo
Como você precisa fazer referência ao arquivo Parquet para a tabela externa, primeiro você precisa executar CREATE EXTERNAL FILE FORMAT para adicionar o formato de arquivo Parquet. A definição de formato de arquivo é importante para tabelas externas porque especifica o layout real e o tipo de compactação.
Execute o seguinte comando:
IF EXISTS (SELECT * FROM sys.external_file_formats WHERE name = N'ParquetFileFormat')
DROP EXTERNAL FILE FORMAT ParquetFileFormat;
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
Criar a tabela externa
Finalmente, com todas as informações que você acabou de adquirir e o formato de arquivo externo criado, você pode criar a tabela externa usando o seguinte script:
IF EXISTS (SELECT * FROM sys.external_file_formats WHERE name = N'ParquetFileFormat')
DROP EXTERNAL FILE FORMAT ParquetFileFormat;
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
-- 8.3 CREATE EXTERNAL TABLE
IF OBJECT_ID(N'ext_covid_data', N'ET') IS NOT NULL
DROP EXTERNAL TABLE ext_covid_data;
CREATE EXTERNAL TABLE ext_covid_data
(
id int,
updated date,
confirmed int,
confirmed_change int,
deaths int,
deaths_change smallint,
recovered int,
recovered_change int,
latitude float,
longitude float,
iso2 varchar(8000),
iso3 varchar(8000),
country_region varchar(8000),
admin_region_1 varchar(8000),
iso_subdivision varchar(8000),
admin_region_2 varchar(8000),
load_time datetime2(7)
)
WITH
(
LOCATION = 'bing_covid-19_data.parquet'
, FILE_FORMAT = ParquetFileFormat
, DATA_SOURCE = Public_Covid
);
CREATE STATISTICS [Stats_ext_covid_data_updated] ON ext_covid_data([updated]);
SELECT TOP 1000 * FROM ext_covid_data;
Observação
Os nomes das colunas devem corresponder às colunas armazenadas no arquivo Parquet, ou o SQL Server não pode identificar as colunas e retorna NULL.
Depois de criar a tabela externa ext_covid_data, você pode adicionar estatísticas nas colunas atualizadas para eficiência. Para obter mais informações sobre estatísticas em tabelas externas, consulte CREATE STATISTICS (Transact-SQL).
Nesta unidade, você usou o PolyBase para se conectar a uma fonte de dados externa e usou OPENROWSET ou tabela externa para consultar o arquivo Parquet. No próximo exercício, você usa os serviços PolyBase para se conectar e criar uma tabela externa a partir de um banco de dados no Banco de Dados SQL do Azure.