Skenario kueri PolyBase

Berlaku untuk:SQL Server - Hanya Windows Azure SQL Managed Instance

Artikel ini menyediakan contoh kueri menggunakan fitur PolyBase SQL Server (dimulai dengan 2016). Sebelum menggunakan contoh ini, Anda harus terlebih dahulu menginstal dan mengonfigurasi PolyBase. Untuk informasi selengkapnya, lihat gambaran umum PolyBase.

Penting

Di SQL Server 2022 (16.x), sumber eksternal PolyBase ke Hadoop tidak didukung. Untuk informasi selengkapnya, lihat Konektor PolyBase.

Jalankan pernyataan Transact-SQL terhadap tabel eksternal atau gunakan alat BI untuk mengkueri tabel eksternal.

SELECT dari tabel eksternal

Kueri sederhana yang mengembalikan data dari tabel eksternal yang ditentukan.

SELECT TOP 10 * FROM [dbo].[SensorData];

Kueri sederhana yang menyertakan predikat.

SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65;

TABEL eksternal JOIN dengan tabel lokal

SELECT InsuranceCustomers.FirstName,
   InsuranceCustomers.LastName,
   SensorData.Speed
FROM InsuranceCustomers INNER JOIN SensorData
ON InsuranceCustomers.CustomerKey = SensorData.CustomerKey
WHERE SensorData.Speed > 65
ORDER BY SensorData.Speed DESC

Mengimpor data

Impor data dari Hadoop atau Azure Storage ke SQL Server untuk penyimpanan persisten. Gunakan SELECT INTO untuk mengimpor data yang dirujuk oleh tabel eksternal, untuk penyimpanan persisten di SQL Server. Buat tabel relasional dengan cepat, lalu buat indeks penyimpanan kolom di atas tabel di langkah kedua.

-- PolyBase scenario - import external data into SQL Server
-- Import data for fast drivers into SQL Server to do more in-depth analysis
-- Leverage columnstore technology
  
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

Ekspor data dari SQL Server ke Hadoop atau Azure Storage.

Pertama, aktifkan fungsi ekspor dengan mengatur sp_configure nilai 'izinkan ekspor polybase' ke 1. Selanjutnya, buat tabel eksternal yang menunjuk ke direktori tujuan. Pernyataan CREATE EXTERNAL TABLE membuat direktori tujuan, jika belum ada. Kemudian, gunakan INSERT INTO untuk mengekspor data dari tabel SQL Server lokal ke sumber data eksternal.

Hasil pernyataan SELECT diekspor ke lokasi yang ditentukan dalam format file yang ditentukan. File eksternal diberi nama QueryID_date_time_ID.format, di mana ID adalah pengidentifikasi dan format inkremental adalah format data yang diekspor. Misalnya, satu nama file mungkin QID776_20160130_182739_0.orc.

Catatan

Saat mengekspor data ke Hadoop atau Azure Blob Storage melalui PolyBase, hanya data yang diekspor, bukan nama kolom (metadata) seperti yang didefinisikan dalam perintah CREATE EXTERNAL TABLE.

-- PolyBase scenario  - export data from SQL Server to Hadoop
-- 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 (
        LOCATION='/old_data/2009/customerdata',
        DATA_SOURCE = HadoopHDP2,
        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.FastCustomers2009
SELECT T.* FROM Insured_Customers T1 JOIN CarSensor_Data T2
ON (T1.CustomerKey = T2.CustomerKey)
WHERE T2.YearMeasured = 2009 and T2.Speed > 40;

Tampilan katalog baru

Tampilan katalog baru berikut ini memperlihatkan sumber daya eksternal.

SELECT * FROM sys.external_data_sources;
SELECT * FROM sys.external_file_formats;
SELECT * FROM sys.external_tables;

Menentukan apakah tabel adalah tabel eksternal dengan menggunakan is_external

SELECT name, type, is_external FROM sys.tables WHERE name='myTableName'

Langkah berikutnya

Untuk mempelajari selengkapnya tentang pemecahan masalah, lihat Pemecahan masalah PolyBase.