PolyBase 쿼리 시나리오PolyBase query scenarios

적용 대상: 예SQL Server(Windows만 해당) 아니요Azure SQL Database 아니요Azure SQL 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.

SELECT from external tableSELECT 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 tablesJOIN 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 Storage의 데이터를 영구적으로 저장하기 위해 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. 먼저 대략적인 관계형 테이블을 만든 다음 두 번째 단계에서 테이블 위에 columnstore 인덱스를 만듭니다.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

SQL Server에서 Hadoop 또는 Azure Storage로 데이터를 내보냅니다.Export data from SQL Server to Hadoop or Azure Storage.

먼저, ‘PolyBase 내보내기 허용’의 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. 그런 다음, INSERT INTO를 사용하여 로컬 SQL Server 테이블에서 외부 데이터 원본으로 데이터를 내보냅니다.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 는 증분 식별자이고 형식 은 내보낸된 데이터 형식입니다.The external files are named QueryID_date_time_ID.format, where ID is an incremental identifier and format is the exported data format. 예를 들어 1개의 파일 이름이 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.