Share via


PolyBase-queryscenario's

Van toepassing op:SQL Server in Windows Azure SQL Managed Instance

Dit artikel bevat voorbeelden van query's met behulp van de PolyBase-functie van SQL Server (vanaf 2016). Voordat u deze voorbeelden gebruikt, moet u eerst PolyBase installeren en configureren. Zie het PolyBase-overzicht voor meer informatie.

Belangrijk

In SQL Server 2022 (16.x) worden externe PolyBase-bronnen naar Hadoop niet ondersteund. Zie PolyBase-connectors voor meer informatie.

Voer Transact-SQL instructies uit voor externe tabellen of gebruik BI-hulpprogramma's om query's uit te voeren op externe tabellen.

SELECT uit externe tabel

Een eenvoudige query die gegevens uit een gedefinieerde externe tabel retourneert.

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

Een eenvoudige query die een predicaat bevat.

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

Externe tabellen met lokale tabellen koppelen

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

Gegevens importeren

Importeer gegevens uit Hadoop of Azure Storage in SQL Server voor permanente opslag. Gebruik SELECT INTO om gegevens te importeren waarnaar wordt verwezen door een externe tabel, voor permanente opslag in SQL Server. Maak ter plekke een relationele tabel en maak vervolgens een kolomopslagindex boven op de tabel in een tweede stap.

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

Gegevens exporteren

Gegevens exporteren van SQL Server naar Hadoop of Azure Storage.

Schakel eerst de exportfunctionaliteit in door de sp_configure waarde ' Polybase-export toestaan' in te stellen op 1. Maak vervolgens een externe tabel die verwijst naar de doelmap. Met de instructie CREATE EXTERNAL TABLE maakt u de doelmap als deze nog niet bestaat. Gebruik VERVOLGENS INSERT INTO om gegevens uit een lokale SQL Server-tabel te exporteren naar de externe gegevensbron.

De resultaten van de SELECT-instructie worden geëxporteerd naar de opgegeven locatie in de opgegeven bestandsindeling. De externe bestanden hebben de naam QueryID_date_time_ID.format, waarbij id een incrementele id is en de indeling de geëxporteerde gegevensindeling is. Een bestandsnaam kan bijvoorbeeld QID776_20160130_182739_0.orc zijn.

Opmerking

Wanneer u gegevens exporteert naar Hadoop of Azure Blob Storage via PolyBase, worden alleen de gegevens geëxporteerd, niet de kolomnamen (metagegevens) zoals gedefinieerd in de opdracht 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;

Nieuwe catalogusweergaven

In de volgende nieuwe catalogusweergaven worden externe resources weergegeven.

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

Bepalen of een tabel een externe tabel is met behulp van is_external

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

Volgende stappen

Zie Problemen met PolyBase oplossen voor meer informatie over het oplossen van problemen.