Bagikan melalui


Mengonfigurasi PolyBase untuk mengakses data eksternal di Azure Blob Storage

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru di Windows

Artikel ini menjelaskan cara menggunakan PolyBase pada instans SQL Server untuk mengkueri data eksternal di Azure Blob Storage.

Prasyarat

Jika Anda belum menginstal PolyBase, lihat Menginstal PolyBase di Windows. Artikel penginstalan menjelaskan prasyarat.

SQL Server 2022

Di SQL Server 2022 (16.x), konfigurasikan sumber data eksternal Anda untuk menggunakan konektor baru saat Anda tersambung ke Azure Storage. Tabel berikut ini meringkas perubahan:

Sumber Data Eksternal Dari Untuk
Azure Blob Storage wasb[s] otot perut
ADLS Gen2 abfs[s] adls

Mengonfigurasi konektivitas penyimpanan Azure Blob Storage

Pertama, konfigurasikan SQL Server PolyBase untuk menggunakan Azure Blob Storage.

  1. Jalankan sp_configure dengan 'hadoop connectivity' disetel ke penyedia Azure Blob Storage. Untuk menemukan nilai untuk penyedia layanan, lihat Konfigurasi konektivitas PolyBase. Secara Default, konektivitas Hadoop diatur ke 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. Mulai ulang SQL Server menggunakan services.msc. Memulai ulang SQL Server memulai ulang layanan ini:

    • Layanan Pergerakan Data SQL Server PolyBase
    • Mesin PolyBase SQL Server

    Cuplikan layar hentikan dan mulai layanan PolyBase di services.msc.

  1. Mulai ulang SQL Server menggunakan services.msc. Memulai ulang SQL Server memulai ulang layanan ini:

    • Layanan Pergerakan Data SQL Server PolyBase
    • Mesin PolyBase SQL Server

    Cuplikan layar hentikan dan mulai layanan PolyBase di services.msc.

Mengonfigurasi sebuah tabel eksternal

Untuk mengkueri data di sumber data Hadoop, Anda harus menentukan tabel eksternal untuk digunakan dalam kueri Transact-SQL. Langkah-langkah berikut menjelaskan cara mengonfigurasi tabel eksternal.

  1. Buat kunci master database (DMK) pada database. DMK diperlukan untuk mengenkripsi rahasia kredensial.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
    
  2. Membuat kredensial cakupan database untuk Azure Blob Storage; IDENTITY bisa apa saja karena tidak digunakan.

    -- 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. Buat sumber data eksternal dengan CREATE EXTERNAL DATA SOURCE. Saat Anda tersambung ke Azure Storage melalui wasb[s] konektor, autentikasi harus dilakukan dengan kunci akun penyimpanan, bukan dengan tanda tangan akses bersama (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. Buat format file eksternal dengan 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. Buat tabel eksternal yang menunjuk ke data yang disimpan di penyimpanan Azure dengan CREATE EXTERNAL TABLE. Dalam contoh ini, data eksternal berisi data sensor mobil; LOCATION tidak bisa / tetapi /Demo/ seperti dalam contoh ini tidak perlu ada sebelumnya.

    -- 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. Buat statistik pada tabel eksternal.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    
  1. Buat kunci master database (DMK) pada database. DMK diperlukan untuk mengenkripsi rahasia kredensial.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';
    
  2. Membuat kredensial lingkup database untuk Azure Blob Storage menggunakan tanda tangan akses bersama (SAS); IDENTITY bisa apa saja karena tidak digunakan.

    CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         -- Remove ? from the beginning of the SAS token
         SECRET = '<azure_shared_access_signature>';
    
  3. Buat sumber data eksternal dengan CREATE EXTERNAL DATA SOURCE. Saat menyambungkan ke Azure Storage melalui konektor WASB,autentikasi dengan tanda tangan akses bersama (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
    );
    
  4. Buat format file eksternal dengan 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. Buat tabel eksternal yang menunjuk ke data yang disimpan di penyimpanan Azure dengan CREATE EXTERNAL TABLE. Dalam contoh ini, data eksternal berisi data sensor mobil; LOCATION tidak bisa / tetapi /Demo/ seperti dalam contoh ini tidak perlu ada sebelumnya.

    -- 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. Buat statistik pada tabel eksternal.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    

Kueri PolyBase

Ada tiga fungsi yang cocok untuk PolyBase:

  • Kueri terhadap tabel eksternal secara ad hoc.
  • Mengimpor data.
  • Mengekspor data.

Kueri berikut memberikan contoh dengan data sensor mobil fiktif.

Kueri ad hoc

Kueri ad hoc berikut menggabungkan relasional dengan data Hadoop. Ini memilih pelanggan yang berkendara lebih cepat dari 35 mph, dan bergabung dengan data pelanggan terstruktur yang disimpan di SQL Server dengan data sensor mobil yang disimpan di 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)

Mengimpor data dengan PolyBase

Kueri berikut mengimpor data eksternal ke SQL Server. Contoh ini mengimpor data untuk driver cepat ke SQL Server untuk melakukan analisis yang lebih mendalam. Untuk meningkatkan performa, teknologi columnstore digunakan.

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;

Mengekspor data dengan PolyBase

Kueri berikut mengekspor data dari SQL Server ke Azure Blob Storage. Pertama aktifkan ekspor PolyBase. Kemudian, buat tabel eksternal untuk tujuan sebelum mengekspor data ke dalamnya.

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

Ekspor PolyBase dengan metode ini mungkin membuat beberapa file.

Menampilkan objek PolyBase di SSMS

Di SSMS, tabel eksternal ditampilkan dalam folder Tabel Eksternal Terpisah. Sumber data eksternal dan format file eksternal berada dalam subfolder di bawah Sumber Daya Eksternal.

Cuplikan layar objek PolyBase di SSMS.