Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2016 (13.x) a novější – jenom Windows
Tento článek vysvětluje, jak pomocí PolyBase v instanci SQL Serveru dotazovat externí data ve službě Azure Blob Storage.
Požadavky
Pokud jste nenainstalovali PolyBase, přečtěte si téma Instalace PolyBase ve Windows. Článek o instalaci vysvětluje požadavky.
SQL Server 2022
V SQL Serveru 2022 (16.x) nakonfigurujte externí zdroje dat tak, aby při připojování ke službě Azure Storage používaly nové konektory. Následující tabulka shrnuje změnu:
| Externí zdroj dat | Od | Do |
|---|---|---|
| Azure Blob Storage | wasb[s] | břišní svaly |
| ADLS Gen2 | abfs[s] | adls |
Konfigurace připojení ke službě Azure Blob Storage
Nejprve nakonfigurujte SQL Server PolyBase tak, aby používal Azure Blob Storage.
Spusťte sp_configure s poskytovatelem služby Azure Blob Storage nastaveným na
'hadoop connectivity'. Pokud chcete zjistit hodnotu pro poskytovatele, přečtěte si téma Konfigurace připojení PolyBase. Ve výchozím nastavení je připojení Hadoop nastaveno na7.-- 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;Restartujte SQL Server pomocí services.msc. Restartování SQL Serveru restartuje tyto služby:
- SQL Server PolyBase Data Movement Service (služba pro přesun dat)
- SQL Server PolyBase Engine
Restartujte SQL Server pomocí services.msc. Restartování SQL Serveru restartuje tyto služby:
- SQL Server PolyBase Data Movement Service (služba pro přesun dat)
- SQL Server PolyBase Engine
Konfigurace externí tabulky
Pokud chcete dotazovat data ve zdroji dat Hadoop, musíte definovat externí tabulku, která se má použít v Transact-SQL dotazech. Následující kroky popisují, jak nakonfigurovat externí tabulku.
Vytvořte v databázi hlavní klíč databáze (DMK). K šifrování tajného klíče přihlašovacích údajů se vyžaduje dmK.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';Vytvořte přihlašovací údaje s databázovým oborem pro Azure Blob Storage;
IDENTITYmůže být cokoli, protože se nepoužívá.-- 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>';Vytvořte externí zdroj dat s použitím CREATE EXTERNAL DATA SOURCE. Když se připojíte ke službě Azure Storage prostřednictvím konektoru
wasb[s], musí se ověřování provést pomocí klíče účtu úložiště, ne pomocí sdíleného přístupového podpisu (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 );Vytvořte formát externího souboru pomocí 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) );Vytvořte externí tabulku odkazující na data uložená v úložišti Azure pomocí CREATE EXTERNAL TABLE. V tomto příkladu externí data obsahují data snímačů automobilů;
LOCATIONnemůže být/, ale/Demo/, protože v tomto příkladu nemusí existovat dříve.-- 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 );Vytvoření statistiky pro externí tabulku
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
Vytvořte v databázi hlavní klíč databáze (DMK). K šifrování tajného klíče přihlašovacích údajů se vyžaduje dmK.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';Vytvořte přihlašovací údaje s omezeným dosahem pro databázi Azure Blob Storage pomocí sdíleného přístupového podpisu (SAS);
IDENTITYmůže být cokoli, protože se nepoužívá.CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- Remove ? from the beginning of the SAS token SECRET = '<azure_shared_access_signature>';Vytvořte externí zdroj dat s použitím CREATE EXTERNAL DATA SOURCE. Při připojování ke službě Azure Storage přes konektor WASB[s] je ověřování pomocí sdíleného přístupového podpisu (SAS) požadováno.
-- 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 );Vytvořte formát externího souboru pomocí 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) );Vytvořte externí tabulku odkazující na data uložená v úložišti Azure pomocí CREATE EXTERNAL TABLE. V tomto příkladu externí data obsahují data snímačů automobilů;
LOCATIONnemůže být/, ale/Demo/, protože v tomto příkladu nemusí existovat dříve.-- 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 );Vytvoření statistiky pro externí tabulku
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
Dotazy PolyBase
Existují tři funkce, pro které je PolyBase vhodná:
- Ad hoc dotazy na externí tabulky
- Import dat.
- Exportování dat.
Následující dotazy poskytují příklad s fiktivními daty snímačů aut.
Ad hoc dotazy
Následující ad hoc dotaz spojí relační s daty Hadoop. Vybere zákazníky, kteří jezdí rychleji než 35 mph, a připojí se ke strukturovaným zákaznickým datům uloženým na SQL Serveru s daty snímačů aut uloženými v Hadoopu.
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)
Import dat pomocí PolyBase
Následující dotaz naimportuje externí data do SQL Serveru. Tento příklad importuje data pro rychlé řidiče do SQL Serveru, aby bylo možné provést podrobnější analýzu. Ke zlepšení výkonu používá technologii columnstore (sloupcové úložiště).
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;
Export dat pomocí PolyBase
Následující dotaz exportuje data z SQL Serveru do služby Azure Blob Storage. Nejprve zapněte export PolyBase. Potom před exportem dat do cíle vytvořte externí tabulku pro cíl.
-- 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;
Export PolyBase pomocí této metody může vytvořit více souborů.
Zobrazení objektů PolyBase v SSMS
V nástroji SSMS se externí tabulky zobrazují v samostatné složce externí tabulky. Externí zdroje dat a formáty externích souborů jsou v podsložkách v části Externí zdroje.