Anteckning
Å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 (endast Windows)
Azure SQL Database
Azure Synapse Analytics
Analytics Platform System (PDW)
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 PolyBase-installation. 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. Tabellen nedan sammanfattar ä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-anslutning inställd på en Azure Blob Storage-provider. Information om hur du hittar värdet för providers finns i PolyBase Connectivity Configuration. 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 sp_configure @configname = 'hadoop connectivity', @configvalue = 7; GO RECONFIGURE GO
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. Genom att starta om SQL Server startas följande tjänster om:
- SQL Server PolyBase Data Movement Service
- 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 huvudnyckel i databasen. Huvudnyckeln krävs för att kryptera hemligheten för autentiseringsuppgifter.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
Skapa en databasomfattande autentiseringsuppgift för Azure Blob Storage.
IDENTITY
kan 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. Observera att när du ansluter till Azure Storage via
wasb[s]
-anslutningsappen 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;
LOCATION
kan 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 (LOCATION='/Demo/', DATA_SOURCE = AzureStorage, FILE_FORMAT = TextFileFormat );
Skapa statistik i en extern tabell.
CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)
Skapa en huvudnyckel i databasen. Huvudnyckeln krävs för att kryptera hemligheten för autentiseringsuppgifter.
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);
IDENTITY
kan 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. Observera att 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;
LOCATION
kan inte vara/
, men/Demo/
behöver, i det här exemplet, 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 (LOCATION='/Demo/', DATA_SOURCE = AzureStorage, 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 utnyttjar 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
sp_configure 'allow polybase export', 1;
reconfigure
-- 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;
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.
Nästa steg
Fler handledningar om hur du skapar externa datakällor och externa tabeller för olika datakällor finns i PolyBase Transact-SQL referens.
Utforska fler sätt att använda och övervaka PolyBase i följande artiklar: