PolyBase QueriesPolyBase Queries

In questo argomento si applica a: SìSQL ServernonDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Ecco alcune query di esempio che usano la funzionalità PolyBase di SQL Server 2016.Here are example queries using the PolyBase Guide feature of SQL Server 2016. Prima di usare questi esempi è necessario comprendere anche le istruzioni T-SQL necessarie per configurare PolyBase (vedere Oggetti T-SQL PolyBase).Before using these examples, you must also understand the T-SQL statements required to setup PolyBase (See PolyBase T-SQL objects.)

QueryQueries

Eseguire istruzioni Transact-SQL su tabelle esterne oppure usare gli strumenti di Business Intelligence per eseguire query su tabelle esterne.Run Transact-SQL statements against external tables or use BI tools to query external tables.

SELECT da tabella esternaSELECT from external table

Una query semplice che restituisce i dati da una tabella esterna definita.A simple query that returns data from a defined external table.

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

Una query semplice che include un predicato.A simple query that includes a predicate.

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

JOIN di tabelle esterne con tabelle localiJOIN external tables with local tables

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  

Calcolo della distribuzione in HadoopPushdown computation to Hadoop

Le variazioni della distribuzione vengono visualizzate qui.Variations of pushdown are shown here.

Distribuzione per la selezione di un subset di righePushdown for selecting a subset of rows

Usare la distribuzione del predicato per migliorare le prestazioni se la query seleziona un subset di righe da una tabella esterna.Use predicate pushdown to improve performance for a query that selects a subset of rows from an external table.

In questo caso SQL Server 2016 avvia un processo MapReduce per recuperare le righe che soddisfano il predicato customer.account_balance < 200000 in Hadoop.Here SQL Server 2016 initiates a map-reduce job to retrieve the rows that match the predicate customer.account_balance < 200000 on Hadoop. Poiché la query può essere completata correttamente senza eseguire la scansione di tutte le righe della tabella, vengono copiate in SQL Server solo le righe che soddisfano i criteri del predicato.Since the query can complete successfully without scanning all of the rows in the table, only the rows that meet the predicate criteria are copied to SQL Server. In questo modo si risparmia molto tempo ed è necessario meno spazio per l'archiviazione temporanea quando il numero di saldi dei clienti inferiori a 200000 è ridotto rispetto al numero di clienti con saldi superiori o uguali a 200000.This saves significant time and requires less temporary storage space when the number of customer balances < 200000 is small in comparison with the number of customers with account balances >= 200000.
Copy imageCopy CodeCopy imageCopy Code
SELECT * FROM customer WHERE customer.account_balance < 200000.SELECT * FROM customer WHERE customer.account_balance < 200000.

SELECT * FROM SensorData WHERE Speed > 65;  

Distribuzione per la selezione di un subset di colonnePushdown for selecting a subset of columns

Usare la distribuzione del predicato per migliorare le prestazioni se la query seleziona un subset di colonne da una tabella esterna.Use predicate pushdown to improve performance for a query that selects a subset of columns from an external table.

In questa query, SQL Server avvia un processo MapReduce per pre-elaborare il file di testo delimitato di Hadoop in modo tale che solo i dati per le due colonne, customer.name e customer.zip_code, verranno copiati in SQL Server PDW.In this query, SQL Server initiates a map-reduce job to pre-process the Hadoop delimited-text file so that only the data for the two columns, customer.name and customer.zip_code, will be copied to SQL Server PDW.

SELECT customer.name, customer.zip_code FROM customer WHERE customer.account_balance < 200000  

Distribuzione per operatori ed espressioni di basePushdown for basic expressions and operators

