PolyBase QueriesPolyBase Queries

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 항목에서는 SQL Server 2016의 PolyBase Guide 기능을 사용하는 예제 쿼리를 제공합니다.Here are example queries using the PolyBase Guide feature of SQL Server 2016. 이러한 예제를 사용하기 전에 PolyBase를 설정하는 데 필요한 T-SQL 문을 파악해야 합니다( PolyBase T-SQL 개체참조).Before using these examples, you must also understand the T-SQL statements required to setup PolyBase (See PolyBase T-SQL objects.)

쿼리Queries

외부 테이블에 대해 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  

Hadoop에 대한 푸시다운 계산Pushdown computation to Hadoop

여기에 푸시다운 변형이 표시됩니다.Variations of pushdown are shown here.

행의 하위 집합을 선택하기 위한 푸시다운Pushdown for selecting a subset of rows

조건자 푸시다운을 사용하여 외부 테이블에서 행 하위 집합을 선택하는 쿼리의 성능을 향상시킬 수 있습니다.Use predicate pushdown to improve performance for a query that selects a subset of rows from an external table.

여기서 SQL Server 2016은 Hadoop에서 customer.account_balance < 200000 조건자와 일치하는 행을 검색하는 맵 감소 작업을 시작합니다.Here SQL Server 2016 initiates a map-reduce job to retrieve the rows that match the predicate customer.account_balance < 200000 on Hadoop. 테이블의 모든 행을 검사하지 않고 쿼리가 성공적으로 완료될 수 있으므로 조건자 조건에 맞는 행만 SQL Server에 복사됩니다.Since the query can complete successfully without scanning all of the rows in the table, only the rows that meet the predicate criteria are copied to SQL Server. 이렇게 하면 잔액 < 200000인 고객 수가 계정 잔액 >= 200000인 고객 수에 비해 작은 경우 상당한 시간이 절약되며 필요한 임시 저장소 공간이 줄어듭니다.This saves significant time and requires less temporary storage space when the number of customer balances < 200000 is small in comparison with the number of customers with account balances >= 200000.
ImageCopy 코드 복사Copy imageCopy Code
SELECT * FROM customer WHERE customer.account_balance < 200000.SELECT * FROM customer WHERE customer.account_balance < 200000.

SELECT * FROM SensorData WHERE Speed > 65;  

열의 하위 집합을 선택하기 위한 푸시다운Pushdown for selecting a subset of columns

조건자 푸시다운을 사용하여 외부 테이블에서 열 하위 집합을 선택하는 쿼리의 성능을 향상시킬 수 있습니다.Use predicate pushdown to improve performance for a query that selects a subset of columns from an external table.

이 쿼리에서 SQL Server는 맵 감소 작업을 시작하여 customer.name과 customer.zip_code라는 두 열의 데이터만 SQL Server PDW에 복사되도록 Hadoop 구분된 텍스트 파일을 전처리합니다.In this query, SQL Server initiates a map-reduce job to pre-process the Hadoop delimited-text file so that only the data for the two columns, customer.name and customer.zip_code, will be copied to SQL Server PDW.

SELECT customer.name, customer.zip_code FROM customer WHERE customer.account_balance < 200000  

기본 식과 연산자에 대한 푸시다운Pushdown for basic expressions and operators

SQL Server는 조건자 푸시다운에 대해 다음과 같은 기본 식과 연산자를 허용합니다.SQL Server allows the following basic expressions and operators for predicate pushdown.

  • 숫자, 날짜 및 시간 값에 대한 이진 비교 연산자(<, >, =, !=, <>, >=, <=)Binary comparison operators ( <, >, =, !=, <>, >=, <= ) for numeric, date, and time values.

  • 산술 연산자(+, -, *, /, %)Arithmetic operators ( +, -, *, /, % ).

  • 논리 연산자(AND, OR)Logical operators (AND, OR).

  • 단항 연산자(NOT, IS NULL, IS NOT NULL)Unary operators (NOT, IS NULL, IS NOT NULL).

    BETWEEN, NOT, IN 및 LIKE 연산자를 푸시다운할 수도 있습니다.The operators BETWEEN, NOT, IN, and LIKE might be pushed-down. 이는 쿼리 최적화 프로그램에서 기본 관계형 연산자를 사용하는 일련의 문으로 다시 작성하는 방법에 따라 달라집니다.This depends on how the query optimizer rewrites them as a series of statements that use basic relational operators.

    이 쿼리에는 Hadoop에 푸시다운할 수 있는 여러 조건자가 있습니다.This query has multiple predicates that can be pushed down to Hadoop. SQL Server는 Hadoop에 맵 감소 작업을 푸시하여 customer.account_balance <= 200000 조건자를 수행할 수 있습니다.SQL Server can push map-reduce jobs to Hadoop to perform the predicate customer.account_balance <= 200000. BETWEEN 92656 and 92677 식은 Hadoop에 푸시할 수 있는 이진 및 논리 연산으로 구성됩니다.The expression BETWEEN 92656 and 92677 is comprised of binary and logical operations that can be pushed to Hadoop. customer.account_balance와 customer.zipcode의 논리 AND가 최종 식입니다.The logical AND of customer.account_balance and customer.zipcode is a final expression.

    이를 결합하면 맵 감소 작업에서 모든 WHERE 절을 수행할 수 있습니다.Putting this altogether, the map-reduce jobs can perform all of the WHERE clause. SELECT 조건에 맞는 데이터만 SQL Server PDW에 다시 복사됩니다.Only the data that meets the SELECT criteria will be copied back to SQL Server PDW.

SELECT * FROM customer WHERE customer.account_balance <= 200000 AND customer.zipcode BETWEEN 92656 AND 92677  

강제 푸시다운Force pushdown

SELECT * FROM [dbo].[SensorData]   
WHERE Speed > 65  
OPTION (FORCE EXTERNALPUSHDOWN);   

푸시다운 사용 안 함Disable pushdown

SELECT * FROM [dbo].[SensorData]   
WHERE Speed > 65  
OPTION (DISABLE EXTERNALPUSHDOWN);  

데이터 가져오기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 2: Import external data into SQL Server.  
-- Import data for fast drivers into SQL Server to do more in-depth analysis and  
-- 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. 먼저, '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. 그런 다음 INSERT INTO를 사용하여 로컬 SQL Server 테이블에서 외부 데이터 원본으로 데이터를 내보냅니다.Then, use INSERT INTO to export data from a local SQL Server table to an external data source. INSERT INTO 문은 대상 디렉터리가 없을 경우 새로 만듭니다. SELECT 문의 결과는 지정된 파일 형식으로 생성되어 지정한 위치로 내보내집니다.The INSERT INTO statement creates the destination directory if it does not exist and 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. 예를 들어 QID776_20160130_182739_0.orc입니다.For example, QID776_20160130_182739_0.orc.

-- PolyBase Scenario 3: 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.FastCustomer2009  
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.