Scenari di query di PolyBase

Si applica a:SQL Server - Solo Windows 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.

Importante

In SQL Server 2022 (16.x), le origini esterne PolyBase in Hadoop non sono supportate. Per altre informazioni, consultare Connettori 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

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

Esporta 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.