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로 가져옵니다. SQL Server에 영구적으로 저장하기 위해 SELECT INTO를 사용하여 외부 테이블이 참조하는 데이터를 가져옵니다. 먼저 대략적인 관계형 테이블을 만든 다음 두 번째 단계에서 테이블 위에 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 내보내기 허용'의 sp_configure
값을 1로 설정하여 내보내기 기능을 사용하도록 설정합니다. 다음으로 대상 디렉터리를 가리키는 외부 테이블을 만듭니다. CREATE EXTERNAL TABLE 문은 대상 디렉터리를 만듭니다(아직 없는 경우). 그런 다음 INSERT INTO를 사용하여 로컬 SQL Server 테이블에서 외부 데이터 원본으로 데이터를 내보냅니다.
SELECT 문의 결과는 지정된 파일 형식으로 지정된 위치로 내보냅니다. 외부 파일은 hdfs_folder에 기록되고 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 문제 해결을 참조하세요.