SQL Server consente gli operatori e le espressioni di base seguenti per la distribuzione del predicato.SQL Server allows the following basic expressions and operators for predicate pushdown.

  • Operatori di confronto binari (<, >, =, !=, <>, >=, <=) per valori numerici, di data e di ora.Binary comparison operators ( <, >, =, !=, <>, >=, <= ) for numeric, date, and time values.

  • Operatori aritmetici ( +, -, *, /, % ).Arithmetic operators ( +, -, *, /, % ).

  • Operatori logici (AND, OR).Logical operators (AND, OR).

  • Operatori unari (NOT, IS NULL, IS NOT NULL).Unary operators (NOT, IS NULL, IS NOT NULL).

    Gli operatori BETWEEN, NOT, IN e LIKE possono essere propagati.The operators BETWEEN, NOT, IN, and LIKE might be pushed-down. Ciò dipende dal modo in cui Query Optimizer li riscrive come serie di istruzioni che utilizzano operatori relazionali di base.This depends on how the query optimizer rewrites them as a series of statements that use basic relational operators.

    Questa query include più predicati che possono essere propagati ad Hadoop.This query has multiple predicates that can be pushed down to Hadoop. SQL Server è in grado di distribuire i processi MapReduce in Hadoop per eseguire il predicato customer.account_balance <= 200000.SQL Server can push map-reduce jobs to Hadoop to perform the predicate customer.account_balance <= 200000. L'espressione BETWEEN 92656 e 92677 è costituita da operazioni binarie e logiche che possono essere distribuite in Hadoop.The expression BETWEEN 92656 and 92677 is comprised of binary and logical operations that can be pushed to Hadoop. L'operatore logico AND di customer.account_balance e customer.zipcode è un'espressione finale.The logical AND of customer.account_balance and customer.zipcode is a final expression.

    Con questa combinazione di elementi, i processi MapReduce possono eseguire interamente la clausola WHERE.Putting this altogether, the map-reduce jobs can perform all of the WHERE clause. Solo i dati che soddisfano i criteri SELECT verranno copiati in SQL Server PDW.Only the data that meets the SELECT criteria will be copied back to SQL Server PDW.

SELECT * FROM customer WHERE customer.account_balance <= 200000 AND customer.zipcode BETWEEN 92656 AND 92677  

Forzare la distribuzioneForce pushdown

SELECT * FROM [dbo].[SensorData]   
WHERE Speed > 65  
OPTION (FORCE EXTERNALPUSHDOWN);   

Disabilitare la distribuzioneDisable pushdown

SELECT * FROM [dbo].[SensorData]   
WHERE Speed > 65  
OPTION (DISABLE EXTERNALPUSHDOWN);  

Importazione di datiImport data

Importare dati da Hadoop o dall'archiviazione di Azure in SQL Server per l'archivio permanente.Import data from Hadoop or Azure Storage into SQL Server for persistent storage. Usare SELECT INTO per importare i dati a cui fa riferimento una tabella esterna per l'archivio permanente in SQL Server.Use SELECT INTO to import data referenced by an external table for persistent storage in SQL Server. Creare un tabella relazionale e quindi creare un indice di archivio colonne nella parte superiore della tabella in un secondo passaggio.Create a relational table on-the-fly and then create a column-store index on top of the table in a second step.

-- PolyBase Scenario 2: Import external data into SQL Server.  
-- Import data for fast drivers into SQL Server to do more in-depth analysis and  
-- 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;  

Esportare datiExport data

Esportare dati da SQL Server in Hadoop o Archiviazione di Azure.Export data from SQL Server to Hadoop or Azure Storage. Per prima cosa abilitare la funzionalità di esportazione impostando il valore sp_configure di 'allow polybase export' su 1.First, enable export functionality by setting the sp_configure value of 'allow polybase export' to 1. Creare quindi una tabella esterna che punta alla directory di destinazione.Next, create an external table that points to the destination directory. Usare quindi INSERT INTO per esportare i dati da una tabella di SQL Server locale a un'origine dati esterna.Then, use INSERT INTO to export data from a local SQL Server table to an external data source. L'istruzione INSERT INTO crea la directory di destinazione, se non esiste, e i risultati dell'istruzione SELECT vengono esportati nel percorso specificato nel formato di file specificato.The INSERT INTO statement creates the destination directory if it does not exist and the results of the SELECT statement are exported to the specified location in the specified file format. I file esterni sono denominati QueryID_date_time_ID.format, dove ID è un identificatore incrementale e format è il formato dei dati esportati.The external files are named QueryID_date_time_ID.format, where ID is an incremental identifier and format is the exported data format. Ad esempio, QID776_20160130_182739_0.orc.For example, QID776_20160130_182739_0.orc.

-- PolyBase Scenario 3: 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.FastCustomer2009  
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 catalogoNew catalog views

Le nuove viste del catalogo seguenti mostrano le risorse esterne.The following new catalog views show external resources.

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_externalDetermine if a table is an external table by using is_external

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

Passaggi successiviNext steps

Per altre informazioni sulla risoluzione dei problemi, vedere Risoluzione dei problemi di PolyBase.To learn more about troubleshooting, see PolyBase troubleshooting.