PolyBase configureren voor toegang tot externe gegevens in Azure Blob Storage
Van toepassing op: SQL Server (alleen Windows)
Azure SQL Database
Azure Synapse Analytics
Analytics Platform System (PDW)
In het artikel wordt uitgelegd hoe u PolyBase op een SQL Server-exemplaar gebruikt om een query uit te voeren op externe gegevens in Azure Blob Storage.
Voorwaarden
Als u PolyBase nog niet hebt geïnstalleerd, raadpleegt u PolyBase-installatie. In het installatieartikel worden de vereisten uitgelegd.
SQL Server 2022
Configureer in SQL Server 2022 (16.x) uw externe gegevensbronnen voor het gebruik van nieuwe connectors wanneer u verbinding maakt met Azure Storage. De onderstaande tabel bevat een overzicht van de wijziging:
Externe gegevensbron | Van | Aan |
---|---|---|
Azure Blob Storage | wasb[s] | ABS |
ADLS Gen 2 | abfs[s] | adls |
Azure Blob Storage-connectiviteit configureren
Configureer eerst SQL Server PolyBase voor het gebruik van Azure Blob Storage.
Voer sp_configure uit met hadoop-connectiviteit ingesteld op een Azure Blob Storage-provider. Zie PolyBase-connectiviteitsconfiguratieom de waarde voor providers te vinden. De Hadoop-connectiviteit is standaard ingesteld op 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
Start SQL Server opnieuw met behulp van services.msc. Als u SQL Server opnieuw start, worden deze services opnieuw opgestart:
- SQL Server PolyBase Data Movement Service
- SQL Server PolyBase Engine
Start SQL Server opnieuw met behulp van services.msc. Als u SQL Server opnieuw start, worden deze services opnieuw opgestart:
- SQL Server PolyBase Gegevensverplaatsingsdienst
- SQL Server PolyBase Engine
Een externe tabel configureren
Als u een query wilt uitvoeren op de gegevens in uw Hadoop-gegevensbron, moet u een externe tabel definiëren die moet worden gebruikt in Transact-SQL query's. In de volgende stappen wordt beschreven hoe u de externe tabel configureert.
Maak een hoofdsleutel in de database. De hoofdsleutel is vereist om het referentiegeheim te versleutelen.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
Een databasereferentie maken voor Azure Blob Storage;
IDENTITY
kan alles zijn omdat deze niet wordt gebruikt.-- 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>';
Maak een externe gegevensbron met CREATE EXTERNAL DATA SOURCE. Houd er rekening mee dat bij het maken van verbinding met Azure Storage via de
wasb[s]
-connector verificatie moet worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (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 );
Maak een externe bestandsindeling met CREATE EXTERNAL FILE FORMAT.
-- 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))
Maak een externe tabel die verwijst naar gegevens die zijn opgeslagen in Azure Storage met CREATE EXTERNAL TABLE. In dit voorbeeld bevatten de externe gegevens autosensorgegevens;
LOCATION
kan niet/
worden, en/Demo/
hoeft, zoals in dit voorbeeld, niet eerder te bestaan.-- 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 );
Statistieken maken voor een externe tabel.
CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)
Maak een hoofdsleutel in de database. De hoofdsleutel is vereist om het referentiegeheim te versleutelen.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
Maak een database-scope credential voor Azure Blob Storage met behulp van een Shared Access Signature (SAS);
IDENTITY
kan alles zijn omdat deze niet wordt gebruikt.CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- Remove ? from the beginning of the SAS token SECRET = '<azure_shared_access_signature>' ;
Maak een externe gegevensbron met CREATE EXTERNAL DATA SOURCE. Houd er rekening mee dat wanneer u via de WASB[s]-connector verbinding maakt met Azure Storage, verificatie met een Shared Access Signature (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 );
Maak een externe bestandsindeling aan met behulp van CREATE EXTERNAL FILE FORMAT.
-- 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))
Maak een externe tabel die verwijst naar gegevens die zijn opgeslagen in Azure Storage met CREATE EXTERNAL TABLE. In dit voorbeeld bevatten de externe gegevens autosensorgegevens;
LOCATION
kan niet worden/
, maar/Demo/
zoals in dit voorbeeld niet eerder hoeft te bestaan.-- 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 );
Statistieken maken voor een externe tabel.
CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)
PolyBase-queries
Er zijn drie functies waarvoor PolyBase geschikt is:
- Ad-hocquery's voor externe tabellen.
- Gegevens importeren.
- Gegevens exporteren.
De volgende query's bevatten voorbeeldgegevens van fictieve autosensorgegevens.
Ad-hocvragen
De volgende ad-hocquery voegt relationele gegevens samen met Hadoop-gegevens. Het selecteert klanten die sneller rijden dan 35 mph en wordt toegevoegd aan gestructureerde klantgegevens die zijn opgeslagen in SQL Server met autosensorgegevens die zijn opgeslagen in 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)
Gegevens importeren met PolyBase
Met de volgende query worden externe gegevens geïmporteerd in SQL Server. In dit voorbeeld worden gegevens geïmporteerd voor snelle stuurprogramma's in SQL Server om uitgebreidere analyses uit te voeren. Ter verbetering van de prestaties maakt het gebruik van columnstore-technologie.
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 met PolyBase
Met de volgende query worden gegevens geëxporteerd van SQL Server naar Azure Blob Storage. Schakel eerst PolyBase-export in. Maak vervolgens een externe tabel voor de bestemming voordat u er gegevens naar exporteert.
-- 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 met deze methode kan meerdere bestanden maken.
PolyBase-objecten weergeven in SSMS
In SSMS worden externe tabellen weergegeven in een afzonderlijke map Externe tabellen. Externe gegevensbronnen en externe bestandsindelingen bevinden zich in submappen onder Externe resources.
Volgende stappen
Zie PolyBase Transact-SQL referentievoor meer handleidingen over het maken van externe gegevensbronnen en externe tabellen naar verschillende gegevensbronnen.
Bekijk meer manieren om PolyBase te gebruiken en te bewaken in de volgende artikelen: