PolyBase 쿼리 시나리오

적용 대상:SQL Server - Windows 전용 Azure SQL Managed Instance

이 아티클에서는 SQL Server(2016부터)의 PolyBase 기능을 사용하는 쿼리의 예제를 제공합니다. 이러한 예제를 사용하기 전에 먼저 PolyBase를 설치하고 구성해야 합니다. 자세한 내용은 PolyBase 개요참조하세요.

Important

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;

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

데이터 가져오기

Hadoop 또는 Azure Storage의 데이터를 영구적으로 스토리지하기 위해 SQL Server로 가져옵니다. SELECT INTO를 사용하여 SQL Server의 영구 스토리지에 대해 외부 테이블에서 참조하는 데이터를 가져옵니다. 먼저 대략적인 관계형 테이블을 만든 다음 두 번째 단계에서 테이블 위에 columnstore 인덱스를 만듭니다.

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

데이터 내보내기

SQL Server에서 Hadoop 또는 Azure 스토리지로 데이터를 내보냅니다.

먼저 'polybase 내보내기 허용' 값을 1로 설정하여 내보내기 기능을 사용하도록 설정합니다sp_configure. 다음으로 대상 디렉터리를 가리키는 외부 테이블을 만듭니다. CREATE EXTERNAL TABLE 문은 대상 디렉터리가 아직 없는 경우 만듭니다. 그런 다음 INSERT INTO를 사용하여 로컬 SQL Server 테이블에서 외부 데이터 원본으로 데이터를 내보냅니다.

SELECT 문의 결과는 지정된 파일 형식으로 지정된 위치로 내보냅니다. 외부 파일의 이름은 QueryID_date_time_ID.format입니다. 여기서 ID 는 증분 식별자이며 형식 은 내보낸 데이터 형식입니다. 예를 들어 한 파일 이름은 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 문제 해결을 참조 하세요.