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 2016 (13.x) e versões posteriores no Windows
O artigo explica como usar o PolyBase em uma instância do SQL Server para consultar dados externos no Armazenamento de Blobs do Azure.
Pré-requisitos
Se ainda não instalou o PolyBase, veja Instalar PolyBase no Windows. O artigo de instalação explica os pré-requisitos.
SQL Server 2022
No SQL Server 2022 (16.x), configure suas fontes de dados externas para usar novos conectores quando você se conectar ao Armazenamento do Azure. A tabela a seguir resume a alteração:
| Fonte de dados externa | De | Para |
|---|---|---|
| Armazenamento de Blobs do Azure | wasb[s] | ABS |
| Geração 2 da ADLS | ABFS[s] | ADLs |
Configurar a conectividade do Armazenamento de Blobs do Azure
Primeiro, configure o SQL Server PolyBase para usar o Armazenamento de Blobs do Azure.
Execute sp_configure com
'hadoop connectivity'definido para um fornecedor do Azure Blob Storage. Para encontrar o valor para os fornecedores, veja Configuração de conectividade PolyBase. Por defeito, a conectividade Hadoop está definida para7.-- Values map to various external data sources. -- Example: value 7 stands for Hortonworks HDP 2.1 to 2.6 on Linux, -- 2.1 to 2.3 on Windows Server, and Azure Blob Storage EXECUTE sp_configure @configname = 'hadoop connectivity', @configvalue = 7; GO RECONFIGURE;Reinicie o SQL Server usando services.msc. Reiniciar o SQL Server reinicia estes serviços:
- Serviço de Movimentação de Dados do SQL Server PolyBase
- Mecanismo PolyBase do SQL Server
Reinicie o SQL Server usando services.msc. Reiniciar o SQL Server reinicia estes serviços:
- Serviço de Movimentação de Dados do SQL Server PolyBase
- Mecanismo PolyBase do SQL Server
Configurar uma tabela externa
Para consultar os dados em sua fonte de dados Hadoop, você deve definir uma tabela externa para usar em consultas Transact-SQL. As etapas a seguir descrevem como configurar a tabela externa.
Crie uma chave mestra de base de dados (DMK) na base de dados. O DMK é obrigado a encriptar o segredo das credenciais.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';Crie uma credencial com escopo de base de dados para o Armazenamento de Blobs do Azure;
IDENTITYpode ser qualquer valor, pois não é usado.-- IDENTITY: any string (this is not used for authentication to Azure storage). -- SECRET: your Azure storage account key. CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential WITH IDENTITY = 'user', SECRET = '<azure_storage_account_key>';Crie uma fonte de dados externa com CREATE EXTERNAL DATA SOURCE. Quando se liga ao Azure Storage através do
wasb[s]conector, a autenticação deve ser feita com uma chave de conta de armazenamento, e não com uma assinatura de acesso partilhada (SAS).-- LOCATION: Azure account storage account name and blob container name. -- CREDENTIAL: The database scoped credential created above. CREATE EXTERNAL DATA SOURCE AzureStorage WITH ( TYPE = HADOOP, LOCATION = 'wasbs://<blob_container_name>@<azure_storage_account_name>.blob.core.windows.net', CREDENTIAL = AzureStorageCredential );Crie um formato de arquivo externo com CREATE EXTERNAL FILE FORMAT.
-- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE) );Crie uma tabela externa apontando para os dados armazenados no armazenamento do Azure com CREATE EXTERNAL TABLE. Neste exemplo, os dados externos contêm dados de sensores do carro;
LOCATIONnão pode ser/, mas, tal como neste exemplo,/Demo/não precisa de existir previamente.-- LOCATION: path to file or directory that contains the data (relative to HDFS root). CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] ( SensorKey INT NOT NULL, CustomerKey INT NOT NULL, GeographyKey INT NULL, Speed FLOAT NOT NULL, YearMeasured INT NOT NULL ) WITH ( DATA_SOURCE = AzureStorage, LOCATION = '/Demo/', FILE_FORMAT = TextFileFormat );Crie estatísticas em uma tabela externa.
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
Crie uma chave mestra de base de dados (DMK) na base de dados. O DMK é obrigado a encriptar o segredo das credenciais.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';Criar uma credencial com escopo de banco de dados para o Azure Blob Storage usando uma assinatura de acesso compartilhado (SAS);
IDENTITYpode ser qualquer coisa, pois não é usado.CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- Remove ? from the beginning of the SAS token SECRET = '<azure_shared_access_signature>';Crie uma fonte de dados externa com CREATE EXTERNAL DATA SOURCE. Ao ligar ao Azure Storage através do conector WASB[s], autenticação com assinatura de acesso partilhada (SAS).
-- LOCATION: Azure account storage account name and blob container name. -- CREDENTIAL: The database scoped credential created above. CREATE EXTERNAL DATA SOURCE AzureStorage WITH ( LOCATION = 'wasbs://<blob_container_name>@<azure_storage_account_name>.blob.core.windows.net', CREDENTIAL = AzureStorageCredential );Crie um formato de arquivo externo com CREATE EXTERNAL FILE FORMAT.
-- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE) );Crie uma tabela externa apontando para os dados armazenados no armazenamento do Azure com CREATE EXTERNAL TABLE. Neste exemplo, os dados externos contêm dados de sensores do carro;
LOCATIONnão pode ser/, mas, tal como neste exemplo,/Demo/não precisa de existir previamente.-- LOCATION: path to file or directory that contains the data (relative to HDFS root). CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] ( SensorKey INT NOT NULL, CustomerKey INT NOT NULL, GeographyKey INT NULL, Speed FLOAT NOT NULL, YearMeasured INT NOT NULL ) WITH ( DATA_SOURCE = AzureStorage, LOCATION = '/Demo/', FILE_FORMAT = TextFileFormat );Crie estatísticas em uma tabela externa.
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
Consultas PolyBase
Existem três funções para as quais o PolyBase é adequado:
- Consultas ad hoc em tabelas externas.
- Importação de dados.
- Exportação de dados.
As consultas a seguir fornecem exemplos com dados fictícios do sensor do carro.
Consultas ad hoc
A seguinte consulta ad hoc combina os dados relacionais com os de Hadoop. Ele seleciona clientes que dirigem a uma velocidade superior a 35 mph e se junta aos dados estruturados do cliente armazenados no SQL Server com os dados do sensor do carro armazenados no Hadoop.
SELECT DISTINCT Insured_Customers.FirstName,
Insured_Customers.LastName,
Insured_Customers.YearlyIncome,
CarSensor_Data.Speed
FROM Insured_Customers,
CarSensor_Data
WHERE Insured_Customers.CustomerKey = CarSensor_Data.CustomerKey
AND CarSensor_Data.Speed > 35
ORDER BY CarSensor_Data.Speed DESC
OPTION (FORCE EXTERNALPUSHDOWN); -- or OPTION (DISABLE EXTERNALPUSHDOWN)
Importar dados com o PolyBase
A consulta a seguir importa dados externos para o SQL Server. Este exemplo importa dados de condutores rápidos para o SQL Server para realizar uma análise mais aprofundada. Para melhorar o desempenho, utiliza a tecnologia de armazenamento em colunas.
SELECT DISTINCT Insured_Customers.FirstName,
Insured_Customers.LastName,
Insured_Customers.YearlyIncome,
Insured_Customers.MaritalStatus
INTO Fast_Customers
FROM Insured_Customers
INNER JOIN (SELECT *
FROM CarSensor_Data
WHERE Speed > 35
) AS SensorD
ON Insured_Customers.CustomerKey = SensorD.CustomerKey
ORDER BY YearlyIncome;
CREATE CLUSTERED COLUMNSTORE INDEX CCI_FastCustomers
ON Fast_Customers;
Exportar dados com o PolyBase
A consulta a seguir exporta dados do SQL Server para o Armazenamento de Blobs do Azure. Primeiro, habilite a exportação do PolyBase. Em seguida, crie uma tabela externa para o destino antes de exportar dados para ela.
-- Enable INSERT into external table
EXECUTE sp_configure 'allow polybase export', 1;
RECONFIGURE;
GO
-- Create an external table.
CREATE EXTERNAL TABLE [dbo].[FastCustomers2009]
(
FirstName CHAR (25) NOT NULL,
LastName CHAR (25) NOT NULL,
YearlyIncome FLOAT NULL,
MaritalStatus CHAR (1) NOT NULL
)
WITH (
DATA_SOURCE = HadoopHDP2,
LOCATION = '/old_data/2009/customerdata',
FILE_FORMAT = TextFileFormat,
REJECT_TYPE = VALUE,
REJECT_VALUE = 0
);
-- Export data: Move old data to Hadoop while keeping it query-able via an external table.
INSERT INTO dbo.FastCustomer2009
SELECT T.*
FROM Insured_Customers AS T1
INNER JOIN CarSensor_Data AS T2
ON (T1.CustomerKey = T2.CustomerKey)
WHERE T2.YearMeasured = 2009
AND T2.Speed > 40;
A exportação do PolyBase com este método pode criar múltiplos ficheiros.
Exibir objetos PolyBase no SSMS
No SSMS, as tabelas externas são exibidas em uma pasta separada Tabelas Externas. Fontes de dados externas e formatos de arquivo externos estão em subpastas em Recursos Externos.