PolyBase クエリのシナリオ
適用対象: SQL Server - Windows のみ Azure SQL Managed Instance
この記事では、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;
外部テーブルをローカル テーブルと結合する
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 にインポートします。 SELECT INTO を使用して、SQL Server の永続記憶装置に、外部テーブルで参照されるデータをインポートします。 リレーショナル テーブルをその場で作成し、2 番目の手順でテーブル上に列ストア インデックスを作成します。
-- 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;
データのエクスポート
Hadoop または Azure ストレージに SQL Server からのデータをエクスポートします。
まず、'allow polybase export' の sp_configure
の値を 1 に設定してエクスポート機能を有効にします。 次に、変換先ディレクトリを指す外部テーブルを作成します。 CREATE EXTERNAL TABLE ステートメントは、変換先ディレクトリが存在しない場合にそれを作成します。 次に、ローカルの SQL Server テーブルからのデータを外部データ ソースをエクスポートするのに INSERT INTO を使用します。
SELECT ステートメントの結果セットは、指定したファイル形式で指定した場所にエクスポートされます。 外部ファイルの名前は QueryID_date_time_ID.formatです ( ID は増分識別子、 format はエクスポートされるデータ形式)。 たとえば、あるファイルの名前は QID776_20160130_182739_0.orc となります。
Note
データを PolyBase 経由で Hadoop または Azure Blob Storage にエクスポートする場合、データだけがエクスポートされ、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 のトラブルシューティング」を参照してください。