Sdílet prostřednictvím


Konfigurace PolyBase pro přístup k externím datům ve službě Azure Blob Storage

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.

  1. 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 na 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;
    
  2. 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

    Snímek obrazovky se zastavením a spuštěním služeb PolyBase v services.msc

  1. 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

    Snímek obrazovky se zastavením a spuštěním služeb PolyBase v services.msc

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.

  1. 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>';
    
  2. Vytvořte přihlašovací údaje s databázovým oborem pro Azure Blob Storage; IDENTITY můž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>';
    
  3. 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
    );
    
  4. 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)
    );
    
  5. 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ů; LOCATION nemůž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
    );
    
  6. Vytvoření statistiky pro externí tabulku

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    
  1. 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>';
    
  2. 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); IDENTITY můž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>';
    
  3. 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
    );
    
  4. 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)
    );
    
  5. 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ů; LOCATION nemůž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
    );
    
  6. 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.

Snímek obrazovky s objekty PolyBase v SSMS