다음을 통해 공유


Azure Blob Storage의 외부 데이터에 액세스하도록 PolyBase 구성

이 문서에서는 SQL Server 인스턴스에서 PolyBase를 사용하여 Azure Blob Storage의 외부 데이터를 쿼리하는 방법을 설명합니다.

참고 항목

APS는 현재 표준 범용 v1 LRS(로컬 중복) Azure Blob Storage만 지원합니다.

필수 조건

  • 구독의 Azure Blob Storage.
  • Azure Blob Storage에서 만든 컨테이너입니다.

Azure Blob Storage 연결 구성

먼저 Azure Blob Storage를 사용하도록 APS를 구성합니다.

  1. 'hadoop connectivity'를 Azure Blob Storage 공급자로 설정하여 sp_configure를 실행합니다. 공급자에 대한 값을 찾으려면 PolyBase 커넥트ivity 구성을 참조하세요.

    -- Values map to various external data sources.  
    -- Example: value 7 stands for Hortonworks HDP 2.1 to 2.6 on Linux,
    -- 2.1 to 2.3 on Windows Server, and Azure Blob Storage  
    sp_configure @configname = 'hadoop connectivity', @configvalue = 7;
    GO
    
    RECONFIGURE
    GO
    
  2. 어플라이언스 구성 관리자의 서비스 상태 페이지를 사용하여 APS 지역을 다시 시작합니다.

외부 테이블 구성

Azure Blob Storage의 데이터를 쿼리하려면 Transact-SQL 쿼리에서 사용할 외부 테이블을 정의해야 합니다. 다음 단계에서는 외부 테이블을 구성하는 방법을 설명합니다.

  1. 데이터베이스에 마스터 키를 만듭니다. 자격 증명 비밀을 암호화해야 합니다.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo';  
    
  2. Azure Blob Storage에 대한 데이터베이스 범위 자격 증명을 만듭니다.

    -- IDENTITY: any string (this is not used for authentication to Azure storage).  
    -- SECRET: your Azure storage account key.  
    CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = 'user', Secret = '<azure_storage_account_key>';
    
  3. CREATE EXTERNAL DATA SOURCE를 사용하여 외부 데이터 원본을 만듭니다.

    -- LOCATION:  Azure account storage account name and blob container name.  
    -- CREDENTIAL: The database scoped credential created above.  
    CREATE EXTERNAL DATA SOURCE AzureStorage with (  
          TYPE = HADOOP,
          LOCATION ='wasbs://<blob_container_name>@<azure_storage_account_name>.blob.core.windows.net',  
          CREDENTIAL = AzureStorageCredential  
    );  
    
  4. CREATE EXTERNAL FILE FORMAT을 사용하여 외부 파일 형식을 만듭니다.

    -- FORMAT TYPE: Type of format in Azure Blob Storage (DELIMITEDTEXT,  RCFILE, ORC, PARQUET).
    -- In this example, the files are pipe (|) delimited
    CREATE EXTERNAL FILE FORMAT TextFileFormat WITH (  
          FORMAT_TYPE = DELIMITEDTEXT,
          FORMAT_OPTIONS (FIELD_TERMINATOR ='|',
                USE_TYPE_DEFAULT = TRUE)  
    
  5. CREATE EXTERNAL TABLE을 사용하여 Azure Storage 에 저장된 데이터를 가리키는 외부 테이블을 만듭니다. 이 예제에서 외부 데이터에는 자동차 센서 데이터가 포함됩니다.

    -- LOCATION: path to file or directory that contains the data (relative to HDFS root).  
    CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] (  
          [SensorKey] int NOT NULL,
          [CustomerKey] int NOT NULL,
          [GeographyKey] int NULL,
          [Speed] float NOT NULL,
          [YearMeasured] int NOT NULL  
    )  
    WITH (LOCATION='/Demo/',
          DATA_SOURCE = AzureStorage,  
          FILE_FORMAT = TextFileFormat  
    );  
    
  6. 외부 테이블에 대한 통계를 만듭니다.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

PolyBase 쿼리

PolyBase에 적합한 세 가지 함수가 있습니다.

  • 외부 테이블에 대한 임시 쿼리입니다.
  • 데이터 가져오기
  • 데이터 내보내기

다음 쿼리는 가상의 자동차 센서 데이터와 함께 예제를 제공합니다.

임시 쿼리

다음 임시 쿼리는 관계형을 Azure Blob Storage의 데이터와 조인합니다. 35mph보다 빠르게 운전하는 고객을 선택하여 SQL Server에 저장된 구조적 고객 데이터를 Azure Blob Storage에 저장된 자동차 센서 데이터와 조인합니다.

SELECT DISTINCT Insured_Customers.FirstName,Insured_Customers.LastName,
       Insured_Customers. YearlyIncome, CarSensor_Data.Speed  
FROM Insured_Customers, CarSensor_Data  
WHERE Insured_Customers.CustomerKey = CarSensor_Data.CustomerKey and CarSensor_Data.Speed > 35
ORDER BY CarSensor_Data.Speed DESC  

데이터 가져오기

다음 쿼리는 외부 데이터를 APS로 가져옵니다. 이 예제에서는 더 자세한 분석을 수행하도록 빠른 드라이버의 데이터를 APS로 가져옵니다. 성능을 향상시키기 위해 APS의 Columnstore 기술을 활용합니다.

CREATE TABLE Fast_Customers
WITH
(CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = HASH (CustomerKey))
AS
SELECT DISTINCT
      Insured_Customers.CustomerKey, Insured_Customers.FirstName, Insured_Customers.LastName,   
      Insured_Customers.YearlyIncome, Insured_Customers.MaritalStatus  
from Insured_Customers INNER JOIN   
(  
      SELECT * FROM CarSensor_Data where Speed > 35   
) AS SensorD  
ON Insured_Customers.CustomerKey = SensorD.CustomerKey  

데이터 내보내기

다음 쿼리는 APS에서 Azure Blob Storage로 데이터를 내보냅니다. 관계형 데이터를 Azure Blob Storage에 보관하는 동시에 쿼리하는 데 사용할 수 있습니다.

-- Export data: Move old data to Azure Blob Storage while keeping it query-able via an external table.  
CREATE EXTERNAL TABLE [dbo].[FastCustomers2009] 
WITH (  
      LOCATION='/archive/customer/2009',  
      DATA_SOURCE = AzureStorage,  
      FILE_FORMAT = TextFileFormat
)  
AS
SELECT T.* FROM Insured_Customers T1 JOIN CarSensor_Data T2  
ON (T1.CustomerKey = T2.CustomerKey)  
WHERE T2.YearMeasured = 2009 and T2.Speed > 40;  

SSDT에서 PolyBase 개체 보기

SSDT(SQL Server Data Tools)에서는 외부 테이블이 별도의 외부 테이블 폴더에 표시됩니다. 외부 데이터 원본 및 외부 파일 형식은 외부 리소스 아래 의 하위 폴더에 있습니다.

A screenshot of PolyBase objects in the object explorer of SSDT.

다음 단계