Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
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 ke7.-- 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;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
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
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.
Buat kunci master database (DMK) pada database. DMK diperlukan untuk mengenkripsi rahasia kredensial.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';Membuat kredensial cakupan database untuk Azure Blob Storage;
IDENTITYbisa 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>';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 );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) );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;
LOCATIONtidak 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 );Buat statistik pada tabel eksternal.
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
Buat kunci master database (DMK) pada database. DMK diperlukan untuk mengenkripsi rahasia kredensial.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';Membuat kredensial lingkup database untuk Azure Blob Storage menggunakan tanda tangan akses bersama (SAS);
IDENTITYbisa 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>';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 );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) );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;
LOCATIONtidak 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 );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.