PolyBase クエリのシナリオ

適用対象: はいSQL Server (サポートされているすべてのバージョン) - Windows のみ はいAzure SQL Managed Instance

この記事では、SQL Server (2016 以降) の PolyBase 機能を使用するクエリの例を示します。 これらの例を使用する前に、先に 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 となります。

注意

データを 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 のトラブルシューティング」を参照してください。