Scenari di query di PolyBase

Si applica a: sìSQL Server (tutte le versioni supportate) - Solo Windows SìIstanza gestita di SQL di Azure

Questo articolo propone alcuni esempi di query che usano la funzionalità PolyBase di SQL Server (a partire dalla versione 2016). Prima di usare questi esempi, è necessario installare e configurare PolyBase. Per altre informazioni, vedere la panoramica di PolyBase.

Eseguire istruzioni Transact-SQL su tabelle esterne oppure usare gli strumenti di Business Intelligence per eseguire query su tabelle esterne.

SELECT da tabella esterna

Una query semplice che restituisce i dati da una tabella esterna definita.

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

Una query semplice che include un predicato.

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

JOIN di tabelle esterne con tabelle locali

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  
  

Importa dati

Importare dati da Hadoop o dall'archiviazione di Azure in SQL Server per l'archivio permanente. Usare SELECT INTO per importare i dati a cui fa riferimento una tabella esterna, per l'archiviazione permanente in SQL Server. Creare un tabella relazionale e quindi creare un indice columnstore sulla tabella in un secondo passaggio.

-- 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;  

Esportazione dei dati

Esportare dati da SQL Server in Hadoop o Archiviazione di Azure.

Per prima cosa abilitare la funzionalità di esportazione impostando il valore sp_configure di 'allow polybase export' su 1. Creare quindi una tabella esterna che punta alla directory di destinazione. L'istruzione CREATE EXTERNAL TABLE crea la directory di destinazione, se non esiste già. Usare quindi INSERT INTO per esportare i dati da una tabella di SQL Server locale a un'origine dati esterna.

I risultati dell'istruzione SELECT vengono esportati nel percorso specificato usando il formato di file specificato. I file esterni sono denominati QueryID_date_time_ID.format, dove ID è un identificatore incrementale e format è il formato dei dati esportati. Ad esempio, un nome di file potrebbe essere QID776_20160130_182739_0.orc.

Nota

Quando si esportano dati in Hadoop o in Archiviazione BLOB di Azure tramite PolyBase, vengono esportati solo i dati e non i nomi di colonne (metadati) definiti nel comando CREATE EXTERNAL TABLE.

-- 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;  

Nuove viste del catalogo

Le nuove viste del catalogo seguenti mostrano le risorse esterne.

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

Per determinare se una tabella è una tabella esterna, usare is_external

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

Passaggi successivi

Per altre informazioni sulla risoluzione dei problemi, vedere Risoluzione dei problemi di PolyBase.