Aracılığıyla paylaş


PolyBase'i Azure Blob Depolama'daki dış verilere erişecek şekilde yapılandırma

Şunlar için geçerlidir: Windows'da SQL Server 2016 (13.x) ve sonraki sürümleri

Makalede, Azure Blob Depolama'daki dış verileri sorgulamak için BIR SQL Server örneğinde PolyBase'in nasıl kullanılacağı açıklanmaktadır.

Önkoşullar

PolyBase'i yüklemediyseniz bkz. Windows'a PolyBase yükleme. Yükleme makalesinde önkoşullar açıklanmaktadır.

SQL Server 2022

SQL Server 2022'de (16.x), Azure Depolama'ya bağlandığınızda dış veri kaynaklarınızı yeni bağlayıcıları kullanacak şekilde yapılandırın. Aşağıdaki tabloda değişiklik özetlemektedir:

Dış Veri Kaynağı Kaynak İçin
Azure Blob Depolama wasb[s] Karın kasları
ADLS 2. Nesil abfs[s] adls

Azure Blob Depolama bağlantısını yapılandırma

İlk olarak, SQL Server PolyBase'i Azure Blob Depolama'yı kullanacak şekilde yapılandırın.

  1. Azure Blob Depolama sağlayıcısı olarak ayarlanmış olan ile 'hadoop connectivity' çalıştırın. Sağlayıcıların değerini bulmak için bkz. PolyBase bağlantı yapılandırması. Varsayılan olarak, Hadoop bağlantısı olarak 7ayarlanır.

    -- 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. services.msckullanarak SQL Server'i yeniden başlatın. SQL Server'ın yeniden başlatılması şu hizmetleri yeniden başlatır:

    • SQL Server PolyBase Veri Taşıma Hizmeti
    • SQL Server PolyBase Altyapısı

    services.msc dosyasında PolyBase hizmetlerini durdurma ve başlatma ekran görüntüsü.

  1. services.msckullanarak SQL Server'i yeniden başlatın. SQL Server'ın yeniden başlatılması şu hizmetleri yeniden başlatır:

    • SQL Server PolyBase Veri Taşıma Hizmeti
    • SQL Server PolyBase Altyapısı

    services.msc dosyasında PolyBase hizmetlerini durdurma ve başlatma ekran görüntüsü.

Dış tabloyu yapılandırın

Hadoop veri kaynağınızdaki verileri sorgulamak için, Transact-SQL sorgularda kullanılacak bir dış tablo tanımlamanız gerekir. Aşağıdaki adımlarda dış tablonun nasıl yapılandırıldığı açıklanmaktadır.

  1. Veritabanında bir veritabanı ana anahtarı (DMK) oluşturun. Kimlik bilgisi sırrını şifrelemek için DMK gereklidir.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
    
  2. Azure Blob Depolama için veritabanı kapsamlı kimlik bilgisi oluşturun; IDENTITY kullanılmadığı için herhangi bir şey olabilir.

    -- 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. CREATE EXTERNAL DATA SOURCEile bir dış veri kaynağı oluşturun. Bağlayıcı aracılığıyla Azure Depolama'ya wasb[s] bağlandığınızda, kimlik doğrulaması paylaşılan erişim imzası (SAS) ile değil depolama hesabı anahtarıyla yapılmalıdır.

    -- 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. CREATE EXTERNAL FILE FORMATile bir dış dosya biçimi oluşturun.

    -- 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. CREATE EXTERNAL TABLE ile Azure depolamada depolanan verilere işaret eden bir dış tablo oluşturun. Bu örnekte, dış veriler araba sensörü verilerini içerir; LOCATION/ olamaz ancak bu örnekte olduğu gibi /Demo/ daha önce mevcut olması gerekmez.

    -- 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. Dış tabloda istatistikler oluşturun.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    
  1. Veritabanında bir veritabanı ana anahtarı (DMK) oluşturun. Kimlik bilgisi sırrını şifrelemek için DMK gereklidir.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
    
  2. Azure Blob Depolama için paylaşılan erişim imzası (SAS) kullanarak veritabanı kapsamlı kimlik bilgisi oluşturun; IDENTITY kullanılmadığı için herhangi bir şey olabilir.

    CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         -- Remove ? from the beginning of the SAS token
         SECRET = '<azure_shared_access_signature>';
    
  3. CREATE EXTERNAL DATA SOURCEile bir dış veri kaynağı oluşturun. WASB[s] bağlayıcısı aracılığıyla Azure Depolama'ya bağlanırken, paylaşılan erişim imzası (SAS) ile kimlik doğrulaması.

    -- 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. CREATE EXTERNAL FILE FORMATile bir dış dosya biçimi oluşturun.

    -- 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. CREATE EXTERNAL TABLE ile Azure depolamada depolanan verilere işaret eden bir dış tablo oluşturun. Bu örnekte, dış veriler araba sensörü verilerini içerir; LOCATION/ olamaz ancak bu örnekte olduğu gibi /Demo/ daha önce mevcut olması gerekmez.

    -- 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. Dış tabloda istatistikler oluşturun.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    

PolyBase sorguları

PolyBase'in uygun olduğu üç işlev vardır:

  • Dış tablolara yönelik anlık sorgular.
  • Veri aktarılıyor.
  • Veriler dışarı aktarıyor.

Aşağıdaki sorgular, kurgusal araba algılayıcısı verileriyle örnek sağlar.

Geçici sorgular

Aşağıdaki geçici sorgu, ilişkisel verileri Hadoop verileriyle birleştirir. 35 mph'den daha hızlı kullanan müşterileri seçer ve Hadoop'ta depolanan araç sensörü verileriyle SQL Server'da depolanan yapılandırılmış müşteri verilerine katılır.

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)

PolyBase ile verileri içeri aktarma

Aşağıdaki sorgu dış verileri SQL Server'a aktarır. Bu örnek, daha ayrıntılı analiz yapmak için hızlı sürücülerin verilerini SQL Server'a aktarır. Performansı geliştirmek için columnstore teknolojisini kullanır.

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;

PolyBase ile verileri dışarı aktarma

Aşağıdaki sorgu verileri SQL Server'dan Azure Blob Depolama'ya aktarır. İlk olarak PolyBase dışarı aktarmayı etkinleştirin. Ardından, verileri hedefe aktarmadan önce hedef için bir dış tablo oluşturun.

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

Bu yöntemle PolyBase dışarı aktarma işlemi birden çok dosya oluşturabilir.

SSMS'de PolyBase nesnelerini görüntüleme

SSMS'de dış tablolar, Dış Tablolar ayrı bir klasörde görüntülenir. Dış veri kaynakları ve dış dosya biçimleri, Dış Kaynaklaraltındaki alt klasörlerdedir.

SSMS'deki PolyBase nesnelerinin ekran görüntüsü.