Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner i Windows
Artikeln beskriver hur du använder PolyBase på en SQL Server-instans för att fråga externa data i Azure Blob Storage.
Förutsättningar
Om du inte har installerat PolyBase kan du läsa Installera PolyBase i Windows. Installationsartikeln förklarar kraven.
SQL Server 2022
I SQL Server 2022 (16.x) konfigurerar du dina externa datakällor så att de använder nya anslutningsappar när du ansluter till Azure Storage. I följande tabell sammanfattas ändringen:
| Extern datakälla | Från | Till |
|---|---|---|
| Azure Blob Storage (lagringstjänst från Microsoft) | wasb[s] | magmuskler |
| ADLS Gen 2 | abfs[s] | ADL (Aktiviteter i dagliga livet) |
Konfigurera Azure Blob Storage-anslutning
Konfigurera först SQL Server PolyBase att använda Azure Blob Storage.
Kör sp_configure med
'hadoop connectivity'inställd på en Azure Blob Storage-provider. Information om hur du hittar värdet för leverantörer finns i PolyBase-anslutningskonfiguration. Som standard är Hadoop-anslutningen inställd på7.-- Values map to various external data sources. -- Example: value 7 stands for Hortonworks HDP 2.1 to 2.6 on Linux, -- 2.1 to 2.3 on Windows Server, and Azure Blob Storage EXECUTE sp_configure @configname = 'hadoop connectivity', @configvalue = 7; GO RECONFIGURE;Starta om SQL Server med hjälp av services.msc. Att starta om SQL Server startar om följande tjänster:
- SQL Server PolyBase Datatransporttjänst
- SQL Server PolyBase-motor
Starta om SQL Server med hjälp av services.msc. Att starta om SQL Server startar om följande tjänster:
- SQL Server PolyBase Datatransporttjänst
- SQL Server PolyBase-motor
Konfigurera en extern tabell
Om du vill använda frågor för att hämta data från din Hadoop-datakälla, måste du definiera en extern tabell som ska användas i Transact-SQL-frågor. Följande steg beskriver hur du konfigurerar den externa tabellen.
Skapa en databashuvudnyckel (DMK) på databasen. DMK krävs för att kryptera autentiseringshemligheten.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';Skapa en databasomfattande autentiseringsuppgift för Azure Blob Storage.
IDENTITYkan vara vad som helst eftersom det inte används.-- IDENTITY: any string (this is not used for authentication to Azure storage). -- SECRET: your Azure storage account key. CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential WITH IDENTITY = 'user', SECRET = '<azure_storage_account_key>';Skapa en extern datakälla med CREATE EXTERNAL DATA SOURCE. När du ansluter till Azure Storage via anslutningsappen
wasb[s]måste autentiseringen göras med en lagringskontonyckel, inte med en signatur för delad åtkomst (SAS).-- LOCATION: Azure account storage account name and blob container name. -- CREDENTIAL: The database scoped credential created above. CREATE EXTERNAL DATA SOURCE AzureStorage WITH ( TYPE = HADOOP, LOCATION = 'wasbs://<blob_container_name>@<azure_storage_account_name>.blob.core.windows.net', CREDENTIAL = AzureStorageCredential );Skapa ett externt filformat med SKAPA EXTERNT FILFORMAT.
-- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE) );Skapa en extern tabell som pekar på data som lagras i Azure Storage med CREATE EXTERNAL TABLE. I det här exemplet innehåller den externa datan bilsensordata;
LOCATIONkan inte vara/, men/Demo/behöver inte ha funnits tidigare.-- LOCATION: path to file or directory that contains the data (relative to HDFS root). CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] ( SensorKey INT NOT NULL, CustomerKey INT NOT NULL, GeographyKey INT NULL, Speed FLOAT NOT NULL, YearMeasured INT NOT NULL ) WITH ( DATA_SOURCE = AzureStorage, LOCATION = '/Demo/', FILE_FORMAT = TextFileFormat );Skapa statistik i en extern tabell.
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
Skapa en databashuvudnyckel (DMK) på databasen. DMK krävs för att kryptera autentiseringshemligheten.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';Skapa en databasomfattande autentiseringsuppgift för Azure Blob Storage med hjälp av en signatur för delad åtkomst (SAS);
IDENTITYkan vara vad som helst eftersom det inte används.CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- Remove ? from the beginning of the SAS token SECRET = '<azure_shared_access_signature>';Skapa en extern datakälla med CREATE EXTERNAL DATA SOURCE. När du ansluter till Azure Storage via WASB-anslutningsprogrammet, autentisering med en signatur för delad åtkomst (SAS).
-- LOCATION: Azure account storage account name and blob container name. -- CREDENTIAL: The database scoped credential created above. CREATE EXTERNAL DATA SOURCE AzureStorage WITH ( LOCATION = 'wasbs://<blob_container_name>@<azure_storage_account_name>.blob.core.windows.net', CREDENTIAL = AzureStorageCredential );Skapa ett externt filformat med SKAPA EXTERNT FILFORMAT.
-- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE) );Skapa en extern tabell som pekar på data som lagras i Azure Storage med CREATE EXTERNAL TABLE. I det här exemplet innehåller den externa datan bilsensordata;
LOCATIONkan inte vara/, men/Demo/behöver inte ha funnits tidigare.-- LOCATION: path to file or directory that contains the data (relative to HDFS root). CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] ( SensorKey INT NOT NULL, CustomerKey INT NOT NULL, GeographyKey INT NULL, Speed FLOAT NOT NULL, YearMeasured INT NOT NULL ) WITH ( DATA_SOURCE = AzureStorage, LOCATION = '/Demo/', FILE_FORMAT = TextFileFormat );Skapa statistik i en extern tabell.
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
PolyBase-frågor
Det finns tre funktioner som PolyBase passar för:
- Ad hoc-frågor mot externa tabeller.
- Importerar data.
- Exportera data.
Följande frågor ger exempel med fiktiva bilsensordata.
Ad hoc-frågor
Följande ad hoc-fråga kopplar samman relationella data med Hadoop-data. Den väljer kunder som kör snabbare än 35 mph och ansluter till strukturerade kunddata som lagras i SQL Server med bilsensordata som lagras i Hadoop.
SELECT DISTINCT Insured_Customers.FirstName,
Insured_Customers.LastName,
Insured_Customers.YearlyIncome,
CarSensor_Data.Speed
FROM Insured_Customers,
CarSensor_Data
WHERE Insured_Customers.CustomerKey = CarSensor_Data.CustomerKey
AND CarSensor_Data.Speed > 35
ORDER BY CarSensor_Data.Speed DESC
OPTION (FORCE EXTERNALPUSHDOWN); -- or OPTION (DISABLE EXTERNALPUSHDOWN)
Importera data med PolyBase
Följande fråga importerar externa data till SQL Server. Det här exemplet importerar data för snabba drivrutiner till SQL Server för att göra mer djupgående analys. För att förbättra prestandan använder den columnstore-teknik.
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;
Exportera data med PolyBase
Följande fråga exporterar data från SQL Server till Azure Blob Storage. Aktivera först PolyBase-export. Skapa sedan en extern tabell för målet innan du exporterar data till den.
-- Enable INSERT into external table
EXECUTE sp_configure 'allow polybase export', 1;
RECONFIGURE;
GO
-- 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 (
DATA_SOURCE = HadoopHDP2,
LOCATION = '/old_data/2009/customerdata',
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 AS T1
INNER JOIN CarSensor_Data AS T2
ON (T1.CustomerKey = T2.CustomerKey)
WHERE T2.YearMeasured = 2009
AND T2.Speed > 40;
PolyBase-export med den här metoden kan skapa flera filer.
Visa PolyBase-objekt i SSMS
I SSMS visas externa tabeller i en separat mapp externa tabeller. Externa datakällor och externa filformat finns i undermappar under externa resurser.