PolyBase 查詢情節
適用於:SQL Server - 僅限 Windows Azure SQL 受控執行個體
下文提供使用 SQL Server (從 2016 版開始) PolyBase 功能的查詢範例。 使用這些範例之前,您必須先安裝和設定 PolyBase。 如需詳細資訊,請參閱 PolyBase 概觀。
重要
在 SQL Server 2022 (16.x) 中,不支援 Hadoop 的 PolyBase 外部來源。 如需詳細資訊,請參閱 PolyBase 連接器。
對外部資料表執行 Transact-SQL 陳述式,或使用 BI 工具來查詢外部資料表。
從外部資料表進行 SELECT
從已定義外部資料表傳回資料的簡單查詢。
SELECT TOP 10 * FROM [dbo].[SensorData];
包含述詞的簡單查詢。
SELECT * FROM [dbo].[SensorData]
WHERE Speed > 65;
JOIN 具有本機資料表的外部資料表
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
匯入資料
將資料從 Hadoop 或 Azure 儲存體匯入至 SQL Server 以便持續儲存。 針對 SQL Server 中的永續性儲存體,使用 SELECT INTO 來匯入外部資料表所參考的資料。 即時建立關聯式資料表,然後在第二個步驟中於資料表上建立資料行存放區索引。
-- 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;
匯出資料
將資料從 SQL Server 匯出至 Hadoop 或 Azure 儲存體。
首先,將 'allow polybase export' 的 sp_configure
值設定成 1,以啟用匯出功能。 接下來,建立指向目的地目錄的外部資料表。 CREATE EXTERNAL TABLE 陳述式會建立目的地目錄,如果它尚未存在。 然後,使用 INSERT INTO 將資料從本機 SQL Server 資料表匯出至外部資料來源。
SELECT 陳述式的結果會以指定的檔案格式匯出到指定的位置。 外部檔案命名為 QueryID_date_time_ID.format,其中 ID 是累加識別碼,而 format 是匯出的資料格式。 例如,某個檔案的名稱可能是 QID776_20160130_182739_0.orc。
注意
當透過 PolyBase 將檔案匯出到 Hadoop 或 Azure Blob 儲存體時,會如 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;
新目錄檢視
下列新目錄檢視顯示外部資源。
SELECT * FROM sys.external_data_sources;
SELECT * FROM sys.external_file_formats;
SELECT * FROM sys.external_tables;
使用 is_external
SELECT name, type, is_external FROM sys.tables WHERE name='myTableName'
下一步
若要深入了解疑難排解,請參閱 PolyBase 疑難排解。