A PolyBase konfigurálása külső adatok elérésére az Azure Blob Storage-ban

A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók Windows rendszeren

A cikk bemutatja, hogyan használható a PolyBase egy SQL Server-példányon külső adatok lekérdezésére az Azure Blob Storage-ban.

Előfeltételek

Ha még nem telepítette a PolyBase-t, olvassa el a PolyBase telepítése Windows rendszeren című témakört. A telepítési cikk ismerteti az előfeltételeket.

SQL Server 2022

Az SQL Server 2022-ben (16.x) konfigurálja a külső adatforrásokat új összekötők használatára az Azure Storage-hoz való csatlakozáskor. Az alábbi táblázat összefoglalja a módosítást:

Külső adatforrás Ettől kezdve Hoz
Azure Blob Storage wasb[s] Abs
ADLS Gen 2 abfs[s] adls

Az Azure Blob Storage-kapcsolat konfigurálása

Először konfigurálja az SQL Server PolyBase-t az Azure Blob Storage használatára.

  1. Futtassa a sp_configure parancsot úgy, hogy azt egy Azure Blob Storage-szolgáltatóként állítja be'hadoop connectivity'. A szolgáltatók értékének megkereséséhez tekintse meg a PolyBase kapcsolati konfigurációját. A Hadoop-kapcsolat alapértelmezés szerint a következőre 7van állítva: .

    -- 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. Indítsa újra az SQL Servert a services.mschasználatával. Az SQL Server újraindítása a következő szolgáltatásokat indítja újra:

    • SQL Server PolyBase adatáthelyezési szolgáltatás
    • SQL Server PolyBase-motor

    Képernyőkép a PolyBase-szolgáltatások leállításáról és elindításáról a services.msc-ben.

  1. Indítsa újra az SQL Servert a services.mschasználatával. Az SQL Server újraindítása a következő szolgáltatásokat indítja újra:

    • SQL Server PolyBase adatáthelyezési szolgáltatás
    • SQL Server PolyBase-motor

    Képernyőkép a PolyBase-szolgáltatások leállításáról és elindításáról a services.msc-ben.

Külső tábla konfigurálása

A Hadoop-adatforrásban lévő adatok lekérdezéséhez meg kell adnia egy külső táblát, amelyet Transact-SQL lekérdezésekben kell használni. Az alábbi lépések a külső tábla konfigurálását ismertetik.

  1. Hozzon létre egy adatbázis-főkulcsot (DMK) az adatbázisban. A hitelesítő adatok titkos kulcsának titkosításához a DMK szükséges.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
    
  2. Adatbázis-hatókörű hitelesítő adatok létrehozása az Azure Blob Storage-hoz; IDENTITY bármi lehet, mivel nincs használatban.

    -- 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. Hozzon létre egy külső adatforrást a .CREATE EXTERNAL DATA SOURCE Ha az összekötőn keresztül csatlakozik az Azure Storage-hoz, a wasb[s] hitelesítést tárfiók-kulccsal kell elvégezni, nem pedig közös hozzáférésű jogosultságkóddal (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. Hozzon létre egy külső fájlformátumot a(z) CREATE EXTERNAL FILE FORMAT használatával.

    -- 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. Hozzon létre egy külső táblát, amely Azure tárolóban tárolt adatokra mutat a következővelCREATE EXTERNAL TABLE: . Ebben a példában a külső adatok autóérzékelő adatokat tartalmaznak; LOCATION nem lehet /, de /Demo/, mint ebben a példában, nem kell korábban léteznie.

    -- 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. Statisztikák létrehozása külső táblán.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    
  1. Hozzon létre egy adatbázis-főkulcsot (DMK) az adatbázisban. A hitelesítő adatok titkos kulcsának titkosításához a DMK szükséges.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
    
  2. Adatbázis-hatókörű hitelesítő adatok létrehozása az Azure Blob Storage-hoz közös hozzáférésű jogosultságkód (SAS) használatával; IDENTITY bármi lehet, mivel nincs használatban.

    CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         -- Remove ? from the beginning of the SAS token
         SECRET = '<azure_shared_access_signature>';
    
  3. Hozzon létre egy külső adatforrást a .CREATE EXTERNAL DATA SOURCE Amikor a WASB[s] összekötőn keresztül csatlakozik az Azure Storage-hoz, a hitelesítés közös hozzáférésű jogosultságkóddal (SAS) történik.

    -- 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. Hozzon létre egy külső fájlformátumot a(z) CREATE EXTERNAL FILE FORMAT használatával.

    -- 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. Hozzon létre egy külső táblát, amely Azure tárolóban tárolt adatokra mutat a következővelCREATE EXTERNAL TABLE: . Ebben a példában a külső adatok autóérzékelő adatokat tartalmaznak; LOCATION nem lehet /, de /Demo/, mint ebben a példában, nem kell korábban léteznie.

    -- 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. Statisztikák létrehozása külső táblán.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    

PolyBase-lekérdezések

A PolyBase három függvényhez használható:

  • Alkalmi lekérdezések külső táblákon.
  • Adatok importálása.
  • Adatok exportálása.

Az alábbi lekérdezések példaként szolgálnak az autóérzékelők fiktív adataival.

Alkalmi lekérdezések

Az alábbi alkalmi lekérdezés relációs viszonyt illeszt a Hadoop-adatokhoz. Kiválasztja azokat az ügyfeleket, akik 35 mph-nál gyorsabban hajtanak, és a Hadoopban tárolt autóérzékelős adatokkal csatlakozik az SQL Serverben tárolt strukturált ügyféladatokhoz.

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)

Adatok importálása a PolyBase használatával

Az alábbi lekérdezés külső adatokat importál az SQL Serverbe. Ez a példa a gyors illesztőprogramok adatait importálja az SQL Serverbe, hogy részletesebb elemzést végezhessenek. A teljesítmény javítása érdekében oszloptároló technológiát használ.

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;

Adatok exportálása a PolyBase használatával

Az alábbi lekérdezés adatokat exportál az SQL Serverről az Azure Blob Storage-ba. Először engedélyezze a PolyBase exportálását. Ezután hozzon létre egy külső táblát a célhelyhez az adatok exportálása előtt.

-- 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;

Az ezzel a módszerrel történő PolyBase-exportálás több fájlt is létrehozhat.

PolyBase-objektumok megtekintése az SSMS-ben

Az SSMS-ben a külső táblák külön mappában jelennek meg, Külső táblák. A külső adatforrások és a külső fájlformátumok a külső erőforrások almappáiban találhatók.

Képernyőkép a PolyBase-objektumokról az SSMS-ben.