PolyBase クエリのシナリオPolyBase query scenarios

適用対象: ○SQL Server (Windows のみ)×Azure SQL Database ×Azure SQL Data Warehouse ×Parallel Data Warehouse APPLIES TO: yesSQL Server (Windows only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

この記事では、SQL Server (2016 以降) の PolyBase 機能を使用するクエリの例を示します。This article provides examples of queries using the PolyBase feature of SQL Server (starting with 2016). これらの例を使用する前に、先に PolyBase をインストールして構成しておく必要があります。Before using these examples, you must first install and configure PolyBase. 詳細については、PolyBase の概要に関する記事を参照してください。For more information, see the PolyBase overview.

外部テーブルを照会するには、外部テーブルに対して Transact-SQL ステートメントを実行するか、または BI ツールを使用します。Run Transact-SQL statements against external tables or use BI tools to query external tables.

外部テーブルからの SELECTSELECT from external table

定義済みの外部テーブルからデータを返す単純なクエリです。A simple query that returns data from a defined external table.

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

述語を含む単純なクエリです。A simple query that includes a predicate.

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

外部テーブルをローカル テーブルと結合するJOIN external tables with local tables

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  
  

データのインポートImport data

Hadoop または Azure ストレージからデータを永続的なストレージの SQL Server にインポートします。Import data from Hadoop or Azure Storage into SQL Server for persistent storage. SELECT INTO を使用して、SQL Server の永続記憶装置に、外部テーブルで参照されるデータをインポートします。Use SELECT INTO to import data referenced by an external table, for persistent storage in SQL Server. リレーショナル テーブルをその場で作成し、2 番目の手順でテーブル上に列ストア インデックスを作成します。Create a relational table on-the-fly, and then create a column-store index on top of the table in a second step.

-- 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;  

データのエクスポートExport data

Hadoop または Azure ストレージに SQL Server からのデータをエクスポートします。Export data from SQL Server to Hadoop or Azure Storage.

まず、'allow polybase export' の sp_configure 値を 1 に設定してエクスポート機能を有効にします。First, enable export functionality by setting the sp_configure value of 'allow polybase export' to 1. 次に、変換先ディレクトリを指す外部テーブルを作成します。Next, create an external table that points to the destination directory. CREATE EXTERNAL TABLE ステートメントは、変換先ディレクトリが存在しない場合にそれを作成します。The CREATE EXTERNAL TABLE statement creates the destination directory, if it doesn't already exist. 次に、ローカルの SQL Server テーブルからのデータを外部データ ソースをエクスポートするのに INSERT INTO を使用します。Then, use INSERT INTO to export data from a local SQL Server table to the external data source.

SELECT ステートメントの結果セットは、指定したファイル形式で指定した場所にエクスポートされます。The results of the SELECT statement are exported to the specified location in the specified file format. 外部ファイルの名前は QueryID_date_time_ID.formatです ( ID は増分識別子、 format はエクスポートされるデータ形式)。The external files are named QueryID_date_time_ID.format, where ID is an incremental identifier and format is the exported data format. たとえば、あるファイルの名前は QID776_20160130_182739_0.orc となります。For example, one file name might be QID776_20160130_182739_0.orc.

注意

データを PolyBase 経由で Hadoop または Azure Blob Storage にエクスポートする場合、データだけがエクスポートされ、CREATE EXTERNAL TABLE コマンドで定義した列名 (メタデータ) はエクスポートされません。When exporting data to Hadoop or Azure Blob Storage via PolyBase, only the data is exported, not the column names (metadata) as defined in the CREATE EXTERNAL TABLE command.

-- 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;  

新しいカタログ ビューNew catalog views

次の新しいカタログ ビューには、外部のリソースが表示されます。The following new catalog views show external resources.

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

テーブルが外部テーブルかどうかを判断するには、次を使用します: is_externalDetermine if a table is an external table by using is_external

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

次の手順Next steps

トラブルシューティングの詳細については、「 PolyBase のトラブルシューティング」を参照してください。To learn more about troubleshooting, see PolyBase troubleshooting.