Cenários de consulta do PolyBase

Aplica-se a:SQL Server – Somente Windows Instância Gerenciada de SQL do Azure

Este artigo fornece exemplos de consultas que usam o recurso PolyBase do SQL Server (a partir de 2016). Antes de usar esses exemplos, primeiro é necessário instalar e configurar o PolyBase. Para obter mais informações, consulte a Visão geral do PolyBase.

Importante

Fontes externas do PolyBase para o Hadoop não serão compatíveis no SQL Server 2022 (16.x). Para obter mais informações, consulte Conectores do PolyBase.

Execute instruções Transact-SQL em tabelas externas ou use as ferramentas de BI para consultar tabelas externas.

SELECT da tabela externa

Uma consulta simples que retorna dados de uma tabela externa definida.

SELECT TOP 10 * FROM [dbo].[SensorData];

Uma consulta simples que inclui um predicado.

SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65;

JOIN de tabelas externas com tabelas locais

SELECT InsuranceCustomers.FirstName,
   InsuranceCustomers.LastName,
   SensorData.Speed
FROM InsuranceCustomers INNER JOIN SensorData
ON InsuranceCustomers.CustomerKey = SensorData.CustomerKey
WHERE SensorData.Speed > 65
ORDER BY SensorData.Speed DESC

Importar dados

Importe dados do Hadoop ou armazenamento do Azure para SQL Server, para armazenamento persistente. Use SELECT INTO para importar dados referenciados por uma tabela externa para armazenamento persistente no SQL Server. Crie uma tabela relacional rapidamente e crie um índice de repositório de coluna sobre a tabela em uma segunda etapa.

-- PolyBase scenario - import external data into SQL Server
-- Import data for fast drivers into SQL Server to do more in-depth analysis
-- Leverage columnstore technology
  
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

Exporte dados do SQL Server para o Hadoop ou armazenamento do Azure.

Primeiro, habilite a funcionalidade de exportação definindo o valor sp_configure de "permitir exportação PolyBase" como 1. Em seguida, crie uma tabela externa que aponta para o diretório de destino. A instrução CREATE EXTERNAL TABLE cria o diretório de destino, caso ele ainda não exista. Em seguida, use INSERT INTO para exportar dados de uma tabela local do SQL Server para a fonte de dados externa.

Os resultados da instrução SELECT são exportados para o local especificado no formato de arquivo especificado. Os arquivos externos são nomeados QueryID_date_time_ID.format, em que ID é um identificador incremental e formato é o formato de dados exportados. Por exemplo, um nome de arquivo pode ser QID776_20160130_182739_0.orc.

Observação

Ao exportar dados para o Hadoop ou Armazenamento de Blobs do Azure por meio do PolyBase, somente os dados serão exportados, não os nomes das colunas (metadados) conforme definido no comando CRIAR TABELA EXTERNA.

-- PolyBase scenario  - export data from SQL Server to Hadoop
-- 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 (
        LOCATION='/old_data/2009/customerdata',
        DATA_SOURCE = HadoopHDP2,
        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.FastCustomers2009
SELECT T.* FROM Insured_Customers T1 JOIN CarSensor_Data T2
ON (T1.CustomerKey = T2.CustomerKey)
WHERE T2.YearMeasured = 2009 and T2.Speed > 40;

Novas exibições do catálogo

As novas exibições do catálogo a seguir mostram os recursos externos.

SELECT * FROM sys.external_data_sources;
SELECT * FROM sys.external_file_formats;
SELECT * FROM sys.external_tables;

Determine se uma tabela é uma tabela externa usando is_external

SELECT name, type, is_external FROM sys.tables WHERE name='myTableName'

Próximas etapas

Para saber mais sobre como solucionar problemas, consulte PolyBase troubleshooting(Solução de problemas do PolyBase).